Skip to content
Tech News
← Back to articles

Pop-2000, a lingua-franca POP-2 dialect

read original get Crafting Interpreters by Robert Nystrom → more articles
Why This Matters

This article highlights the renewed interest in POP-2, a language from the 1970s, as a potential lingua-franca for tiny systems and compilers. Its simplicity and ease of implementation make it valuable for modern low-level programming and system bootstrapping, bridging legacy language design with contemporary needs.

Key Takeaways
Worth a Look

Crafting Interpreters by Robert Nystrom — If tiny compilers and bootstrapping little languages are your thing, Crafting Interpreters walks you through building two complete language implementations from scratch, a tree-walking interpreter and a bytecode VM. It's the perfect companion for anyone tinkering with POP-2 dialects, Uxn assemblers, or their own minimal language runtime.

See Crafting Interpreters by Robert Nystrom on Amazon → Affiliate link — we may earn a commission on purchases, at no extra cost to you. Product picked by AI based on this article; it is not a tested recommendation.

POP-2000, a lingua-franca POP-2 dialect

Written 2026-08-24

Devine (of Uxn fame) and I have been talking a lot about POP-2, a language from the 1970s originally used in the same circles as the first Lisp dialects.

Devine had been looking into writing a new assembler for Uxn in a high-level language to aid in bootstrapping a Uxn system, while I personally have always been interested in languages that would make for good "tiny compilers", and we came upon POP-2 as something that would make for a good lingua-franca between all of these tiny systems.

Tiny Compilers (or, why I don't exactly care for concatenative programming)

A bit of a crazy title, I know. Don't get me wrong, I love the concatenative programming paradigm- its way of forming new functions/constructs via juxtaposition and composition are really elegant. But something that I tried to make clear in the paper I wrote for ok is that I don't feel particularly drawn to concatenative languages for those features- rather, I like concatenative languages because they're ridiculously easy to write an interpreter/compiler for while (often, not always) allowing for some low-level control- at least, compared to the other languages that I like playing around with, like C or Odin.

Coming from someone who originally made conlangs (a LOT of conlangs) before they'd even begun to touch computer programming, I care more about the langdev-side of things than actually making software. Specifically, when I'd work on an idea for a programming language, I typically had the following goals in mind:

As easy as possible to implement an interpreter/compiler for a given system, ideally using basically no external tools/libraries for parsing or code generation

Fairly "usable" (rather vague and subjective, but effectively it "shouldn't look like an esolang", going by an "I know it when I see it" description)

Minimal syntax

... continue reading