I’ve had an intense passion for creating programming languages for over fifteen years. I started writing a specification for my first design around December 1999. In 2007 I started “Loyc”, which was going to be a multi-syntax compiler based on popular programming languages, but it didn’t attract any interest and I abandoned the idea two or three years later. Instead I took up a hobby making data structures and creating miniature alternatives to popular libraries like NUnit, but once again these attracted very little interest, especially the fanciest and most difficult family of data structures I created, the ALists. In 2012 I started building the ANTLR competitor LLLPG and created LES version 1 as a work product, all in the service of my bigger plan to create Enhanced C#. I wrote all about LLLPG on CodeProject and followed up with a Visual Studio SFG for it. In the end I was able to get a few dozen upvotes, but I could never confirm that I had any users, even after Enhanced C# became available as the input language.
For several years I’ve been building a library themed “things that should be built into the .NET framework, but aren’t”. But I kept putting off writing articles about the things in there that should be built-in, but, you know, aren’t. No longer!
LESv3 was set back somewhat by the news that WebAssembly’s developers weren’t interested in going beyond s-expressions for the MVP. I wanted to suggest using a subset of LESv3 as the text format, something that could be implemented quickly; for instance instead of using syntax like this:
Merry Christmas my dear readers! Few though you may be….
Background: WebAssembly is a new technology being standardized for running native applications (e.g. C/C++/Rust) on the web. It used to be an expression-based language that was typically viewed as an abstract syntax tree (AST) — basically a high-level assembly language, moreso than C ever was. Recently, however, the design shifted into a postorder “stack machine” which supports all the code that could have been expressed as an AST, plus some “oddball” code that is not expressible as an AST (details).
I’ve proposed that WebAssembly adopt LES as the basis for its text format (or at least, to constrain the Wasm text format such that LES is a superset of it.) As part of that proposal, I’ve agreed to modify LES to suit the tastes of CG members. So far, only a couple of people have weighed in; in the meantime, I’ve been thinking preemptively about what changes to LES might make it more liked as a text format.
If, like me, you’re interested in understanding how and why the world is broken and how corruption works, there has been a spike in interesting articles about that recently. Do the world a favor and reserve some time to understand how corruption works, and what we can do about it.