branches: main
Clone
clone: git://shithub.us/sigrid/femtolisp gits://shithub.us/sigrid/femtolisp
push: hjgit://shithub.us/sigrid/femtolisp
patches to: sigrid on 9gridchan, or
[email protected]
Last commit
b6927437
– Sigrid Solveig Haflínudóttir <
[email protected]>
authored
on 2024/11/27 19:12
compiler: none of the builtins are constants, still use their value directly
About
# femtolisp
A compact interpreter for a minimal lisp/scheme dialect.
This is a reanimation of
https://github.com/lambdaconservatory/femtolisp with bigger plans.
Supported OS: [9front](http://9front.org), Unix-like operating systems (OpenBSD, NetBSD, Linux, etc).
Supported CPUs: any decent 32 or 64-bit, little or big endian.
Tested on: 9front/arm64, OpenBSD/386, NetBSD/sparc64, Alpine/amd64, Android/arm64.
Some of the changes from the original include:
* aggressive clean up, removal, renaming and refactoring
* seamless arbitrary precision integers
* `[` and `]`, `{` and `}` are synonyms to `(` and `)`
* `λ` as a shorthand for `lambda`
* some of the previously available (but not merged) patches from the community and [Julia](https://github.com/JuliaLang/julia) are applied
* "boot" image is built into the executable
* vm opcode definitions and tables are generated from a single file
* fixed bootstrap (makes it work properly when opcodes change)
* built-in symbols aren't constants and can be redefined
## Building
### POSIX
meson setup build -Dbuildtype=release
ninja -C build test
### Plan 9
mk all test
## Characteristics
* lexical scope, lisp-1
* unrestricted macros
* case-sensitive
* simple compacting copying garbage collector
* Scheme-style varargs (dotted formal argument lists)
* "human-readable" bytecode with self-hosted compiler
* circular structure can be printed and read
* `#.` read macro for eval-when-read and readably printing builtins
* read macros for backquote
* symbol character-escaping printer
* exceptions
* gensyms (can be usefully read back in, too)
* `#| multiline comments |#`, `#;(block comment...`, lots of other lexical syntax
* generic compare function, cyclic equal
* cvalues system providing C data types and a C FFI
* constructor notation for nicely printing arbitrary values