Stutter
Implement a Lisp, in C, from scratch, no libs
Install / Use
/learn @mkirchner/StutterREADME
Stutter - Lisp, from scratch, in C

stutter is an educational Lisp interpreter implementation in C, written
entirely from scratch, not using any libraries (with the notable exception of
editline to maintain my sanity).
In other words, stutter is a practical exercise in a broad set of CS topics
including
- formal languages (lexing, parsing, abstract syntax trees)
- metalinguistic evaluation (eval/apply, macros)
- data structures (lists, trees, maps, arrays)
- automatic memory management (mark & sweep garbage collection)
All of it is implemented in one of the most bare-bones, down-to-earth (and unforgiving) languages out there: C99.
stutter is a work in progress (and will be, for the forseeable future). See
the tests to get an idea of what the language is already capable
of.
The Rules
Obviously, in modern our modern times, writing a Lisp interpreter is not as challenging as it used to be since there are a lot of libraries that can help us to achieve that goal. Hence, two rules:
- Write everything from scratch.
- Do not question the rules.
Getting started
Clone the repo and its submodules (submodules because the garbarge collector is in a separate repo).
$ git clone --recursive git@github.com:mkirchner/stutter.git
$ cd stutter
$ make && make test
This should work on a Mac with a recent clang. No efforts to make it portable
(yet).
Next steps
- [ ] Add a VM and support to compile to bytecode
- [ ] Document core language
- [ ] Better error reporting
- [ ] Surface lexer token line/col info in the reader
- [ ] Core capabilities
- [ ]
keywordsupport - [ ]
vectorsupport (ArrayC type is implemented but not surfaced) - [ ]
hash-mapsupport (MapC type is available but not surfaced)
- [ ]
- [ ] Add a type system
Related Skills
node-connect
344.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
96.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
