femtolisp: A lightweight, robust, scheme-like Lisp implementation

1 day ago (github.com)

Fun fact, Julia's parser and part of its compiler are implemented in femtolisp, and you can access it using a not so secret option in the Julia CLI.

  • We are slowly moving on replacing this stuff with implementations written in pure julia.

    Currently the femtolisp parser is only used during bootstrapping the core systems so that we can parse the pure-julia parser and then we switch over to the julia parser. The same process is now happening with the femtolisp implementation of the lowering pass.

  •     $ julia --lisp
        ;  _
        ; |_ _ _ |_ _ |  . _ _
        ; | (-||||_(_)|__|_)|_)
        ;-------------------|-----    ------------------------------    -----------------------
        > (+ 1 2)
        3

Slightly unrelated, but you take what (hn item) you can get: What is the smallest lisp (semantically/language-wise) people know, that could be used for implementing itself? Theoretical or practical/"real" is less relevant, mostly just curious. So far, it seems Bel (by pg) might get the closest, but can't claim to be an expert, surely could be something smaller out there?

the interesting design choice here is prioritizing robustness over minimalism. most tiny lisps cut corners on error handling and GC to hit a small line count, which makes them great demos but terrible for embedding in real systems. femtolisps approach of being small AND robust enough to use as julias actual parser for years is a much harder target to hit.

the fact that its still under 10k lines of C after all this time while supporting a real type system, proper tail calls, and a copying GC is impressive. for comparison, lua - often cited as the gold standard for embeddable languages - is around 30k lines.