Skip to content

nusgart/XNS-LISP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XNS-LISP (Xenon Simple Lisp)

XNS-LISP is a basic lisp implementation for learning purposes in implementing Lisp, not learning Lisp itself. If you want to learn Lisp, then you should learn a standard dialect like Common Lisp, Scheme, or Clojure (EMACS Lisp has an older design that uses default dynamic scoping and doesn't have closures, but IS very useful because of EMACS).

XNS-Lisp is a Lisp 1 that will otherwise be somewhat similar to Common Lisp. It uses CheneyGC for its garbage collector, which means that it is a precise GC -- so if you want to interface with it using C, see the handle API (or the root pointer registration API, which is more complicated and harder to use).

License

Copyright 2018- Nicholas Nusgart, All Rights Reserved

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Explanation

In the tradition of Lisp implementations such as CMUCL and SBCL, I would like to put as few restrictions as possible on XNS-LISP. Hence, I license XNS-LISP under the Apache 2.0 License.

TODO: (Neccesary things/tools/...)

  • List structured memory -- done. Implementation is robust against everything except memory corruption (ususally from out of bounds writes).
  • Garbage collection -- CheneyGC implemented, works, but is demanding of C code unless handles are used
  • GC handles -- most of the code is unaware of handles.
  • Environment handling -- initial, lexical scoping implemented
  • S-Expression I/O -- both input & output (still fragile)
  • Source file loading -- done.
  • EVAL/APPLY/EVALIS -- implementation is maturing but still fragile.
  • Primitives -- Mostly done with core primitives, math is done, IO is in progress (still thinking about OS interface)
  • REPL -- Initial implementation, no history or line editing yet.
  • Standard Library -- initial implementation (need to consider how to bundle this...)
  • Implement backquote: writing macros without it is really irritating
  • fmemopen replacement for Mac OS and the BSDs.

Authors:

Credits