README.mediawiki

May 12, 2012 ยท View on GitHub

tort - Tiny Object RunTime

Inspired by Ian Piumarta's idst, maru and other small runtimes.

Core is approx. 5000 lines of C.

Supports:

  • Primitive object types. ** String. ** Symbol. ** Method. ** Method table. ** Tagged integer. ** Vector. ** Pair. ** Map. ** IO with FILE* and finalization.
  • Dynamic message dispatch. ** ~25,000,000 send/sec on OS X 64-bit using a global method cache. ** global method cache monitors for invalidations due to: *** New method definitons using symbol version counters. *** Changes in lookup() meta-send protocol method. *** Changes in method table delegation.
  • Meta-send protocol: ** Decomposed into lookup(message, receiver, ...), apply(message, receiver, ...). ** Fully recursive lookup() delegation. ** Message objects allocated on C stack. ** Supports tail recursion. ** Supports non-symbol message selectors. ** Supports method aliasing.
  • Anonymous symbols for lexically scoped methods.
  • Low-bit tag size and method table mapping is configurable at compile-time.
  • Support for locatives (safe pointers).
  • GC Support: ** NO GC (malloc-only). ** BDW GC library. ** SMAL GC library (PROTOTYPE).

Extensions are dynamically loaded:

  • Dynamic library loading with automatic initialization, method installation.

  • Example Extension Library. ** Lexical blocks in C using GCC nested functions. ** Fibers (PRELIMINARY). ** Catch/throw. ** Object graphing using graphviz/dot.

  • LISP Extension Library. ** Under 2400 lines. ** Lisp reader. ** Lisp writer. ** Lexical evaluator. ** Simple macro support. ** Call-in and call-out to tort primitives. *** Lambdas can be used as object methods. *** Lambdas can be used as object blocks. *** Methods can be called using ('symbol rcvr . args) syntax. ** Basic Scheme-like semantics boot-strapped from objects and lisp. ** Basic structures based on vectors. ** PRELIMINARY x86-64 compiler written in Scheme superset.

== Building ==

make bootstrap make

== Examples ==

lisp/bin/tlisp - simple Lisp interpreter written as object.

== Compiler =

lisp/bin/tlisp compiler/t/compiler_test_1.scm