X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=README.md;h=62f932b1c5461d85e2c24bad5452817b17f90201;hb=cad27d3e4fdb70234a450244349f9234f48a924b;hp=52b4b6f24b36316f15b9967c61e12af5a018d56b;hpb=6c019df6b459c86bf5de4fd817db2316038935da;p=scheme.forth.jl.git diff --git a/README.md b/README.md index 52b4b6f..62f932b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ scheme.forth.jl ---------------- +=============== A hobby Scheme interpreter for FORTH 83. Specifically it is targeted at [forth.jl](http://github.com/tgvaughan/forth.jl) which is an implementation of @@ -8,22 +8,21 @@ life as a fairly direct port of Peter Micheaux's [Bootstrap Scheme](https://github.com/petermichaux/bootstrap-scheme) (as described in [this wonderful series of blog posts](http://peter.michaux.ca/articles/scheme-from-scratch-introduction)) from -C to forth, but also includes variadic compound function support, mark-sweep -garbage collection, quasiquotation, and a basic (non-hygienic) macro -system. +C to forth, but also includes: -In future, I plan to also implement a more complete numerical tower to bring it closer to -[R5RS](http://www.schemers.org/Documents/Standards/R5RS/). - -The goal is for the interpreter to be complete enough to be used to complete -the majority of the exercises found in [SICP](http://sarabander.github.io/sicp/). +* variadic compound function support, +* pre-evaluation syntactic analysis, +* mark-sweep garbage collection, +* quasiquotation, +* a basic (non-hygienic) macro system and +* first-class continuations via `call-with-current-continuation`. Running the interpreter -======================= +----------------------- -To run this Scheme interpreter, first open Julia from the src directory contained -in this repository. If you've not done so already, install forth.jl using the -following command: +To run this Scheme interpreter, first open Julia (**version >=0.6**) from the src +directory contained in this repository. If you've not done so already, install +forth.jl using the following command: julia> Pkg.clone("https://github.com/tgvaughan/forth.jl") @@ -54,7 +53,7 @@ At this point you can start entering Scheme commands. For example, ; 120 Metacircular Evaluator -====================== +---------------------- Of course, one of the things you can do in Scheme (or of course any programming language, this is the fundamental thing) is implement an interpreter for @@ -75,8 +74,15 @@ You'll then be greeted by the following prompt: ;; M-Eval input: At this point you can start entering Scheme commands... but be prepared to wait -a _long_ time for the result. For instance, the following example from SICP -defines and demonstrates a recursive list append procedure: +a while for each result. After all, when evaluating commands in the MCE you are +running a program in a Scheme interpreter running inside another Scheme +interpreter which is itself running on a Forth system that is implemented atop +a virtual register machine running in the Julia numerical computing +environment. **That's four levels of abstraction more than a native Julia +program experiences**, so some delay is to be expected! + +For instance, the following example from SICP defines and demonstrates a +recursive list append procedure: (define (append x y) (if (null? x) @@ -93,13 +99,10 @@ defines and demonstrates a recursive list append procedure: ;;; M-Eval value: (a b c d e f) -Be prepared to wait 20 min or more for the final result to be printed. (Given -that at this point we have a program running in a Scheme interpreter running -inside another Scheme interpreter which is itself running on a Forth system -that is implemented in Julia, this should not be a surprise.) +You may have to wait a minute or so for the final result to be printed. License -======= +------- This software is free (as in freedom) and is distributed under the terms of version 3 of the GNU General Public License. A copy of this license