-
Notifications
You must be signed in to change notification settings - Fork 0
a stupid lisp dialect that I created for fun
License
johnbartholomew/smalisp
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
SmaLisp ======= SmaLisp is a simple lisp dialect, created for fun. It's slow and it has a very simplistic garbage collector. The language has a few neat features. Most lisps provide 'functions' and 'macros': functions receive arguments that have already been evaluated, and the result of the function is not evaluated; macros receive arguments that have not been evaluated, but the result of the macro is evaluated. SmaLisp adds a lower level form for which neither the arguments nor the result are evaluated, but the calling context is passed in as a parameter, which allows the closure to perform whatever evaluations or environment manipulation it needs to. Effectively, this lower level form, along with some facilities for direct manipulation of explicitly bound stack frame objects, allows almost all common forms to be implemented in SmaLisp code rather than as built-in functions. Of course, SmaLisp code is very slow so in practice built-ins are preferred. SmaLisp is usually interpreted directly from the code tree. However, I've also started adding a bytecode based evaluator. Bytecode functions can be directly created by SmaLisp code, which means that it should be possible to implement the bytecode compiler in SmaLisp. Unfortunately, this distribution does not include the bytecode evaluation code at all (I hope it hasn't been lost...) Legal ----- For licensing terms, see the accompanying license.txt. # vim: set ts=8 sts=3 sw=3 et ai tw=72 wm=6 wrap:
About
a stupid lisp dialect that I created for fun
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published