~ft/femtolisp

Femtolisp: Gedo Art of Rinne Rebirth

33cfd0c remove table-foreach

~ft pushed to ~ft/femtolisp git

5 hours ago

#18 generic map

~ft filed ticket on femtolisp todo

22 hours ago

#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, 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 are applied
  • c***r of empty list returns empty list
  • "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