Mal is a Clojure inspired Lisp interpreter.
-Mal is implemented in 27 different languages:
+Mal is implemented in 32 different languages:
* Bash shell
* C
+* C++
* C#
* Clojure
* CoffeeScript
+* Erlang
+* Factor
* 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
* Ruby
* Rust
* Scala
+* Swift
* Visual Basic.NET
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
+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.
+
## Building/running implementations
### Bash 4
./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
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
+*The Forth implementation was created by [Chris Houser (chouser)](https://github.com/chouser)*
+
```
cd forth
gforth stepX_YYY.fs
### 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.
```
mvn -quiet exec:java -Dexec.mainClass=mal.stepX_YYY -Dexec.args="CMDLINE_ARGS"
```
-### Javascript/Node
+### JavaScript/Node
```
cd 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,
### 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.
### OCaml 4.01.0
+*The OCaml implementation was created by [Chris Houser (chouser)](https://github.com/chouser)*
+
```
cd ocaml
make
scala -classpath target/scala*/classes stepX_YYY
```
+### 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
+./stepX_YYY
+```
+
### Visual Basic.NET ###
The VB.NET implementation of mal has been tested on Linux using the Mono
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.
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.