Step 0 of Make-a-Lisp for Erlang
[jackhill/mal.git] / README.md
index 508c8cb..7b71d40 100644 (file)
--- a/README.md
+++ b/README.md
@@ -4,18 +4,22 @@
 
 Mal is a Clojure inspired Lisp interpreter.
 
 
 Mal is a Clojure inspired Lisp interpreter.
 
-Mal is implemented in 27 different languages:
+Mal is implemented in 32 different languages:
 
 * Bash shell
 * C
 
 * Bash shell
 * C
+* C++
 * C#
 * Clojure
 * CoffeeScript
 * C#
 * Clojure
 * CoffeeScript
+* Erlang
+* Factor
 * Forth
 * Go
 * Haskell
 * Java
 * Forth
 * Go
 * Haskell
 * Java
-* Javascript ([Online Demo](http://kanaka.github.io/mal))
+* JavaScript ([Online Demo](http://kanaka.github.io/mal))
+* Julia
 * Lua
 * GNU Make
 * mal itself
 * Lua
 * GNU Make
 * mal itself
@@ -32,6 +36,7 @@ Mal is implemented in 27 different languages:
 * Ruby
 * Rust
 * Scala
 * Ruby
 * Rust
 * Scala
+* Swift
 * Visual Basic.NET
 
 
 * Visual Basic.NET
 
 
@@ -62,7 +67,7 @@ mal/clojurewest2014.mal for the presentation that was given at the
 conference (yes the presentation is a mal program).
 
 If you are interesting in creating a mal implementation (or just
 conference (yes the presentation is a mal program).
 
 If you are interesting in creating a mal implementation (or just
-interested in using mal for something), please stop by the #mal
+interested in using mal for something), please drop by the #mal
 channel on freenode. In addition to the [make-a-lisp process
 guide](process/guide.md) there is also a [mal/make-a-lisp
 FAQ](docs/FAQ.md) where I attempt to answer some common questions.
 channel on freenode. In addition to the [make-a-lisp process
 guide](process/guide.md) there is also a [mal/make-a-lisp
 FAQ](docs/FAQ.md) where I attempt to answer some common questions.
@@ -87,6 +92,23 @@ make
 ./stepX_YYY
 ```
 
 ./stepX_YYY
 ```
 
+### C++
+
+*The C++ implementation was created by [Stephen Thirlwall (sdt)](https://github.com/sdt)*
+
+The C++ implementation of mal requires g++-4.9 or clang++-3.5 and
+a readline compatible library to build. See the `cpp/README.md` for
+more details:
+
+```
+cd cpp
+make
+    # OR
+make CXX=clang++-3.5
+./stepX_YYY
+```
+
+
 ### C# ###
 
 The C# implementation of mal has been tested on Linux using the Mono
 ### C# ###
 
 The C# implementation of mal has been tested on Linux using the Mono
@@ -115,8 +137,32 @@ cd coffee
 coffee ./stepX_YYY
 ```
 
 coffee ./stepX_YYY
 ```
 
+### Erlang
+
+Requires [rebar](https://github.com/rebar/rebar) to build.
+
+```
+cd erlang
+MAL_STEP=stepX_YYY rebar compile escriptize
+./stepX_YYY
+```
+
+### Factor
+
+*The Factor implementation was created by [Jordan Lewis (jordanlewis)](https://github.com/jordanlewis)*
+
+The Factor implementation of mal has been tested with Factor 0.97
+([factorcode.org](factorcode.org)).
+
+```
+cd factor
+FACTOR_ROOTS=src factor -run=stepX_YYY
+```
+
 ### Forth
 
 ### Forth
 
+*The Forth implementation was created by [Chris Houser (chouser)](https://github.com/chouser)*
+
 ```
 cd forth
 gforth stepX_YYY.fs
 ```
 cd forth
 gforth stepX_YYY.fs
@@ -124,7 +170,7 @@ gforth stepX_YYY.fs
 
 ### Go
 
 
 ### Go
 
-You Go implementation of mal requires that go is installed on on the
+The Go implementation of mal requires that go is installed on on the
 path. The implementation has been tested with Go 1.3.1.
 
 ```
 path. The implementation has been tested with Go 1.3.1.
 
 ```
@@ -160,7 +206,7 @@ mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY
 mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY -Dexec.args="CMDLINE_ARGS"
 ```
 
 mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY -Dexec.args="CMDLINE_ARGS"
 ```
 
-### Javascript/Node
+### JavaScript/Node
 
 ```
 cd js
 
 ```
 cd js
@@ -168,6 +214,15 @@ npm update
 node stepX_YYY.js
 ```
 
 node stepX_YYY.js
 ```
 
+### Julia
+
+The Julia implementation of mal has been tested with Julia 0.3.7.
+
+```
+cd julia
+julia stepX_YYY.jl
+```
+
 ### Lua
 
 Running the Lua implementation of mal requires lua 5.1 or later,
 ### Lua
 
 Running the Lua implementation of mal requires lua 5.1 or later,
@@ -200,6 +255,8 @@ make -f stepX_YYY.mk
 
 ### Nim 0.10.3
 
 
 ### Nim 0.10.3
 
+*The Nim implementation was created by [Dennis Felsing (def-)](https://github.com/def-)*
+
 Running the Nim implementation of mal requires Nim's current devel branch
 (0.10.3) or later, and the nre library installed.
 
 Running the Nim implementation of mal requires Nim's current devel branch
 (0.10.3) or later, and the nre library installed.
 
@@ -213,6 +270,8 @@ nimble build
 
 ### OCaml 4.01.0
 
 
 ### OCaml 4.01.0
 
+*The OCaml implementation was created by [Chris Houser (chouser)](https://github.com/chouser)*
+
 ```
 cd ocaml
 make
 ```
 cd ocaml
 make
@@ -338,6 +397,11 @@ scala -classpath target/scala*/classes stepX_YYY
 
 ### Swift
 
 
 ### Swift
 
+*The Swift implementation was created by [Keith Rollin](https://github.com/keith-rollin)*
+
+The Swift implemenation of mal requires the Swift compiler (XCode) to
+build.
+
 ```
 cd swift
 make
 ```
 cd swift
 make
@@ -365,9 +429,9 @@ mono ./stepX_YYY.exe
 The are nearly 500 generic functional tests (for all implementations)
 in the `tests/` directory. Each step has a corresponding test file
 containing tests specific to that step. The `runtest.py` test harness
 The are nearly 500 generic functional tests (for all implementations)
 in the `tests/` directory. Each step has a corresponding test file
 containing tests specific to that step. The `runtest.py` test harness
-uses pexpect to launch a Mal step implementation and then feeds the
-tests one at a time to the implementation and compares the
-output/return value to the expected output/return value.
+launches a Mal step implementation and then feeds the tests one at
+a time to the implementation and compares the output/return value to
+the expected output/return value.
 
 To simplify the process of running tests, a top level Makefile is
 provided with convenient test targets.
 
 To simplify the process of running tests, a top level Makefile is
 provided with convenient test targets.
@@ -496,7 +560,7 @@ example, to run step2 tests for every implementation (except MATLAB):
   run tests because runtime dependencies need to be downloaded to
   avoid the tests timing out. These dependencies are download to
   dot-files in the /mal directory so they will persist between runs.
   run tests because runtime dependencies need to be downloaded to
   avoid the tests timing out. These dependencies are download to
   dot-files in the /mal directory so they will persist between runs.
-* Compiled languages: if you host system is different enough from
+* Compiled languages: if your host system is different enough from
   Ubuntu Utopic then you may need to re-compile your compiled
   languages from within the container to avoid linker version
   mismatches.
   Ubuntu Utopic then you may need to re-compile your compiled
   languages from within the container to avoid linker version
   mismatches.