# bytecode

Published articles for bytecode.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Generating Java bytecode: Write yourself a compiler, Part V

DevFeed: [Generating Java bytecode: Write yourself a compiler, Part V](<https://devfeed.tech/articles/generating-java-bytecode-write-yourself-a-compiler-part-v-38041.md>)

Original publisher: [Read original article](<https://nurkiewicz.com/2026/09/generating-java-bytecode-write-yourself-a-compiler.html>)

Published: 2026-09-14T22:00:00Z

Content type: tutorial

Language: en

Sources: [Tomasz Nurkiewicz around Java and concurrency](<https://devfeed.tech/sources/tomasz-nurkiewicz-around-java-and-concurrency.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [file](<https://devfeed.tech/tags/file.md>), [go](<https://devfeed.tech/tags/go.md>), [interpreter](<https://devfeed.tech/tags/interpreter.md>), [java](<https://devfeed.tech/tags/java.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [virtual-machine](<https://devfeed.tech/tags/virtual-machine.md>), [writing-compiler](<https://devfeed.tech/tags/writing-compiler.md>)

### AI overview

This tutorial explains how to extend a toy-language compiler to emit valid JVM bytecode in a .class file that can run on the Java Virtual Machine. It introduces JVM instruction families for pushing integer values and explains how the constant pool stores constants and symbolic references for reuse.

### Source excerpt

Last time we created a virtual machine for our toy language. I think you can agree that designing a language which barely recognizes expressions like 2 + 3w and building a brand-new virtual machine for it seems a bit tedious. So what about keeping our microscopic language for now, but running it on a real, production-ready, battle-proven virtual machine? Like the Java Virtual Machine? Our task for today is to emit JVM bytecode in the form of a valid .class file. That file can then be fed directly to the JVM to run our program.

## App Intents: One Java Declaration for Siri, Spotlight, and Shortcuts

DevFeed: [App Intents: One Java Declaration for Siri, Spotlight, and Shortcuts](<https://devfeed.tech/articles/app-intents-one-java-declaration-for-siri-spotlight-and-shortcuts-19197.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/app-intents-siri-spotlight-shortcuts/>)

Author: Shai Almog

Published: 2026-08-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [App](<https://devfeed.tech/topics/app.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Maven](<https://devfeed.tech/topics/maven.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [build](<https://devfeed.tech/tags/build.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [ios](<https://devfeed.tech/tags/ios.md>), [java](<https://devfeed.tech/tags/java.md>), [maven-plugin](<https://devfeed.tech/tags/maven-plugin.md>), [native](<https://devfeed.tech/tags/native.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>), [spotlight](<https://devfeed.tech/tags/spotlight.md>)

### AI overview

Codename One App Intents use Java annotations to generate reflection-free handlers for Siri, Spotlight, Shortcuts, Android launcher shortcuts, and internal application commands. The article explains build-time validation, entity parameters, routing, and concurrent handler execution.

### Source excerpt

Codename One App Intents generate reflection-free handlers for Siri, Spotlight, Shortcuts, Android launcher shortcuts, and an application command layer from Java annotations.

## Your First Virtual Machine: Write yourself a compiler, Part IV

DevFeed: [Your First Virtual Machine: Write yourself a compiler, Part IV](<https://devfeed.tech/articles/your-first-virtual-machine-write-yourself-a-compiler-part-iv-38040.md>)

Original publisher: [Read original article](<https://nurkiewicz.com/2026/08/your-first-virtual-machine-write-yourself-a-compiler.html>)

Published: 2026-08-24T22:00:00Z

Content type: tutorial

Language: en

Sources: [Tomasz Nurkiewicz around Java and concurrency](<https://devfeed.tech/sources/tomasz-nurkiewicz-around-java-and-concurrency.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [arithmetic](<https://devfeed.tech/tags/arithmetic.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [feature](<https://devfeed.tech/tags/feature.md>), [go](<https://devfeed.tech/tags/go.md>), [interpreter](<https://devfeed.tech/tags/interpreter.md>), [reverse-polish-notation](<https://devfeed.tech/tags/reverse-polish-notation.md>), [stack](<https://devfeed.tech/tags/stack.md>), [virtual-machine](<https://devfeed.tech/tags/virtual-machine.md>), [vm](<https://devfeed.tech/tags/vm.md>), [writing-compiler](<https://devfeed.tech/tags/writing-compiler.md>)

### AI overview

This tutorial explains how to build a virtual machine that reads and executes a binary intermediate representation. It covers the instruction loop, operand stack, arithmetic operations, postfix notation, and how the resulting executable compares with JVM files and .NET assemblies.

### Source excerpt

In the previous article, we emitted an intermediate representation (IR) for our programming language that is easier to process than source code. However, we did not build a program that could read and execute that IR. Such a program is called a virtual machine. Technically, it's still an interpreter. But instead of interpreting source code, it interprets IR. Our IR is binary, compact, structured, and generally faster to interpret than the original source. Moreover, as you'll see later, the VM's instruction set can express programs that our source language cannot produce yet!

## Compiling to intermediate representation: Write yourself a compiler, Part III

DevFeed: [Compiling to intermediate representation: Write yourself a compiler, Part III](<https://devfeed.tech/articles/compiling-to-intermediate-representation-write-yourself-a-compiler-part-iii-38039.md>)

Original publisher: [Read original article](<https://nurkiewicz.com/2026/08/compiling-to-intermediate-representation-write-yourself-a-compiler.html>)

Published: 2026-08-16T22:00:00Z

Content type: tutorial

Language: en

Sources: [Tomasz Nurkiewicz around Java and concurrency](<https://devfeed.tech/sources/tomasz-nurkiewicz-around-java-and-concurrency.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [virtual machines](<https://devfeed.tech/topics/virtual-machines.md>), [Code](<https://devfeed.tech/topics/code.md>), [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [assembly](<https://devfeed.tech/tags/assembly.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [go](<https://devfeed.tech/tags/go.md>), [interpreter](<https://devfeed.tech/tags/interpreter.md>), [ir](<https://devfeed.tech/tags/ir.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [python](<https://devfeed.tech/tags/python.md>), [virtual-machines](<https://devfeed.tech/tags/virtual-machines.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>), [writing-compiler](<https://devfeed.tech/tags/writing-compiler.md>)

### AI overview

This tutorial explains how a small interpreter project evolves into a compiler by emitting intermediate representation (IR). It contrasts interpreted and compiled languages, describes bytecode and virtual machines, and uses Java and WebAssembly examples to show how IR instructions are executed.

### Source excerpt

It's time to dive a bit deeper and abandon the naive realm of interpreters. Our tiny little project can finally call itself a compiler. In this part we'll emit so-called intermediate representation instead of just evaluating and running the source code as-is. OK, what does this all mean?

## Keleusma Research Spike: What Happens When Error Correction Meets a Signature

DevFeed: [Keleusma Research Spike: What Happens When Error Correction Meets a Signature](<https://devfeed.tech/articles/keleusma-research-spike-what-happens-when-error-correction-meets-a-signature-39756.md>)

Original publisher: [Read original article](<https://sgeos.github.io/engineering/compilers/verification/security/2026/08/10/when_error_correction_meets_a_signature.html>)

Author: Brendan Sechter

Published: 2026-08-10T09:00:00Z

Content type: article

Language: en

Sources: [Brendan A R Sechter's Development Blog](<https://devfeed.tech/sources/brendan-a-r-sechter-s-development-blog.md>)

Topics: [Security, Privacy and Abuse Prevention](<https://devfeed.tech/topics/security-privacy-and-abuse-prevention.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Code](<https://devfeed.tech/topics/code.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [cryptographic](<https://devfeed.tech/tags/cryptographic.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [integrity](<https://devfeed.tech/tags/integrity.md>), [research](<https://devfeed.tech/tags/research.md>), [security](<https://devfeed.tech/tags/security.md>), [test](<https://devfeed.tech/tags/test.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

This case study examines how combining error correction with cryptographic signatures can create an unsafe verification order. Exhaustive analysis of bit errors shows that some damaged inputs are incorrectly repaired or reported as clean, so a clean correction result does not establish integrity.

### Source excerpt

A file carries an error-correcting code so that a flipped bit can be repaired, and a cryptographic signature so that a changed byte is refused. Both are ordinary. Putting them in the same file forces a choice that neither feature announces, and one of the two answers is sound only under an assumption that the error-correcting code exists because it is false. The uncomfortable part is that the two answers are indistinguishable on every input anybody tests. An undamaged file behaves identically under both. They diverge only on damaged input, and damaged input is the case the error-correcting code exists for and the case no test suite exercises, because producing it requires deliberately corrupting your own artefact. Enumerating the fault space of a single 64-bit word exhaustively, rather than sampling it, gives four numbers that decide the design. The space is small enough to enumerate because the number of ways to flip $w$ bits out of 64 is a binomial coefficient, and for $w \le 4$ it stays under a million. \[\binom{64}{1} = 64, \quad \binom{64}{2} = 2{,}016, \quad \binom{64}{3} = 41{,}664, \quad \binom{64}{4} = 635{,}376\] flipped bits patterns repaired exactly wrongly "repaired" invisible 1 64 64 0 0 2 2,016 0 0 0 3 41,664 0 23,364 (56.08%) 0 4 635,376 0 0 5,133 (0.81%) Three flipped bits are reported as a successful repair 56.08 percent of the time, and the repair is wrong every time it happens. Four flipped bits are, 5,133 times, completely invisible, because the code reports the word as clean when the error pattern is itself a valid codeword. The consequence is one sentence, and everything else in this article is either its derivation or its implications. The corrector is not an authority on whether it corrected, and a clean report from it is not evidence of integrity. What this is a case study of The setting is the bytecode format for Keleusma, a language whose value proposition is that a program's worst-case time and memory can be proven before it runs, and wh

## Security Baked Into the JVM: the Safe Codebase Audit Pipeline

DevFeed: [Security Baked Into the JVM: the Safe Codebase Audit Pipeline](<https://devfeed.tech/articles/security-baked-into-the-jvm-the-safe-codebase-audit-pipeline-18929.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/security-baked-into-jvm/2/>)

Author: Peter Firmstone

Published: 2026-07-19T00:00:00Z

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Security](<https://devfeed.tech/topics/security.md>), [Java](<https://devfeed.tech/topics/java.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [dirtychai](<https://devfeed.tech/tags/dirtychai.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [java](<https://devfeed.tech/tags/java.md>), [jgdms](<https://devfeed.tech/tags/jgdms.md>), [jini](<https://devfeed.tech/tags/jini.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [security](<https://devfeed.tech/tags/security.md>), [supply-chain](<https://devfeed.tech/tags/supply-chain.md>), [systems](<https://devfeed.tech/tags/systems.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article presents the Safe Codebase Audit Pipeline, or SCAP, for analyzing third-party Java JARs before clients deserialize objects from them. It focuses on supply-chain risks from malicious bytecode and blocking static initializers, and describes distributing the pipeline across hosts with separate responsibilities and restricted network access.

### Source excerpt

In Part 1, the minimal deployment showed constraints traveling with the proxy: authentication, encryption, hardened deserialization, all declared in configuration and enforced at the call boundary. The proxy is a JAR. That JAR was downloaded and unmarshalled before any constraint ran. That step is the earlier problem. Distributed Java systems that load remote code are vulnerable to supply chain compromise: an attacker can replace a legitimate JAR with one containing malicious bytecode.

## How Gradle Is Javamaxxing

DevFeed: [How Gradle Is Javamaxxing](<https://devfeed.tech/articles/how-gradle-is-javamaxxing-24628.md>)

Original publisher: [Read original article](<https://blog.gradle.org/gradle-is-javamaxxing>)

Author: Laura Kassovic

Published: 2026-05-28T04:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [garbage-collectors](<https://devfeed.tech/tags/garbage-collectors.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [java-8](<https://devfeed.tech/tags/java-8.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance-optimization](<https://devfeed.tech/tags/performance-optimization.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

Gradle aggressively adopts new JDK releases because newer JVMs can improve build speed, memory use, startup behavior, and maintainability. JVM toolchains allow Gradle to run on JDK 26 while compiling and testing projects for older Java versions, including producing Java 8-compatible bytecode.

### Source excerpt

Some people optimize one part of their lives to the absolute limit, then past it. They call it "-maxxing." Houseplantmaxxing. Sleepmaxxing. Tokenmaxxing. The Gradle Build Tool is Javamaxxing. TL;DR Breathe easy knowing you can run modern Gradle on JDK 26 while still shipping Java 8-compatible artifacts: Gradle aggressively adopts new JDKs because newer JVMs make builds faster, leaner, and easier to maintain. Upgrading the JDK that runs Gradle is often the easiest performance win. JVM toolchains fully separate the JVM running Gradle, the JVM compiling your code, and the JVM running your tests. NOT TL;DR We aggressively adopt new JDK releases as soon as we responsibly can. Not because it's trendy. Because newer JDKs make Gradle faster, leaner, and easier to maintain. Every OpenJDK release ships improvements to the JVM; garbage collectors, compiler infrastructure, startup behavior, memory layout, and runtime APIs. As a high-performance JVM build tool, Gradle benefits directly from all of it. The question people immediately ask is: Does this mean my project also has to run on the newest JDK? No. That coupling effectively disappeared once Gradle introduced JVM toolchains. With toolchains, the JVM that runs Gradle is completely separate from the JVM that compiles, tests, and executes your code. You can run Gradle on JDK 26 today and still produce Java 8 bytecode. What Is the Current State of Gradle and Java? We add daemon support for every new JDK as soon as the ecosystem permits: Java 24 in Gradle 8.14.0, Java 25 in 9.1.0 (released two days after JDK 25 GA), Java 26 in 9.4.0. The full mapping is in the Compatibility Matrix. We then bump the minimum JVM required to execute Gradle as users move. Gradle 9.0.0, released on July 31, 2025, raised the minimum JVM required to run the Gradle daemon to Java 17. That was the first daemon JVM floor increase since Gradle 5.0 made Java 8 the minimum back in 2018. The next major transition is already underway, Gradle 10.0.0 will likely

## Practical Kotlin Deep Dive: A Book and Course on Kotlin Internals

DevFeed: [Practical Kotlin Deep Dive: A Book and Course on Kotlin Internals](<https://devfeed.tech/articles/practical-kotlin-deep-dive-master-kotlin-internals-and-ace-your-next-technical-interview-25926.md>)

Original publisher: [Read original article](<https://skydoves.medium.com/practical-kotlin-deep-dive-master-kotlin-internals-and-ace-your-next-technical-interview-33ff30f91493?source=rss-9bb203a4ab2e------2>)

Author: Jaewoong Eum

Published: 2026-02-18T03:55:53Z

Content type: article

Language: en

Sources: [Stories by Jaewoong Eum on Medium](<https://devfeed.tech/sources/stories-by-jaewoong-eum-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [android](<https://devfeed.tech/tags/android.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [internals](<https://devfeed.tech/tags/internals.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [programming](<https://devfeed.tech/tags/programming.md>), [technical](<https://devfeed.tech/tags/technical.md>), [technical-interview](<https://devfeed.tech/tags/technical-interview.md>)

### AI overview

This article introduces Practical Kotlin Deep Dive, a book and companion course focused on Kotlin internals. It describes coverage of bytecode decompilations, compiler source code, KEEP proposals, code examples, Code Playgrounds, and quiz questions across six chapters.

### Source excerpt

Most Kotlin developers can write a data class, launch a coroutine, or use lazy without thinking twice. These features work, the code compiles, and the app runs. But there is a gap between knowing how to use Kotlin and understanding what the compiler actually does with your code. That gap is where performance intuition, debugging skill, and technical interview confidence come from. Practical Kotlin Deep Dive is a book designed to close that gap, covering 70 Kotlin topics across 492 pages with bytecode decompilations, compiler source code references, and KEEP proposal analysis that reveal the machinery behind every feature you use daily. In this article, you'll explore what the book and its companion course cover, walking through each of the six chapters with examples of the insights you'll find inside. You'll see how the book approaches topics differently from typical Kotlin resources, what the "Pro Tips for Mastery" sections reveal about internal mechanisms, and how the interactive course format turns that knowledge into verified understanding through Code Playgrounds and 158 quiz questions. Beyond the syntax: Why internals matter Knowing that lazy caches a value on first access is useful. Knowing that the default lazy implementation uses double checked locking with a synchronized block, and that you can switch to a lock free compareAndSet strategy by passing LazyThreadSafetyMode.PUBLICATION, is the difference between using a feature and making informed decisions about it. The same applies across the language. Understanding that every lambda passed to a higher order function creates a Function object on the heap explains why inline exists. Seeing a data class decompiled into seven generated methods explains what the compiler is doing on your behalf. This is the approach Practical Kotlin Deep Dive takes throughout. Rather than describing what Kotlin features do, it examines how they work internally, what bytecode they produce, what design trade-offs the language desi

## 5 Kotlin Internals You Should Know

DevFeed: [5 Kotlin Internals You Should Know](<https://devfeed.tech/articles/5-kotlin-internals-you-should-know-25917.md>)

Original publisher: [Read original article](<https://proandroiddev.com/5-kotlin-internals-you-should-know-d4bab319d4ef?source=rss-9bb203a4ab2e------2>)

Author: Jaewoong Eum

Published: 2026-02-17T01:29:40Z

Content type: article

Language: en

Sources: [Stories by Jaewoong Eum on Medium](<https://devfeed.tech/sources/stories-by-jaewoong-eum-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [android](<https://devfeed.tech/tags/android.md>), [article](<https://devfeed.tech/tags/article.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

This article explains five Kotlin internals: compiler-generated methods for data classes, thread-safety strategies used by lazy delegates, type erasure for value classes, hidden allocations from higher-order functions and their removal through inline functions, and the JVM compilation of extension functions.

### Source excerpt

Unsplash@mrsimonfischer Kotlin makes writing clean, expressive code feel effortless. Features like data classes, lazy properties, and extension functions save you from the boilerplate that Java developers deal with daily. But behind every concise Kotlin feature is a compiler performing real work, generating bytecode, managing thread safety, and making allocation decisions on your behalf. Understanding what the compiler actually produces helps you write more performant code and make better design decisions. In this article, you'll explore five Kotlin internals that most developers should know, revealing what really happens when the compiler transforms your code. You'll examine how a single line data class expands into a full suite of generated methods, how the lazy delegate implements three distinct thread safety strategies, how value class achieves zero cost type safety through erasure, how higher order functions create hidden object allocations (and how inline eliminates them), and how extension functions compile to static methods on the JVM. These insights originate from Practical Kotlin Deep Dive, a book that explores 70 Kotlin topics at this level of depth and The Course: Practical Kotlin Deep Dive, covering the language fundamentals, standard library, coroutines, compiler internals, and Kotlin Multiplatform. Each section below is a window into the kind of "Pro Tips for Mastery" analysis you'll find throughout the book and course. 1. Data class: One line, six generated methods Most developers know that data class auto-generates equals(), hashCode(), and toString(). But the full scope of what the compiler produces from a single line is worth seeing firsthand. Start with this Kotlin class: https://medium.com/media/b1b28a62953d8d21ec6bb27a95216361/href One line. Two properties. Now look at what the Kotlin compiler generates when this is decompiled into Java bytecode: https://medium.com/media/a9bbcc4370d6da0f974bf53f903967f9/href The data keyword is an instruction t

## Haskell Debugger for GHC 9.14

DevFeed: [Haskell Debugger for GHC 9.14](<https://devfeed.tech/articles/haskell-debugger-for-ghc-9-14-27920.md>)

Original publisher: [Read original article](<http://alt-romes.github.io/posts/2026-01-07-haskell-debugger-for-ghc914.html>)

Published: 2026-01-07T00:00:00Z

Content type: tutorial

Language: en

Sources: [Romes' Musings](<https://devfeed.tech/sources/romes-musings.md>)

Topics: [debugging](<https://devfeed.tech/topics/debugging.md>), [Haskell](<https://devfeed.tech/topics/haskell.md>), [Neovim](<https://devfeed.tech/topics/neovim.md>), [Visual Studio Code](<https://devfeed.tech/topics/visual-studio-code.md>), [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>), [GitHub Issues](<https://devfeed.tech/topics/github-issues.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [crashes](<https://devfeed.tech/tags/crashes.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [editor](<https://devfeed.tech/tags/editor.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [issue](<https://devfeed.tech/tags/issue.md>), [performance](<https://devfeed.tech/tags/performance.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [vscode](<https://devfeed.tech/tags/vscode.md>)

### AI overview

This article announces that the Haskell Debugger is ready for GHC 9.14 and explains how to install it and configure editors through the Debug Adapter Protocol. It covers VSCode and Neovim integration, project-based session configuration, robustness goals, current limitations, and planned callstack and multithreading support.

### Source excerpt

This post was first published inline to the Haskell Discourse, where there was some discussion about the debugger: 1 The Haskell Debugger for GHC 9.14 The Haskell Debugger is ready to use with GHC-9.14! The installation, configuration, and talks can be found in the official website. The tl;dr first step is installing the debugger: $ ghc --version # MUST BE GHC 9.14 The Glorious Glasgow Haskell Compilation System, version 9.14.1 $ cabal install haskell-debugger \ --allow-newer=base,time,containers,ghc,ghc-bignum,template-haskell \ --enable-executable-dynamic # ON WINDOWS, DO NOT PASS --enable-executable-dynamic ... $ ~/.local/bin/hdb --version # VERIFY IT'S THE LATEST! Haskell Debugger, version 0.11.0.0 The second step is configuring your editor to use the debugger via the Debug Adapter Protocol (DAP). - For VSCode, install the haskell debugger extension. - For Neovim, install nvim-dap and configure it for haskell-debugger - For other editors, consult your DAP documentation and let others know how! Bug reports and discussions are welcome in the haskell-debugger issue tracker. My MuniHac 2025 talk also walks through the installation, usage, and design of the debugger. Do note much has been improved since the talk was given, and much more will still improve. 1.1 A little bit more info The debugger work is sponsored by Mercury. It's the project in which I've spent most of my full working days (for almost a full year now), with the invaluable help from my team at Well-Typed. The debugger is meant to work both on trivial files and on large and complex codebases1. It is a GHC application so all features are supported. Like HLS, it also uses hie-bios to automatically configure the session based on your cabal or stack project. Robustness is a main goal of the debugger. If anything doesn't work, or if you have performance issues, or something crashes, please don't hesitate to submit a bug. We've got a small but respectable testsuite, and have tested performance by debugging G

## Java Hello World, LLVM Edition

DevFeed: [Java Hello World, LLVM Edition](<https://devfeed.tech/articles/java-hello-world-llvm-edition-23022.md>)

Original publisher: [Read original article](<https://www.javaadvent.com/2025/12/java-hello-world-llvm-edition.html>)

Author: James Hamilton

Published: 2025-12-07T02:02:37Z

Content type: tutorial

Language: en

Sources: [Java Advent Calendar](<https://devfeed.tech/sources/java-advent-calendar.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [LLVM](<https://devfeed.tech/topics/llvm.md>), [API](<https://devfeed.tech/topics/api.md>), [JIT](<https://devfeed.tech/topics/jit.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [api](<https://devfeed.tech/tags/api.md>), [assembly](<https://devfeed.tech/tags/assembly.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [java](<https://devfeed.tech/tags/java.md>), [java-advent](<https://devfeed.tech/tags/java-advent.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jit](<https://devfeed.tech/tags/jit.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [llvm](<https://devfeed.tech/tags/llvm.md>)

### AI overview

This tutorial shows how to use Java's Foreign Function & Memory API to call the LLVM C API, generate LLVM IR for a Hello World program, and JIT-compile it to native code. It also introduces LLVM, its IR representations, and local installation on Ubuntu or Debian.

### Source excerpt

After exploring Java bytecode in previous years (2022, 2023, 2024), this year we'll take an unexpected detour for a Java advent: instead of generating Java bytecode, we'll use Java to build and execute LLVM IR, the intermediate language behind compilers like clang. Using Java's Foreign Function & Memory (FFM) API, we'll call the LLVM C [...] The post Java Hello World, LLVM Edition appeared first on JVM Advent.

## Building an AI REPL with QuickJS

DevFeed: [Building an AI REPL with QuickJS](<https://devfeed.tech/articles/building-an-ai-repl-with-quickjs-28087.md>)

Original publisher: [Read original article](<https://jlongster.com/building-an-ai-repl-with-quickjs>)

Author: James Long

Published: 2025-11-18T12:00:00Z

Content type: opinion

Language: en

Sources: [James Long](<https://devfeed.tech/sources/james-long.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [wasm](<https://devfeed.tech/topics/wasm.md>), [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [anthropic](<https://devfeed.tech/topics/anthropic.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [User experience (UX)](<https://devfeed.tech/topics/ux.md>), [C](<https://devfeed.tech/topics/c.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Error Handling](<https://devfeed.tech/topics/error-handling.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [anthropic](<https://devfeed.tech/tags/anthropic.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [c](<https://devfeed.tech/tags/c.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [github](<https://devfeed.tech/tags/github.md>), [ux](<https://devfeed.tech/tags/ux.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>)

### AI overview

The article describes a three-hour experiment building an AI-integrated REPL with a custom WebAssembly build of QuickJS. The system evaluated JavaScript locally, exposed function bytecode and execution controls, and sent failed evaluations to Anthropic's Sonnet 4.5. The author concludes that the approach was not very useful for simple scripts but sees potential in sharing an executing environment with AI and debugger hooks.

### Source excerpt

Yesterday I did a livestream where I built a usable REPL with AI integration. Mostly from scratch, all in 3 hours. It uses a custom WASM build of QuickJS for evaluation. If the evaluation fails, it sends the text to Anthropic to speak to Sonnet 4.5. The idea was to meld a live evaluation environment together with AI. By using QuickJS as an evaluator, we get more than just a sandbox: we are able to inspect bytecode of functions, we could pause execution as needed, etc. I thought we might discover use cases that would be difficult to do by sending JS to eval off to a remote sandbox (or a separate node instance). It's also a UX experiment: you can either write code or talk to AI. In the end, it didn't prove to be super useful. The cases where I want to provide deep introspection at runtime to AI are where I'm already working with a very complex codebase, not writing simple scripts. For the UX, I generally want to write code in a dedicated editor and send it off to be evaluated. I still think there's merit in the idea of sharing an executing environment with AI with the debugger hooks enabled; I'm researching companies working on this. Let me know if you know of any. Still, it was fun to give AI the ability to get the bytecode for a function and describe what the function does at a very low-level. I asked to write a function that sums the numbers in an array, and then asked it to get the bytecode and describe it: Some notable things that happened during this: QuickJS doesn't come with a WASM build by default. I told Claude Code to compile it to WebAssembly, and it got Emscripten all setup and successfully built it to WASM Sonnet 4.5 was able to very easily write a bunch of C code to provide new APIs in QuickJS Changing how error handling works, another example of how nice it was to get AI to work with the C code I intended to eventually dig into QuickJS and change some fundamental features but decided to pause this experiment Adding tools is really fun. Here I added a t

## Cangjie -- a programming language from Huawei

DevFeed: [Cangjie -- a programming language from Huawei](<https://devfeed.tech/articles/cangjie-a-programming-language-from-huawei-24546.md>)

Original publisher: [Read original article](<https://medium.com/snapp-mobile/cangjie-a-programming-language-from-huawei-fb0f7776be06?source=rss----bcd96e620b02---4>)

Author: Jasper Morgan

Published: 2025-08-19T07:37:53Z

Content type: opinion

Language: en

Sources: [Snapp Mobile - Medium](<https://devfeed.tech/sources/snapp-mobile-medium.md>)

Topics: [Programming language](<https://devfeed.tech/topics/programming-language.md>), [huawei](<https://devfeed.tech/topics/huawei.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [Embedded Systems](<https://devfeed.tech/topics/embedded-systems.md>), [Cross-Compilation](<https://devfeed.tech/topics/cross-compilation.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [cloud-computing](<https://devfeed.tech/topics/cloud-computing.md>), [Package Management](<https://devfeed.tech/topics/package-management.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [architectures](<https://devfeed.tech/tags/architectures.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [cangjie](<https://devfeed.tech/tags/cangjie.md>), [china](<https://devfeed.tech/tags/china.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [cross-compilation](<https://devfeed.tech/tags/cross-compilation.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [embedded-systems](<https://devfeed.tech/tags/embedded-systems.md>), [huawei](<https://devfeed.tech/tags/huawei.md>), [huawei-developers](<https://devfeed.tech/tags/huawei-developers.md>), [language](<https://devfeed.tech/tags/language.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [package-management](<https://devfeed.tech/tags/package-management.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

This article examines Cangjie, an open-sourced programming language from Huawei. It describes Cangjie as a C-like language with features associated with Swift and Kotlin, support for embedded systems, mobile development, and cloud architectures, interoperability with C and Python, JVM bytecode compilation, cross-compilation, and integrated developer tools. The article suggests Huawei created it to gain more control over its language roadmap and consolidate development skills across products.

### Source excerpt

Cangjie -- a programming language from Huawei Huawei have been busy. Last month they open-sourced a programming language that is looking pretty interesting. Whilst you might not be writing in Cangjie next week, it's good to see what one of the world's largest technology companies is doing such that they have created a new programming language. TL;DR Cangjie is a C-like programming language that feels more like Swift/Kotlin than Java/C# or JavaScript/Typescript. The idea is for Cangjie to become the common programming language to be used throughout Huawei. Cangjie can be used for embedded systems, mobile development, server-side cloud architectures. It supports a variety of programming paradigms (function, OO, procedural), compilation and integration options. Cangjie can call C libraries (and be called from C), use Python libraries and even compile to JVM bytecode. Cangjie supports language extension to create lightweight DSLs. Primarily Cangjie programs are compiled into machine code -- this include cross compilation which mean they can run natively on different computer architectures. Cangjie comes with a set of in-built tools for developers such as package management, debugging, testing and IDE integration. Cangjie is openly available since this month and is in version 0.53.13. Why create a new language? Simply put, Cangjie gives Huawei a level of control and an economy of scale that they cannot get from other languages. Most mainstream languages are driven predominantly by teams in USA and Europe. It is hard to influence the road map for these languages -- especially for those tightly controlled by corporations (e.g. Java/Kotlin/Swift). Furthermore, consolidating programming skills could be a big efficiency gain for Huawei -- engineers working on products ranging from routers to petabyte storage to cloud computing and mobile devices can coalesce around one language and toolset. Show me some code I won't go into any detail here so this is just to satisfy your curiosit

## The ITTAGE indirect branch predictor

DevFeed: [The ITTAGE indirect branch predictor](<https://devfeed.tech/articles/the-ittage-indirect-branch-predictor-21953.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/post/ittage-branch-predictor/>)

Author: Nelson Elhage

Published: 2025-07-04T21:30:00Z

Content type: article

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [cpu](<https://devfeed.tech/topics/cpu.md>), [Python](<https://devfeed.tech/topics/python.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [Python 3.14](<https://devfeed.tech/topics/python-3-14.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [performance](<https://devfeed.tech/tags/performance.md>), [python](<https://devfeed.tech/tags/python.md>), [python-3-14](<https://devfeed.tech/tags/python-3-14.md>)

### AI overview

An explanatory article about ITTAGE indirect branch prediction and how modern CPUs predict bytecode-dispatch jumps. It connects the topic to Python 3.14's tail-calling interpreter and describes ITTAGE as a TAGE variant that predicts indirect jump destinations using program-counter history and multiple history-length tables.

### Source excerpt

While investigating the performance of the new Python 3.14 tail-calling interpreter, I learned (via this very informative comment from Sam Gross) new (to me) piece of performance trivia: Modern CPUs mostly no longer struggle to predict the bytecode-dispatch indirect jump inside a "conventional" bytecode interpreter loop. In steady-state, assuming the bytecode itself is reasonable stable, modern CPUs achieve very high accuracy predicting the dispatch, even for "vanilla" while / switch-style interpreter loops1!

## CPython Performance Evolution: From Specialization to JIT

DevFeed: [CPython Performance Evolution: From Specialization to JIT](<https://devfeed.tech/articles/cpython-performance-evolution-from-specialization-to-jit-10.md>)

Original publisher: [Read original article](<https://blog.abhimanyu-saharan.com/posts/cpython-performance-evolution-from-specialization-to-jit>)

Author: Abhimanyu Saharan

Published: 2025-05-24T00:00:00Z

Content type: article

Language: en

Sources: [Abhimanyu Saharan](<https://devfeed.tech/sources/abhimanyu-s-blog.md>)

Topics: [JIT](<https://devfeed.tech/topics/jit.md>)

Tags: [3](<https://devfeed.tech/tags/3.md>), [adaptive](<https://devfeed.tech/tags/adaptive.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [evolution](<https://devfeed.tech/tags/evolution.md>), [jit](<https://devfeed.tech/tags/jit.md>), [performance](<https://devfeed.tech/tags/performance.md>), [python](<https://devfeed.tech/tags/python.md>), [python-3-14](<https://devfeed.tech/tags/python-3-14.md>)

### AI overview

This article explains CPython's performance evolution from adaptive bytecode in version 3.11 to JIT execution in version 3.14, improving performance without requiring an interpreter rewrite.

### Source excerpt

Explore how CPython evolved from adaptive bytecode in 3.11 to JIT execution in 3.14, boosting performance without rewriting the interpreter.

## Performance of the Python 3.14 tail-call interpreter

DevFeed: [Performance of the Python 3.14 tail-call interpreter](<https://devfeed.tech/articles/performance-of-the-python-3-14-tail-call-interpreter-21947.md>)

Original publisher: [Read original article](<https://blog.nelhage.com/post/cpython-tail-call/>)

Author: Nelson Elhage

Published: 2025-03-09T22:00:00Z

Content type: article

Language: en

Sources: [Nelson Elhage](<https://devfeed.tech/sources/nelson-elhage.md>)

Topics: [Python 3.14](<https://devfeed.tech/topics/python-3-14.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [gcc](<https://devfeed.tech/topics/gcc.md>), [LLVM](<https://devfeed.tech/topics/llvm.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [clang](<https://devfeed.tech/tags/clang.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [intel](<https://devfeed.tech/tags/intel.md>), [llvm](<https://devfeed.tech/tags/llvm.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-engineering](<https://devfeed.tech/tags/performance-engineering.md>), [python](<https://devfeed.tech/tags/python.md>), [python-3-14](<https://devfeed.tech/tags/python-3-14.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>)

### AI overview

This article examines the performance gains attributed to CPython's Python 3.14 tail-call bytecode interpreter. It finds that the initial 10-15% improvement was primarily caused by inadvertently working around an LLVM 19 regression; with better baselines, the gain is closer to 1-5%, depending on the setup.

### Source excerpt

About a month ago, the CPython project merged a new implementation strategy for their bytecode interpreter. The initial headline results were very impressive, showing a 10-15% performance improvement on average across a wide range of benchmarks across a variety of platforms. Unfortunately, as I will document in this post, these impressive performance gains turned out to be primarily due to inadvertently working around a regression in LLVM 19. When benchmarked against a better baseline (such GCC, clang-18, or LLVM 19 with certain tuning flags), the performance gain drops to 1-5% or so depending on the exact setup.

## Audit Results for the Pectra System Contracts

DevFeed: [Audit Results for the Pectra System Contracts](<https://devfeed.tech/articles/audit-results-for-the-pectra-system-contracts-17139.md>)

Original publisher: [Read original article](<https://blog.ethereum.org/en/2025/02/28/pectra-audit-results>)

Author: Protocol Security Research Team

Published: 2025-02-28T00:00:00Z

Content type: article

Language: en

Sources: [Ethereum Foundation Blog](<https://devfeed.tech/sources/ethereum-foundation-blog.md>)

Topics: [Ethereum](<https://devfeed.tech/topics/ethereum.md>), [Security](<https://devfeed.tech/topics/security.md>), [Formal verification](<https://devfeed.tech/topics/formal-verification.md>)

Tags: [bug-bounty](<https://devfeed.tech/tags/bug-bounty.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [ethereum](<https://devfeed.tech/tags/ethereum.md>), [formal-verification](<https://devfeed.tech/tags/formal-verification.md>), [reports](<https://devfeed.tech/tags/reports.md>), [review](<https://devfeed.tech/tags/review.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

The article reports on external security reviews and formal verification of the Ethereum Pectra System Contracts. It states that all relevant or important issues identified in the reviews were addressed, while noting that the verification assessed bytecode correctness against the specifications rather than the security of the specifications themselves. A Pectra bug bounty competition is also running with rewards of up to $2,000,000.

### Source excerpt

The security of the Ethereum protocol is continually being improved, and one recent effort is the external security review of the Pectra System Contracts. The results of this review can be found in the audits repository, and the TL;DR is that all discovered issues deemed relevant or important from...

## Crafting Android bytecode analysis tooling using a secret ingredient (Part 1)

DevFeed: [Crafting Android bytecode analysis tooling using a secret ingredient (Part 1)](<https://devfeed.tech/articles/crafting-android-bytecode-analysis-tooling-using-a-secret-ingredient-part-1-22597.md>)

Original publisher: [Read original article](<https://medium.com/bumble-tech/crafting-android-bytecode-analysis-tooling-using-a-secret-ingredient-part-1-13e2d5a65113?source=rss----6353b5325b1a---4>)

Author: Konstantin Zolotov

Published: 2024-02-09T11:50:19Z

Content type: tutorial

Language: en

Sources: [Bumble Tech](<https://devfeed.tech/sources/bumble-tech.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>), [APK](<https://devfeed.tech/topics/apk.md>), [obfuscation](<https://devfeed.tech/topics/obfuscation.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Java](<https://devfeed.tech/topics/java.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [andriod-app-development](<https://devfeed.tech/tags/andriod-app-development.md>), [android](<https://devfeed.tech/tags/android.md>), [apk](<https://devfeed.tech/tags/apk.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [inlining](<https://devfeed.tech/tags/inlining.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [obfuscation](<https://devfeed.tech/tags/obfuscation.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [r8](<https://devfeed.tech/tags/r8.md>), [tooling](<https://devfeed.tech/tags/tooling.md>)

### AI overview

This tutorial introduces Android bytecode analysis through DEX inspection and a tool for examining how source-code changes affect compiled binaries. It explains the Android compilation pipeline from Java or Kotlin source through JVM class files and D8-generated DEX files, then describes R8 obfuscation and optimization, including source maps, tree-shaking, inlining, and outlining.

### Source excerpt

During the development process, we often focus on the source code but rarely inspect the compiled bytecode. This means we're missing out on a valuable source of information and data for analysis. How? Let's delve into Dex file inspection and build a tool that demonstrates how source code changes impact the compiled binary. Have you ever set R8 rules to obfuscate your app? Have you used an APK analyzer or a diffuse tool to understand how the code is compiled? Are you confident that debug code hasn't leaked into production? There's another potential pitfall: libraries may provide obfuscation rules (e.g., Gson) that merge with the ones in your project. This means third-party dependencies can alter configurations for the entire app. We often assume everything is fine and that we'll notice if something isn't right. But will we? Does this make you feel uneasy? Does it concern you? Because it certainly concerns me. Here, we'll attempt to enhance the situation and enable you to see precisely how your code changes impact the compiled binary. To better comprehend this, let's start with the code compilation process: It all begins with the Java and/or Kotlin source code, which is then compiled into JVM .class files. Note that at this stage, Java and Kotlin compilers can execute annotation processing tools (APT/KAPT) to generate source code (e.g., Dagger), and Kotlin compiler can run plugins to modify the internal code representation. Then, the D8 compiler takes these compiled classes, third-party libraries (JARs, AARs), and converts them into .dex files. However, if obfuscation and/or minification are enabled (which is almost always the case for release builds), R8 comes into play after D8. R8 obfuscates and optimises the bytecode, and additionally, R8 produces a source map file -- a special file listing all the changes and replacements. Obfuscation replaces human-readable names of various entities (classes, functions, fields, etc.) with very short, yet still unique names, for e

## Extensions in Kotlin

DevFeed: [Extensions in Kotlin](<https://devfeed.tech/articles/extensions-in-kotlin-39331.md>)

Original publisher: [Read original article](<https://kt.academy/article/kfde-extensions>)

Published: 2023-10-09T00:01:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Extension](<https://devfeed.tech/topics/extension.md>), [class](<https://devfeed.tech/topics/class.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [extension](<https://devfeed.tech/tags/extension.md>), [extension-function](<https://devfeed.tech/tags/extension-function.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [static](<https://devfeed.tech/tags/static.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains Kotlin extension functions and properties, including how they are defined, called on receiver instances, and used with types from external APIs. It also examines their JVM implementation, where an extension receiver becomes a regular parameter in a static function.

### Source excerpt

What are extensions in Kotlin and how do we use them.

## An In-depth Look at Gradle's Approach to Faster Compilation

DevFeed: [An In-depth Look at Gradle's Approach to Faster Compilation](<https://devfeed.tech/articles/an-in-depth-look-at-gradle-s-approach-to-faster-compilation-24676.md>)

Original publisher: [Read original article](<https://blog.gradle.org/our-approach-to-faster-compilation>)

Author: Octavia Togami

Published: 2023-08-25T04:00:00Z

Content type: comparison

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [build performance](<https://devfeed.tech/topics/build-performance.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [build-performance](<https://devfeed.tech/tags/build-performance.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>)

### AI overview

The article explains Gradle's compilation avoidance, which skips recompilation when a class is unchanged and changes to its dependencies remain ABI-compatible. It compares approaches that do and do not generate header JARs and examines their effect on build performance.

### Source excerpt

One of many performance optimizations that make Gradle Build Tool fast and scalable is compilation avoidance. Gradle avoids recompiling as much as possible by determining if the result of compilation would be identical, even if upstream dependencies have changed. The situation can be illustrated like this: if classes MyApp and NumberUtils are in different projects and MyApp's project depends on NumberUtils's project at compile time, then any internal change to NumberUtils does not require MyApp's project to be recompiled. Both before and after the change, MyApp compiles to identical bytecode, so Gradle can continue to use the MyApp.class file it has already built. Gradle is smart enough to avoid recompiling a class if and only if two conditions are true: 1) its own code hasn't changed and 2) any changes to classes it compiles against are ABI-compatible. As discussed previously in the Compilation Avoidance blog post, this is a complementary feature to incremental compilation and works without the need to generate "header JARs" or "ABI JARs" known from some other build systems. In this post, we compare these two approaches to compilation avoidance (with and without the generation of header JARs) and measure how skipping header JAR generation allows Gradle to achieve superior build performance. Definitions Before we dive into performance comparisons, let's clarify a few important concepts. What is an ABI? ABI stands for "Application Binary Interface". In Java, this means the parts of the library that are exposed to consumers, such as most public classes, public methods, and public fields. A library's ABI does not include the bodies of methods, private classes, private methods, or private fields. If a library changes its ABI, this can cause compilation failures or runtime errors for downstream consumers. If a library's ABI has not changed between two versions, we call those versions "ABI-compatible" or "binary compatible". A full definition of binary compatibility can b

## What is Gradle and why do we use it as Android developers?

DevFeed: [What is Gradle and why do we use it as Android developers?](<https://devfeed.tech/articles/what-is-gradle-and-why-do-we-use-it-as-android-developers-25852.md>)

Original publisher: [Read original article](<https://medium.com/@banmarkovic/what-is-gradle-and-why-do-we-use-it-as-android-developers-572a07b3675d?source=rss-8aced922ece------2>)

Author: Ban Markovic

Published: 2023-01-16T12:52:02Z

Content type: tutorial

Language: en

Sources: [Stories by Ban Markovic on Medium](<https://devfeed.tech/sources/stories-by-ban-markovic-on-medium.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [android-apps](<https://devfeed.tech/topics/android-apps.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [automation-tools](<https://devfeed.tech/tags/automation-tools.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [groovy](<https://devfeed.tech/tags/groovy.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [libraries](<https://devfeed.tech/tags/libraries.md>)

### AI overview

A tutorial explaining Gradle's role in Android development, including how build.gradle files specify dependencies and how Gradle automates application building and running.

### Source excerpt

At the start of a journey for an Android developer, no one pays attention to Gradle. We are mostly focused on writing Kotlin code and developing Android apps that bring great value to our customers and look as beautiful as possible. When building them, sometimes we stumble upon a problem that is already solved by someone else on the internet and they were kind enough to share their project in a form of library, that we are able to implement in our app, and customize it to our needs. To be able to do so, we are using build.gradle file for implementing those libraries that help us build our apps, by specifying their unique package names and versions. This is probably the most common use case of our Gradle usage inside our Android projects. Motivation At the beginning of my career I didn't see a need for better understanding of Gradle, because for me it represented only the place where I wrote the names of the libraries I wanted to use inside my project. With that kind of approach, I didn't have any knowledge regarding it, and I was scared to change anything inside those files, because I was afraid I would break everything. After some time I realized that gradle files are built with code.. And I am a programmer.. So why am I avoiding it when I can learn it like any other programming language. What an epiphany, right? That's why I decided to write an article regarding the gradle files inside Android project. Just so anyone can read and understand them. Gradle Gradle is a build tool that we use for Android development to automate the process of building and publishing apps. Now, you may think that building and running the application is quite easy; we can just press Run button in Android Studio. Well, that just triggers Gradle's built-in tasks (functions) that are responsible for running the application on our emulator or real device. This process requires a couple of steps to be successfully completed in order for us to see the running app. These are the general steps t

## Why the Bytecode Alliance is important to the Wasm ecosystem

DevFeed: [Why the Bytecode Alliance is important to the Wasm ecosystem](<https://devfeed.tech/articles/why-the-bytecode-alliance-is-important-to-the-wasm-ecosystem-15261.md>)

Original publisher: [Read original article](<https://www.fermyon.com/blog/intro-to-the-bytecode-alliance>)

Author: James Bohrman

Published: 2022-04-02T13:00:00Z

Content type: article

Language: en

Sources: [Fermyon - Experience the next wave of cloud computing.](<https://devfeed.tech/sources/fermyon-experience-the-next-wave-of-cloud-computing.md>)

Topics: [wasm](<https://devfeed.tech/topics/wasm.md>), [trust](<https://devfeed.tech/topics/trust.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [building](<https://devfeed.tech/tags/building.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [ecosystem](<https://devfeed.tech/tags/ecosystem.md>), [organization](<https://devfeed.tech/tags/organization.md>), [secure-by-default](<https://devfeed.tech/tags/secure-by-default.md>), [software](<https://devfeed.tech/tags/software.md>), [standards](<https://devfeed.tech/tags/standards.md>), [trust](<https://devfeed.tech/tags/trust.md>), [wasm](<https://devfeed.tech/tags/wasm.md>)

### AI overview

The article introduces the Bytecode Alliance as a nonprofit standards-setting organization focused on building secure-by-default software and establishing trust within the Wasm ecosystem.

### Source excerpt

For any ecosystem to grow, it's important for standards to be implemented that establish trust with users within the community. This is the motivation behind the Bytecode Alliance, a non-profit standards setting organization devoted to building secure-by-default software.

## Graydon Hoare: 21 compilers and 3 orders of magnitude in 60 minutes

DevFeed: [Graydon Hoare: 21 compilers and 3 orders of magnitude in 60 minutes](<https://devfeed.tech/articles/graydon-hoare-21-compilers-and-3-orders-of-magnitude-in-60-minutes-29487.md>)

Original publisher: [Read original article](<http://lambda-the-ultimate.org/node/5648>)

Published: 2022-02-27T14:47:26Z

Content type: opinion

Language: en

Sources: [Lambda the Ultimate](<https://devfeed.tech/sources/lambda-the-ultimate.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Machine learning](<https://devfeed.tech/topics/machine-learning.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [ml](<https://devfeed.tech/tags/ml.md>), [pdf](<https://devfeed.tech/tags/pdf.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [talk](<https://devfeed.tech/tags/talk.md>), [theory](<https://devfeed.tech/tags/theory.md>)

### AI overview

The article discusses Graydon Hoare's 2019 undergraduate talk about compiler design, summarizing different approaches ranging from large traditional compilers to variants using selective optimization, compiler-friendly languages, theory-driven tools, intermediate representations, interpretation, partial evaluation, or hand-written implementations.

### Source excerpt

In 2019, Graydon Hoare gave a talk to undergraduates (PDF of slides) trying to communicate a sense of what compilers looked like from the perspective of people who did it for a living. I've been aware of this talk for over a year and meant to submit a story here, but was overcome by the sheer number of excellent observations. I'll just summarise the groups he uses: The giants: by which he means the big compilers that are built the old-fashioned way that throw massive resources at attaining efficiency The variants, which use tricks to avoid being so massive: Fewer optimisations: be traditional, but be selective and only the optimisations that really pay off Use compiler-friendly languages, by which he is really taking about languages that are good for implementing compilers, like Lisp and ML Theory-driven meta-languages, esp. how something like yacc allows a traditional Dragon-book style compiler to be written more easily Base compiler on a carefully designed IR that is either easy to compile or reasonable to bytecode-interpret Exercise discretion to have the object code be a mix of compiled and interpreted Use sophisticated partial evaluation Forget tradition and implement everything directly by hand I really recommend spending time working through these slides. While much of the material I was familiar with, enough was new, and I really appreciated the well-made points, shout-outs to projects that deserve more visibility, such as Nanopass compilers and CakeML, and the presentation of the Futamura projections, a famously tricky concept, at the undergraduate level.

## Use latest Kotlin in your Gradle plugins

DevFeed: [Use latest Kotlin in your Gradle plugins](<https://devfeed.tech/articles/use-latest-kotlin-in-your-gradle-plugins-25435.md>)

Original publisher: [Read original article](<https://blog.mbonnin.net/use-latest-kotlin-in-your-gradle-plugins>)

Author: Martin Bonnin

Published: 2021-11-12T15:13:39Z

Content type: tutorial

Language: en

Sources: [Martin Bonnin's blog](<https://devfeed.tech/sources/martin-bonnin-s-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>)

### AI overview

This article explains the classloader and embedded Kotlin runtime limitations that arise when using newer Kotlin APIs in Gradle plugins. It discusses the resulting compatibility problem and workarounds including bytecode restrictions and Gradle's Worker API with classloader isolation.

### Source excerpt

This is the story of how I got down the rabbit hole of relocating classes while trying to workaround the Gradle classloaders and fixed Kotlin runtime limitations. I'm not sure if I'd recommend trying this at home but this was an interesting journey! ...

[Next page](<https://devfeed.tech/tags/bytecode.md?cursor=WyIyMDIxLTExLTEyVDE1OjEzOjM5KzAwOjAwIiwgImEyMTI0ODFiLThkODUtNGE3Zi1iMDZmLTY5NTJjYzg5M2Y2NCJd>)