sl

A read-only mirror of https://git.kyotam.com/sigrid. It updates only from there.

README.md

StreetLISP

< cinap_lenrek> maybe thats all you need
< cinap_lenrek> a street lisp
< cinap_lenrek> sl(1)

builds.sr.ht status

Coverage report

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 strings
  • define → def, define-macro → defmacro
  • λ as a shorthand for lambda
  • T instead of #t/#T and NIL instead of #f
  • c***r of empty list returns empty list
  • docstrings - (def (f ...) "Docs here" ...) and (help ...)
  • automatic gensyms for macros (blah#) at read time
  • proper (void) and void?
  • 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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t