sl
A read-only mirror of https://git.kyotam.com/sigrid. It updates only from there.
| Name | Last commit date |
|---|---|
| .builds | 1 year ago |
| 3rd | 1 year ago |
| boot | 1 year ago |
| cross | 1 year ago |
| src | 1 year ago |
| test | 1 year ago |
| tools | 1 year ago |
| .gitattributes | 10 years ago |
| .gitignore | 1 year ago |
| .lcovrc | 1 year ago |
| gcovr.cfg | 1 year ago |
| LICENSE | 1 year ago |
| meson.build | 1 year ago |
| meson.options | 1 year ago |
| mkfile | 1 year ago |
| README.md | 1 year ago |
| README.orig.md | 3 years ago |
StreetLISP
< cinap_lenrek> maybe thats all you need
< cinap_lenrek> a street lisp
< cinap_lenrek> sl(1)
A compact interpreter for a minimal lisp/scheme dialect. A street lisp.
This is a reanimation of https://github.com/lambdaconservatory/femtolisp with bigger plans.
Supported OS: 9front, Unix-like operating systems (OpenBSD, NetBSD, Linux, etc).
Supported CPUs: any decent 32 or 64-bit, little or big endian.
Regularly tested on: 9front, OpenBSD, NetBSD, Alpine, Android.
Also runs on: MacOS 4.x-9.x, Mac OS X, Haiku, DOS.
Some of the changes from the original include:
- aggressive clean up, removal, renaming and refactoring
- bignums
- previously available (but not merged) patches from the community and Julia are applied
[and],{and}are synonyms to(and)«and»for verbatim stringsdefine→def,define-macro→defmacroλas a shorthand forlambdaTinstead of#t/#TandNILinstead of#fc***rof empty list returns empty list- docstrings -
(def (f ...) "Docs here" ...)and(help ...) - automatic gensyms for macros (
blah#) at read time - proper
(void)andvoid? - better error reporting - disassembly at the current instruction, location of syntax errors
- "boot" image is built into the executable
- vm opcode definitions and tables are generated from a single file
Two ways to learn about more changes:
Building
POSIX
meson setup build -Dbuildtype=release
ninja -C build test
Plan 9
mk all test
MacOS 4.x-9.x (m68k or PowerPC)
Clone and build Retro68. This fork grabs the necessary patches for more things to work as expected:
git clone https://git.sr.ht/~ft/retro68
mkdir retro68-build
cd retro68-build
../retro68/build-toolchain.bash --ninja
# wait until everything builds, make sure it did not error out
Now build sl:
cd sl
export PATH="$PATH:$(pwd)/../retro68-build/toolchain/bin"
# for PowerPC:
meson setup build . -Dbuildtype=minsize --cross-file cross/powerpc-apple.txt
# for m68k:
meson setup build . -Dbuildtype=minsize --cross-file cross/m68k-apple.txt
ninja -C build
Either build/sl.dsk or build/sl.bin is the file to get on your Mac.
NOTE: this isn't a full-fledged port and is going to stay low priority unless somebody wants to spend time polishing it.
DOS
Build DJGPP cross-compiler, then:
export PATH=$PATH:path-to-djgpp-toolchain/bin
meson setup build . -Dbuildtype=minsize --cross-file cross/djgpp.txt
ninja -C build
Result is build/sl.exe.
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