Skip to main content


Implemented #Lisp in #Uxntal today, it makes for a 2kb embeddable virtual machine that I can embed in our next game project. I've implemented a bunch of Lisp systems over the years(Ronin, SECDs, etc..) but it's the first time doing it in a catlang. It's impressive how well it maps to a stack machine, it's clearly a better fit than binding environment to a register, things just want to be linear, there's no need whatsoever for variables.
git.sr.ht/~rabbits/heol
This entry was edited (2 hours ago)
in reply to Devine Lu Linvega

I just want to say that what you can accomplish in such a short time is beyond impressive. It kinda breaks my brain: on one side, there's you, on the other side, there's a team of experienced software developers at work that quoted me 230 story points (roughly 230 working days) to build a relatively straightforward dashboard editor in JavaScript.

I mean, if I go to my teams and say something like "I know someone that can build a whole programming language using *their own* language/ecosystem within 2Kb for TWO story points..." I think most people would just quit.

in reply to H3RALD

@h3rald :moomin_eyes_blush: ah well, I've had lots of practice for this kind of things over the years. Thank you for saying so tho : )
in reply to Devine Lu Linvega

>things just want to be linear

Are you willing to elaborate? Not sure I understand what "linear" means in this context. But also, I haven't been feeling well lately lol...

in reply to William D. Jones

@cr1901 I can explain, yeah. Instead of breaking spatial organization of a program(storing data into registers) the stack presents the data needed for lisp evaluation from the start. For example:
in reply to Devine Lu Linvega

i really need to make a lisp sometime!!!

i've studied your SECD implementation but it mostly went over my head 😞

This entry was edited (2 hours ago)
in reply to Devine Lu Linvega

i've always thought lisp was closer to a catlang than it was to something like C, ages ago i made a toy lang where "(" was an immediate word for "push function onto function stack" and ")" was gur word for "pop function stack and execute",
then realised it was just kinda forth with an extra stack
in reply to ebx

@bx it totally is, I just never really put this hypothesis to the test until today.
@ebx
in reply to Devine Lu Linvega

I had the same feeling recently (been learning Forth and using a lot of Scheme)

Cons = Push
Cdr = Pop
Quote and unquote = [ and ]
Functions are lists = Words are stacks
(Potentially heretical, but) parentheses are fiddly = Stack manipulation is fiddly

(I'm sure there are many other equivalences!)

in reply to Pat

@mostlypat yeah, there's a lot more that are quite subtle, esp when you implement a lisp in forth, or forth in lisp.

Have you ever read this?
web.archive.org/web/2017111803…

@Pat
in reply to Devine Lu Linvega

I have not, thanks! It seems really interesting (especially how Forth can be viewed in terms of lambda combinators)

Lo, thar be cookies on this site to keep track of your login. By clicking 'okay', you are CONSENTING to this.