A half-hour to learn Rust
In order to increase fluency in a programming language, one has to read a lot of it. But how can you read a lot of it if you don’t know what it means? In this article, instead of focusing on one or...
Crafting “Crafting Interpreters”
It took three years and 200,000 words more than I expected, but my second book, Crafting Interpreters , is complete. I finished the third draft of the last chapter today, marking the last of around 1,400 days of continuous writing.
Python dicts are now ordered
There were several moments over the last few weeks when I heard people discuss differences between Python lists and dicts and one of the first ones mentioned was that lists are ordered and dicts are not.
Why I’m Leaving Elm
Why I can't use Elm, and can't recommend it to others.
I Want Off Mr. Golang's Wild Ride
My honeymoon with the Go language is extremely over. This article is going to have a different tone from what I’ve been posting the past year - it’s a proper rant. And I always feel bad writing tho...
Rust After the Honeymoon
Two years ago, I had a blog entry describing falling in love with Rust . Of course, a relationship with a technology is like any other relationship: as novelty and infatuation wears off, it can get on a longer term (and often more realistic and subdued) footing – or it can begin to fray. So well one might ask: how is…
An Intuition for Lisp Syntax
Every lisp hacker I ever met, myself included, thought that all those brackets in Lisp were off-putting and weird. At first, of course. Soon after we all came to the same epiphany: lisp’s power lies in those brackets ! In this essay, we’ll go on a journey to that epiphany.
A possible new back end for Rust
So typically when you want to make your own compiled language you need a compiler to.. well.. compile it into something useful. Then making it work across a wide range of operating systems and CPU architectures is a huge effort, let alone having it be performant. This is where LLVM comes in.
Moving from TypeScript to Rust / WebAssembly
My experience with both languages.
It's not what programming languages do, it's what they shepherd you to
How many of you have listened, read or taken part in a discussion about programming languages that goes like the following: Person A: "Pro...
Zig's New Relationship with LLVM
While not yet at version 1.0, Zig is about to reach a new level of maturity and stability.
Why's (Poignant) Guide to Ruby (2004)
Pretend that you’ve opened this book (although you probably have opened this book), just to find a huge onion right in the middle crease of the book. (The manufacturer of the book has included the onion at my request.)
Stages of denial in encountering K
It is a lazy Tuesday afternoon. Perhaps you were idly browsing your favorite news aggregator, or visiting The Orange Website to wade through murky startup groupthink in search of interesting links.
Most(ly dead) Influential Programming Languages
The other day I read 20 most significant programming languages in history, a “preposterous table I just made up.” He certainly got preposterous right: he lists Go as “most significant” but not ALGOL, Smalltalk, or ML. He also leaves off Pascal because it’s “mostly dead”. Preposterous! That defeats the whole point of…
Elixir Is Erlang, not Ruby
Elixir is not Ruby. The familiar syntax has definitely helped the language win the hearts of the broader developer community. Yet, under the hood, Elixir is all about Erlang.
Mercurial’s journey to and reflections on Python 3
Mercurial 5.2 was released on November 5, 2019. It is the first version of Mercurial that supports Python 3. This milestone comes nearly 11 years after Python 3.0 was first released on December 3, 2008.
The use of `class` for things that should be simple free functions
For those who only read above the fold: I don’t say that all object-orientation is bad! OOP, especially classical polymorphic OOP, has a well-deserved place in real code. I’m going to talk about a very specific antipattern that I see with some frequency: the use of class for things that should be simple free functions.
A Complete Guide to LLVM for Programming Language Creators
We'll explain the concepts underlying LLVM IR, and how you can use the LLVM C++ API in your programming language's compiler.
Dynamic type systems are not inherently more open
Internet debates about typing disciplines continue to be plagued by a pervasive myth that dynamic type systems are inherently better at modeling “open world” domains. The argument usually goes like this: the goal of static typing is to pin everything down as much as possible, but in the real world, that just isn’t…
My least favorite Rust type
Idx is typically an integral type, but you can make a Range of anything, which will become important later. Here’s a range of Unit:
I can't keep up with idiomatic Rust
Recently withoutboats posted a series of blog posts about some syntax sugar he would like added to Rust.
Rewriting m4vgalib in Rust
If this isn’t your first time visiting my blog, you may recall that I’ve spent the past several years building an elaborate microcontroller graphics demo using C++.
To become a good C programmer (2011)
Every once in a while I receive an email from a fellow programmer asking me what language I used for one of my games and how I learned it. Here is an entry that list the best things to read about C. If you know of other gems, please email me or add a comment at the bottom of the page.