-
Software Development

Non-Lexical Lifetimes: How Rust Taught the Borrow Checker Where a Reference Actually Dies
One decision, nine years to ship: stop measuring a borrow’s lifetime by curly braces, start measuring it by last use.…
Read More » -
Core Java

Goroutines vs. Virtual Threads: Two Routes to Lightweight Concurrency, a Decade Apart
Go built its language around message passing from day one. Java spent thirty years on shared memory, then had to…
Read More » -
Software Development

Parser Combinators vs. Parser Generators: Why Tooling Keeps Choosing the Former
A grammar file and a build step, or a handful of composable functions. The industry’s answer has been drifting for…
Read More » -
Software Development

WebAssembly and the JVM: Two Answers to “Write Once, Run Anywhere”
Same bet, twenty years apart: a portable bytecode format run by a sandboxed virtual machine. In 1995, Sun Microsystems built…
Read More » -
Software Development

F#: The Functional Language Enterprises Could Actually Adopt
It shares the runtime, the packages, and the debugger with C#. That still was not enough. Elixir asks a team…
Read More » -
Core Java

Multiple Dispatch: Julia’s Different Answer to the Expression Problem
Sealed interfaces close the type list. Julia opens it, and the operation list, at once. A recent piece on this…
Read More » -
Software Development

CUDA and the Vendor Lock-In Problem in GPU Programming
NVIDIA’s dominance in AI hardware is a software story as much as a chip story. Comparing CUDA, AMD’s ROCm, and…
Read More » -
Software Development

Bash and PowerShell: Two Genuinely Different Philosophies of Scripting
Text streams versus typed object pipelines. It looks like a syntax difference. It is actually a disagreement about what a…
Read More » -
Software Development

D’s Forty-Year Identity Crisis
Garbage collection, manual memory management, and metaprogramming were all offered as options rather than defaults. That flexibility was the entire…
Read More »


