aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-03-29 19:01:14 -0500
committerJoel Martin <github@martintribe.org>2014-03-29 19:01:14 -0500
commitbcddc3e49a21adc1250e7c6bea3e36922380d62e (patch)
tree9c741af3a15d1c0e740f6221eb34b0ea530e6e07
parent5d446bd8a008cb799d222bfffec772a6e30289d0 (diff)
downloadmal-bcddc3e49a21adc1250e7c6bea3e36922380d62e.tar.gz
mal-bcddc3e49a21adc1250e7c6bea3e36922380d62e.zip
README: add more details.
-rw-r--r--README.md62
-rwxr-xr-xmal/clojurewest2014.mal (renamed from mal/presentation.mal)0
2 files changed, 51 insertions, 11 deletions
diff --git a/README.md b/README.md
index 2784850..5b77c8b 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,57 @@
# mal - Make a Lisp
-See mal/presentation.mal
+## Description
+
+Mal is an interpreter for a subset of the Clojure programming
+language. Mal is implemetated from scratch in 10 different languages:
+
+* Javascript
+* Python
+* Clojure
+* C
+* Java
+* PHP
+* Bash shell
+* GNU Make
+* mal itself
+* Postscript (in-progress)
+
+
+Mal is also a learning tool. Each implentation of mal is separated
+into 11 incremental, self-contained (and testable) steps that
+demonstrate core concepts of Lisp. The last step is capable of
+self-hosting (running the mal implemenation of mal).
+
+The mal (make a lisp) steps are:
+
+* step0_repl
+* step1_read_print
+* step2_eval
+* step3_env
+* step4_if_fn_do
+* step5_tco
+* step6_file
+* step7_quote
+* step8_macros
+* step9_interop
+* stepA_more
+
+
+Mal was presented publicly for the first time in a lightning talk at
+Clojure West 2014 (unfortunately there is no video). See
+mal/clojurewest2014.mal for the presentation that was given at the
+conference (yes the presentation is a mal program).
## Building/running implementations
-* Bash 4
+### Bash 4
```
cd bash
bash stepX_YYY.sh
```
-* C
+### C
```
cd c
@@ -19,14 +59,14 @@ make
./stepX_YYY
```
-* Clojure
+### Clojure
```
cd clojure
lein with-profile +stepX trampoline run
```
-* Java 1.7
+### Java 1.7
```
cd java
@@ -36,14 +76,14 @@ mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY
mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY -Dexec.args="CMDLINE_ARGS"
```
-* Javascript/Node
+### Javascript/Node
```
cd js
node stepX_YYY.js
```
-* Mal
+### Mal
Running the mal implementation of mal involves running stepA of one of
the other implementations and passing the mal step to run as a command
@@ -55,28 +95,28 @@ IMPL_STEPA_CMD ../mal/stepX_YYY.mal
```
-* GNU Make 3.81
+### GNU Make 3.81
```
cd make
make -f stepX_YYY.mk
```
-* PHP 5.3
+### PHP 5.3
```
cd php
php stepX_YYY.php
```
-* Postscript Level 2/3
+### Postscript Level 2/3
```
cd ps
gs -q -dNODISPLAY stepX_YYY.ps
```
-* Python 2.X
+### Python 2.X
```
cd python
diff --git a/mal/presentation.mal b/mal/clojurewest2014.mal
index 2b5be9c..2b5be9c 100755
--- a/mal/presentation.mal
+++ b/mal/clojurewest2014.mal