An extensible programming language

A few days ago I wrote about adding a factorial operator to my assembler [1], and I noted that I knew not of any other languages that had such a feature. So imagine my surprise as I'm reading about XL (eXtensible Language) [2] (via Lobsters [3]) and the second example is factorial [4]! Not only that, but that was an example of extending the language itself! The last time I was this excited about software was reading about Synthesis OS (Operating System) [5], a JIT (Just-In-Time)-based operating system where you could create your own system calls [6].

How it handles precedence is interesting. In my assembler [7], I have left or right associativity as an explicit field [8], whereas in XL, it's encoded in the precedence level itself [9]—even if its left, odd if its right. I'm not sure how I feel about that. On the one hand it feels nice and it's one less field to carry around; on the other, being explicit as I did makes it clear if something is left or right. But on the gripping hand, it sounds like matching precedence on a left and right operator could lead to problems, so I still may have an explicitness problem.

But I digress.

It's a very simple language with only one keyword “is” and a user-definable precedence table. The parser generates a parse tree of only eight types, four leaf nodes (integer, real, text, name (or symbol)) and four non-leaf nodes (prefix, infix, postfix and block). And from there, you get XL.

This is something I definitely want to look into [10].

[1] /boston/2024/02/07.1

[2] https://xlr.sourceforge.io/

[3] https://lobste.rs/s/zu2wx1/xl_extensible_programming_language

[4] https://xlr.sourceforge.io/#factorial

[5] https://web.archive.org/web/20080318162920/http://valhenson.org/synthesis/SynthesisOS/abs.html

[6] https://en.wikipedia.org/wiki/Self-modifying_code#Synthesis

[7] https://github.com/spc476/a09

[8] https://github.com/spc476/a09/blob/main/expr.c#L337

[9] https://xlr.sourceforge.io/#operator-precedence-and-associativity

[10] https://github.com/c3d/xl

Gemini Mention this post

Contact the author