femtolisp: A lightweight, robust, scheme-like Lisp implementation (github.com)

100 points by tosh 9 hours ago

borodi 8 hours ago

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.

eigenspace 7 hours ago

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.

tokai 7 hours ago

So Julia will no longer be a LISP? :'(

joshjob42 2 hours ago

eigenspace 6 hours ago

markkitti 7 hours ago

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

embedding-shape 4 hours ago

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?

pmcgoron 3 hours ago

Would SectorLISP (https://justine.lol/sectorlisp2/) count? It can run the LISP 1.5 metacircular evaluator.

soegaard 2 hours ago

aportnoy 4 hours ago

Is Bel a smaller LISP than what's described in The Roots of Lisp? [1]

[1] https://paulgraham.com/rootsoflisp.html

anthk 3 hours ago

Check Zenlisp and Kilo Lisp under http://t3x.org

Not the smallest, but a great example on how a Lisp can be reimplemented.

Also, http://www.t3x.org/lisp64k/index.html

naasking 3 hours ago

danlitt 6 hours ago

Interesting! This seems superficially related to GNU Mes[1], although I imagine femtolisp does not require its small source to be written in a "simple" dialect of C.

[1]: https://www.gnu.org/software/mes/