# Derived lists
STEPS = $(sort $(filter step%,$(.VARIABLES)))
-IMPL_TESTS = $(foreach impl,$(IMPLS),test^$(impl))
+DO_IMPLS = $(filter-out $(SKIP_IMPLS),$(IMPLS))
+IMPL_TESTS = $(foreach impl,$(DO_IMPLS),test^$(impl))
STEP_TESTS = $(foreach step,$(STEPS),test^$(step))
ALL_TESTS = $(filter-out $(EXCLUDE_TESTS),\
$(strip $(sort \
- $(foreach impl,$(IMPLS),\
+ $(foreach impl,$(DO_IMPLS),\
$(foreach step,$(STEPS),test^$(impl)^$(step))))))
-IMPL_STATS = $(foreach impl,$(IMPLS),stats^$(impl))
-IMPL_STATS_LISP = $(foreach impl,$(IMPLS),stats-lisp^$(impl))
+IMPL_STATS = $(foreach impl,$(DO_IMPLS),stats^$(impl))
+IMPL_STATS_LISP = $(foreach impl,$(DO_IMPLS),stats-lisp^$(impl))
-IMPL_PERF = $(filter-out $(EXCLUDE_PERFS),$(foreach impl,$(IMPLS),perf^$(impl)))
+IMPL_PERF = $(filter-out $(EXCLUDE_PERFS),$(foreach impl,$(DO_IMPLS),perf^$(impl)))
#
# Build rules
### Performance tests
+Warning: These performance tests are neither statistically valid nor
+comprehensive; runtime performance is a not a primary goal of mal. If
+you draw any serious conclusions from these performance tests, then
+please contact me about some amazing oceanfront property in Kansas
+that I'm willing to sell you for cheap.
+
* To run performance tests against a single implementation:
```
make perf^IMPL
All:
- Finish guide.md
+ - Split metadata, atoms, readline into stepA
- - test to check args set properly
+ - test *ARGV* gets set properly
- test to make sure slurp captures final newline
- - make sure errors propagate/print properly when self-hosted
-
- * change perf test to run for 10 seconds and then calculate number
- of iterations per second
- - redefine (defmacro!) as (def! (macro*))
- runtest expect fixes:
- * stop using expect, so we can drop --raw option
- * fix C#, VB
- fix long line splitting in runtest
+ - Give runtest knowledge of optional and report differently
- regular expression matching in runtest
- add re (use in rep) everywhere and use that (to avoid printing)
- - Implement/fix interop
- - Print full exception when test gets EOF from expect
+ - per impl tests for step5_tco, or at least a better way of
+ enabling/disabling/tweaking per implementation
- - metadata on symbols
+Other ideas for All:
+ - propagate/print errors when self-hosted
+ - redefine (defmacro!) as (def! (macro*))
+ - Fix/implement interop in more implementations
+
+ - metadata on symbols (as per Clojure)
- metadata as a map only. ^ merges metadata in the reader itself.
Line numbers in metadata from reader.
- protocols!
a *namespaces* map is found with the namespace name being
looked up. Then the symbol would be looked up starting in
the namespace environment. Need protocols first probably.
- - Break out impl eval into step0.5
- Fix quasiquoting of vectors
- Get self-host working at earlier step:
- loop/recur ?
- gensym reader inside quasiquote
- - per impl tests for step5_tco
---------------------------------------------
- convert readline.cs to readline.vb
----------------------------------------------
-
-
-Future Implementations:
-
- - Ada (gnat)
- - http://rosettacode.org/wiki/Regular_expressions#Ada
-
- - C++
-
- - Groovy
- - http://groovy-lang.org/learn.html
- - http://groovy-lang.org/structure.html
-
- - Erlang
-
- - F#
-
- - Haxe
- - http://api.haxe.org/
- - http://haxe.us/haxe_tutorial.html
-
- - Julia
-
- - Nim
-
- - Objective-C:
-
- - Pascal:
- sudo aptitude install fp-compiler-2.6.2
-
- - VimL
- - https://github.com/tpope/timl
-
- - Tcl
-
- - TeX/LaTeX
- - Basic interpreter in TeX: http://ctanhg.scharrer-online.de/pkg/basix.html
- - Cheat Sheet: http://www.stdout.org/~winston/latex/latexsheet.pd
- - latex '\nonstopmode\input' blah.tex
![step9_try architecture](step9_try.png)
Compare the pseudocode for step 8 and step 9 to get a basic idea of
-the changes that will be made during this step:
+the changes that will be made during this step. This step is currently
+divided into two sections because some of the functions in the second
+step will be moving to step A in the future:
```
diff -urp ../process/step8_macros.txt ../process/step9_try.txt
+diff -urp ../process/step9_try.txt ../process/step9_try2.txt
```
* Copy `step8_macros.qx` to `step9_try.qx`.
now.
-<a name="step9"></a>
+<a name="stepA"></a>
### Step A: Interop and Self-hosting
Compare the pseudocode for step 9 and step A to get a basic idea of
the changes that will be made during this step:
```
-diff -urp ../process/step9_try.txt ../process/stepA_mal.txt
+diff -urp ../process/step9_try2.txt ../process/stepA_mal.txt
```
* Copy `step9_try.qx` to `stepA_mal.qx`.
* TODO/TBD
+ * Self-hosted tests
## TODO: