<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michele Gallotti</title>
    <description>The latest articles on DEV Community by Michele Gallotti (@michele_gallotti).</description>
    <link>https://dev.to/michele_gallotti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3779738%2F19b4c3c3-2413-4772-8a40-291fbb939286.png</url>
      <title>DEV Community: Michele Gallotti</title>
      <link>https://dev.to/michele_gallotti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michele_gallotti"/>
    <language>en</language>
    <item>
      <title>JLS Deep Dive: Variables &amp; Definite Assignment — When is a Value 'Safe'?</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Fri, 13 Mar 2026 10:41:56 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/jls-deep-dive-variables-definite-assignment-when-is-a-value-safe-1ljn</link>
      <guid>https://dev.to/michele_gallotti/jls-deep-dive-variables-definite-assignment-when-is-a-value-safe-1ljn</guid>
      <description>&lt;p&gt;Before you can write safe code, you must understand how the compiler proves it's safe. In Java, this proof is called &lt;strong&gt;Definite Assignment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Defined in JLS Chapter 16, it's a static analysis that guarantees no local variable is ever read before a value has been assigned to it. This mechanism is the reason local variables don't have default values, and it's what allows the compiler to be so strict about initialization paths.&lt;/p&gt;

&lt;p&gt;This sixth chapter in our Java SE 25 deep dive explores the world of variables from the compiler's perspective.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;8 kinds of variables&lt;/strong&gt; recognized by the JLS, from instance variables to lambda parameters, and their different initialization strategies.&lt;/li&gt;
&lt;li&gt;The formal distinction between a &lt;strong&gt;&lt;code&gt;final&lt;/code&gt;&lt;/strong&gt; variable and an &lt;strong&gt;&lt;code&gt;effectively final&lt;/code&gt;&lt;/strong&gt; one, and why this matters for lambdas and anonymous classes.&lt;/li&gt;
&lt;li&gt;How the compiler's flow analysis navigates &lt;strong&gt;short-circuit operators&lt;/strong&gt; (&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; and &lt;code&gt;||&lt;/code&gt;) to determine if a variable is assigned in all possible code paths.&lt;/li&gt;
&lt;li&gt;The concept of &lt;strong&gt;Definite Unassignment&lt;/strong&gt;, the mirror image of definite assignment, which ensures a &lt;code&gt;final&lt;/code&gt; variable is assigned &lt;em&gt;exactly once&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a guide to the rules that make Java a memory-safe language, grounded in the official JLS documentation.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-04" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-04&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JLS and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>coding</category>
      <category>programming</category>
      <category>jvm</category>
    </item>
    <item>
      <title>JVMS Deep Dive: How the JVM Represents Data — Integers, Floats, and the Mysterious returnAddress</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Tue, 10 Mar 2026 06:58:14 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/jvms-deep-dive-how-the-jvm-represents-data-integers-floats-and-the-mysterious-returnaddress-403p</link>
      <guid>https://dev.to/michele_gallotti/jvms-deep-dive-how-the-jvm-represents-data-integers-floats-and-the-mysterious-returnaddress-403p</guid>
      <description>&lt;p&gt;At the source code level, Java has a rich type system. But at the bytecode level, the Java Virtual Machine operates on a much simpler, more efficient set of computational types. For the JVM, most of your variables are just &lt;code&gt;int&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This fifth chapter in our Java SE 25 deep dive explores &lt;strong&gt;JVMS Chapter 2&lt;/strong&gt;, focusing on how data is represented and manipulated on the stack. We'll uncover the discrepancy between language types and computational types and shed light on the most enigmatic type in the specification: &lt;code&gt;returnAddress&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The difference between &lt;strong&gt;Category 1&lt;/strong&gt; (32-bit) and &lt;strong&gt;Category 2&lt;/strong&gt; (64-bit) types and why it matters for stack instructions like &lt;code&gt;pop&lt;/code&gt;/&lt;code&gt;pop2&lt;/code&gt; and &lt;code&gt;dup&lt;/code&gt;/&lt;code&gt;dup2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;How the JVM promotes &lt;code&gt;byte&lt;/code&gt;, &lt;code&gt;short&lt;/code&gt;, &lt;code&gt;char&lt;/code&gt;, and &lt;code&gt;boolean&lt;/code&gt; to &lt;code&gt;int&lt;/code&gt; for all computational purposes.&lt;/li&gt;
&lt;li&gt;The story of the &lt;strong&gt;&lt;code&gt;returnAddress&lt;/code&gt; type&lt;/strong&gt;, a primitive with no Java equivalent, used for the now-forbidden &lt;code&gt;jsr&lt;/code&gt;/&lt;code&gt;ret&lt;/code&gt; subroutines.&lt;/li&gt;
&lt;li&gt;The concept of &lt;strong&gt;Word Tearing&lt;/strong&gt; and why &lt;code&gt;volatile&lt;/code&gt; is the specified solution for &lt;code&gt;long&lt;/code&gt; and &lt;code&gt;double&lt;/code&gt; in multi-threaded code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full article: &lt;a href="https://eldritch.codes/en/tome/tome-01-lexical-foundations/chapter-04" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tome/tome/tome-01-lexical-foundations/chapter-04&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JLS and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>coding</category>
      <category>jvm</category>
      <category>programming</category>
    </item>
    <item>
      <title>JLS Deep Dive: The Java Type System — Primitives vs. References</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Fri, 06 Mar 2026 10:26:51 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/jls-deep-dive-the-java-type-system-primitives-vs-references-fl5</link>
      <guid>https://dev.to/michele_gallotti/jls-deep-dive-the-java-type-system-primitives-vs-references-fl5</guid>
      <description>&lt;p&gt;Most Java developers know the difference between &lt;code&gt;int&lt;/code&gt; and &lt;code&gt;Integer&lt;/code&gt;. But do you know &lt;em&gt;why&lt;/em&gt; &lt;code&gt;List&amp;lt;Integer&amp;gt;&lt;/code&gt; is not a subtype of &lt;code&gt;List&amp;lt;Number&amp;gt;&lt;/code&gt;? Or that &lt;code&gt;null&lt;/code&gt; has its own type — one you can never declare?&lt;/p&gt;

&lt;p&gt;This fourth chapter in our Java SE 25 deep dive explores &lt;strong&gt;JLS Chapter 4&lt;/strong&gt; — the formal specification of Java's type system. We go beyond the surface to understand the rules that govern every variable, every cast, and every generic you write.&lt;/p&gt;

&lt;p&gt;In this article, you'll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The precise distinction between &lt;strong&gt;primitive types&lt;/strong&gt; (stored on the stack, direct value) and &lt;strong&gt;reference types&lt;/strong&gt; (heap-allocated, pointer semantics).&lt;/li&gt;
&lt;li&gt;The full &lt;strong&gt;widening primitive conversion&lt;/strong&gt; chain (&lt;code&gt;byte → short → int → long → float → double&lt;/code&gt;) and when a &lt;strong&gt;narrowing&lt;/strong&gt; cast is required.&lt;/li&gt;
&lt;li&gt;The mechanics of &lt;strong&gt;autoboxing and unboxing&lt;/strong&gt; — including the JVM's integer cache (-128 to 127) and the &lt;code&gt;NullPointerException&lt;/code&gt; risk of unboxing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type erasure&lt;/strong&gt; (JLS §4.6): why generic type information is removed at compile time and what &lt;strong&gt;reifiable types&lt;/strong&gt; are.&lt;/li&gt;
&lt;li&gt;The special &lt;strong&gt;null type&lt;/strong&gt;: why it's the subtype of all reference types, yet has no name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a beginner's guide to generics. It's a formal, specification-grounded analysis of the type system that underpins every line of Java you write.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-03" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-03&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JLS and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>jvm</category>
      <category>coding</category>
    </item>
    <item>
      <title>JLS Deep Dive: The Rules of the Language — Identifiers, Keywords, and the Underscore</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Mon, 02 Mar 2026 13:20:41 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/jls-deep-dive-the-rules-of-the-language-identifiers-keywords-and-the-underscore-45ol</link>
      <guid>https://dev.to/michele_gallotti/jls-deep-dive-the-rules-of-the-language-identifiers-keywords-and-the-underscore-45ol</guid>
      <description>&lt;p&gt;Every language has its grammar, and Java's is defined by the Java Language Specification (JLS ). Before you can master the patterns, you must understand the vocabulary.&lt;/p&gt;

&lt;p&gt;This third chapter in our deep dive into Java SE 25 explores the fundamental rules that govern how we name things in Java. We'll look at the strict hierarchy of identifiers, reserved keywords, and the more flexible contextual keywords.&lt;/p&gt;

&lt;p&gt;In this article, you'll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The formal rules for creating a valid &lt;strong&gt;identifier&lt;/strong&gt; (and why &lt;code&gt;my-var&lt;/code&gt; is illegal but &lt;code&gt;my$var&lt;/code&gt; is not).&lt;/li&gt;
&lt;li&gt;The difference between the 51 &lt;strong&gt;reserved keywords&lt;/strong&gt; (&lt;code&gt;class&lt;/code&gt;, &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;else&lt;/code&gt;) and the 17 &lt;strong&gt;contextual keywords&lt;/strong&gt; (&lt;code&gt;var&lt;/code&gt;, &lt;code&gt;record&lt;/code&gt;, &lt;code&gt;sealed&lt;/code&gt;) that allow the language to evolve without breaking old code.&lt;/li&gt;
&lt;li&gt;The new role of the &lt;strong&gt;underscore (&lt;code&gt;_&lt;/code&gt;)&lt;/strong&gt; as a reserved keyword for unnamed variables and patterns, a key feature for writing cleaner, more readable code.&lt;/li&gt;
&lt;li&gt;How the compiler resolves name conflicts through &lt;strong&gt;Shadowing&lt;/strong&gt; and &lt;strong&gt;Obscuring&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a guide to the foundational syntax of modern Java, grounded in the official JLS documentation.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-02" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-02&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JLS and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jvm</category>
      <category>programming</category>
      <category>jls</category>
    </item>
    <item>
      <title>The Forbidden Workshop: Three Interactive Tools to See Inside the Java Compiler</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Fri, 27 Feb 2026 14:07:48 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/the-forbidden-workshop-three-interactive-tools-to-see-inside-the-java-compiler-1ndk</link>
      <guid>https://dev.to/michele_gallotti/the-forbidden-workshop-three-interactive-tools-to-see-inside-the-java-compiler-1ndk</guid>
      <description>&lt;p&gt;Most developers write Java every day without ever seeing what happens &lt;em&gt;before&lt;/em&gt; compilation begins.&lt;/p&gt;

&lt;p&gt;Tokenization, parsing, semantic analysis — these three stages transform the text you write into something the JVM can actually execute. They're the foundation of every compiler, and yet most of us treat them as a black box.&lt;/p&gt;

&lt;p&gt;I built three interactive tools — free and open source — that let you observe each phase live, on real Java code. These aren't simplified simulations: they follow the actual language specifications.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ The Arcane Tokenizer — Java Tokenizer
&lt;/h2&gt;

&lt;p&gt;Enter any Java code and watch the scanner break it down into lexical tokens: keywords, identifiers, operators, literals. This is the first step of every compiler — the moment raw text becomes structured data.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌲 The Arcane Parser — Java Parser
&lt;/h2&gt;

&lt;p&gt;Visualize the &lt;strong&gt;Abstract Syntax Tree&lt;/strong&gt; generated by a recursive descent parser. See how a flat sequence of tokens becomes a tree structure with hierarchical relationships — &lt;code&gt;MethodDecl&lt;/code&gt;, &lt;code&gt;Block&lt;/code&gt;, &lt;code&gt;Expr&lt;/code&gt;, &lt;code&gt;Literal&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  👁️ The Semantic Eye — Java Semantic Analyzer
&lt;/h2&gt;

&lt;p&gt;Type checking, variable scoping, initialization analysis, return path analysis. The errors the parser can't see, semantic analysis reveals. This is where the compiler starts to &lt;em&gt;understand&lt;/em&gt; your code.&lt;/p&gt;




&lt;p&gt;Each tool includes bilingual step-by-step explanations (IT/EN) and a coverage section showing exactly what's supported and what's not.&lt;/p&gt;

&lt;p&gt;👉 Try the tools: &lt;a href="https://eldritch.codes/en/tools" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tools&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JVM and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jvm</category>
      <category>programming</category>
      <category>code</category>
    </item>
    <item>
      <title>JVMS Deep Dive: From Source to Bits — How the JVM Interprets Tokens and Literals</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Thu, 26 Feb 2026 10:15:09 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/jvms-deep-dive-from-source-to-bits-how-the-jvm-interprets-tokens-and-literals-52d7</link>
      <guid>https://dev.to/michele_gallotti/jvms-deep-dive-from-source-to-bits-how-the-jvm-interprets-tokens-and-literals-52d7</guid>
      <description>&lt;p&gt;Most tutorials teach you &lt;em&gt;what&lt;/em&gt; to write. This series explores &lt;em&gt;how&lt;/em&gt; the JVM actually runs it.&lt;/p&gt;

&lt;p&gt;This second chapter dives deep into the &lt;code&gt;.class&lt;/code&gt; file, leaving the source code behind. We'll follow the journey of a simple literal — from a token to a structured entry in the &lt;code&gt;constant_pool&lt;/code&gt;, and finally onto the operand stack via a specific bytecode instruction.&lt;/p&gt;

&lt;p&gt;In this article, you'll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The structure and purpose of the &lt;strong&gt;Run-Time Constant Pool&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;How the JVM uses different instructions (&lt;code&gt;ldc&lt;/code&gt;, &lt;code&gt;bipush&lt;/code&gt;, &lt;code&gt;iconst&lt;/code&gt;) to load constants efficiently.&lt;/li&gt;
&lt;li&gt;The internal representation of primitive types (e.g., why &lt;code&gt;boolean&lt;/code&gt; is treated as an &lt;code&gt;int&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The mechanics of &lt;strong&gt;String Interning&lt;/strong&gt; and the evolution of string concatenation with &lt;code&gt;invokedynamic&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't another high-level overview. It's a deep dive into the arcane machinery of Java SE 25, built directly on the Java Virtual Machine Specification.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-01" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tome/tome-02-jvm-runtime/chapter-01&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JVM and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jvm</category>
      <category>bytecode</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Building Blocks of Code: Lexical Structure and Grammars in Java SE 25</title>
      <dc:creator>Michele Gallotti</dc:creator>
      <pubDate>Mon, 23 Feb 2026 06:53:51 +0000</pubDate>
      <link>https://dev.to/michele_gallotti/the-building-blocks-of-code-lexical-structure-and-grammars-in-java-se-25-5bpo</link>
      <guid>https://dev.to/michele_gallotti/the-building-blocks-of-code-lexical-structure-and-grammars-in-java-se-25-5bpo</guid>
      <description>&lt;p&gt;Most Java tutorials teach you &lt;em&gt;what&lt;/em&gt; to write. This series is different — it explores the language from the perspective of how the JVM actually processes your code, guided by the original documentation that most developers never open.&lt;/p&gt;

&lt;p&gt;In this first chapter, you'll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the JLS formally defines Java through context-free grammars&lt;/li&gt;
&lt;li&gt;The difference between lexical grammar and syntactic grammar&lt;/li&gt;
&lt;li&gt;How raw text is transformed into tokens before compilation even begins&lt;/li&gt;
&lt;li&gt;Why understanding lexical analysis changes the way you read (and debug) code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't another tutorial sequence — it's a deep dive into the arcane foundations of Java SE 25, built directly on the Java Language Specification.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://eldritch.codes/en/tome/tome-01-lexical-foundations/chapter-01" rel="noopener noreferrer"&gt;https://eldritch.codes/en/tome/tome-01-lexical-foundations/chapter-01&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of the "Eldritch Codes" series — a comprehensive guide to Java SE 25, explored through the lens of the JVM and the original specs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jvm</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
