All:
    - rename stepA_interop to stepA_mal
    - test to check args 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 long lines in runtext/expect
    - 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

    - metadata on symbols
    - metadata as a map only. ^ merges metadata in the reader itself.
      Line numbers in metadata from reader.
    - protocols!
        - https://github.com/pixie-lang/pixie
        - http://www.toccata.io/2015/01/Mapping/
    - namespaces
        - environments first class: *ENV*, *outer* defined by env-new
        - namespaces is *namespaces* map in environment which maps namespace
          names to other environments.
        - def! become an alias for (env-set! *ENV* 'sym value)
        - Namespace lookup: go up the environment hierarchy until
          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:
        - Move try* to step6
        - Remove macros from mal

    - multi-line REPL read
    - loop/recur ?
    - gensym reader inside quasiquote

    - per impl tests for step5_tco

---------------------------------------------

Bash:
    - explore using ${!prefix*} syntax (more like make impl)
    - GC

C:
    - come up with better way to do 20 vararg code
    - GC: use http://www.hboehm.info/gc/
    - fix mal/clojurewest2014.mal

C#:
    - fix command line arg processing (doesn't run file specified)
    - accumulates line breaks with mal/clojurewest2014.mal

Clojure:
    - make indent consistent across steps (e.g. step5, step8)
    - fix mal/clojurewest2014.mal

CoffeeScript:
    - make target to compile to JS
    - fix "user> " prompt with mal/clojurewest2014.mal

Go:
    - consider variable arguments in places where it makes sense
        https://gobyexample.com/variadic-functions

Haskell:
    - TCO using seq/bang patterns:
      http://stackoverflow.com/questions/9149183/tail-optimization-guarantee-loop-encoding-in-haskell
    - immediately exits mal/clojurewest2014.mal

Java:
    - Use gradle instead of mvn
        http://blog.paralleluniverse.co/2014/05/01/modern-java/
    - MAL formatting is a bit off with mal/clojurewest2014.mal

Javascript:
    - interop: callbacks using Mal functions
    - fix "user> " prompt with mal/clojurewest2014.mal

Lua:
    - time-ms should get actual milliseconds

Make:
    - allow '_' in make variable names
    - hash-map with space in key string
    - Fix: make -f stepA_interop.mk ../mal/step6_file.mal
        (slurp "../tests/incA.mal")
        (read-string "(+ 2 3)")
    - errors should propagate up from within load-file
    - GC: expore using "undefined" directive in Make 3.82

Mal:
    - line numbers in errors
    - step5_tco

Perl:
    - fix metadata on native functions
    - implement conj

PHP:
    - formatting messed up with mal/clojurewest2014.mal

Postscript:
    - add negative numbers
    - fix blank line after comments
    - fix command line arg processing (doesn't run file specified)
    - formatting messed up with mal/clojurewest2014.mal

Python:
    - error: python ../python/stepA_interop.py ../mal/stepA_interop.mal ../mal/stepA_interop.mal
    - interop tests

R:
    - tracebacks in errors
    - fix running from different directory
    - formatting messed up with mal/clojurewest2014.mal

Racket
    - metadata on collections

Ruby:

Rust:
    - use built-in regex once fixed:
        https://github.com/rust-lang/rust/issues/18034
        https://github.com/rust-lang/rust/issues/18035
    - fix 'make all' invocation of cargo build
    - formatting messed up with mal/clojurewest2014.mal

Scala
    - readline
    - fix exception when finished running something on command line

VB.Net
    - 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

    - 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
