Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Spaik, a Lisp compiler/VM with a moving GC written in Rust (github.com/snyball)
5 points by snyball 4 days ago | hide | past | favorite | 5 comments

The first compiler, vm, and "large" (>=500loc) Rust program I've written. Worked on it as part of a compiler class at Uni. Some of the GC parts are written in C because of my initial unfamiliarity with unsafe Rust.

It'd be great to get some feedback on the design, use of Rust, etc. given the fact that this was such a fun learning experience.

Awesome! Have you considered doing another step further -- emitting native code? :) I am a little biased because I've only ever written a Lisp -> machine code compiler, not bytecode, but I'd like to write a bytecode compiler one day.

I've considered emitting LLVM, or using C as a high-level assembly language, but not directly to native code. I've been wanting to write some simple arcade-like games using spaik, and it'd be a shame to either restrict it to a single architecture or needing separate implementations. (that, and being able to benefit from the 100s of lifetimes spent optimizing LLVM and gcc code generation.)

Spaik also doesn't have an AST-level interpreter for evaluating macros, it compiles and runs the bytecode on-the-fly for macro-expansions declared and used in the same compilation unit. And I figured it'd be even more of a hassle with native code.

What’s a moving GC?

The GC may move allocated objects around, changing their pointers in the process. This is used in some garbage collectors (.NET and Haskell for example) to combat memory fragmentation, by compacting the memory to remove small gaps.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact