Finish step8
[jackhill/mal.git] / docs / TODO
1 In process/stepA.gliffy, add inc and remove *gensym-counter*.
2 Then refresh the .png files.
3
4 ---------------------------------------------
5
6 General:
7 - add chat bot for #mal
8 - move tokenizer.mal and reader.mal from malc to ./lib directory
9
10 - Finish guide.md
11 - mention that identifier names are suggested. some have run
12 into collisions with READ,EVAL,PRINT in case insensitive
13 languages
14 - simplify: "X argument (list element Y)" -> ast[Y]
15 - more clarity about when to peek and poke in read_list and
16 read_form
17 - tokenizer: use first group rather than whole match (to
18 eliminate whitespace/commas)
19
20 All Implementations:
21 - regular expression matching in runtest
22 - add re (use in rep) everywhere and use that (to avoid printing)
23 - fix stepA soft failures: lua matlab miniMAL perl racket
24
25 Other ideas for All:
26 - propagate/print errors when self-hosted
27 - redefine (defmacro!) as (def! (macro*))
28 - Fix/implement interop in more implementations
29
30 - metadata on symbols (as per Clojure)
31 - metadata as a map only. ^ merges metadata in the reader itself.
32 Line numbers in metadata from reader.
33 - protocols!
34 - https://github.com/pixie-lang/pixie
35 - http://www.toccata.io/2015/01/Mapping/
36 - namespaces
37 - environments first class: *ENV*, *outer* defined by env-new
38 - namespaces is *namespaces* map in environment which maps namespace
39 names to other environments.
40 - def! become an alias for (env-set! *ENV* 'sym value)
41 - Namespace lookup: go up the environment hierarchy until
42 a *namespaces* map is found with the namespace name being
43 looked up. Then the symbol would be looked up starting in
44 the namespace environment. Need protocols first probably.
45
46 - multi-line REPL read
47 - loop/recur ?
48 - gensym reader inside quasiquote
49 - standalone executable
50
51
52 ---------------------------------------------
53
54 Bash:
55 - explore using ${!prefix*} syntax (more like make impl)
56 - GC
57
58 C:
59 - come up with better way to do 20 vararg code
60
61 C#:
62 - accumulates line breaks with mal/clojurewest2014.mal
63 - interop: http://www.ckode.dk/programming/eval-in-c-yes-its-possible/
64
65 CoffeeScript:
66 - make target to compile to JS
67
68 Go:
69 - consider variable arguments in places where it makes sense
70 https://gobyexample.com/variadic-functions
71
72 Haskell:
73 - TCO using seq/bang patterns:
74 http://stackoverflow.com/questions/9149183/tail-optimization-guarantee-loop-encoding-in-haskell
75 - immediately exits mal/clojurewest2014.mal ("\/" exception)
76
77 Java:
78 - build step, don't use mvn in run script
79 - Use gradle instead of mvn
80 http://blog.paralleluniverse.co/2014/05/01/modern-java/
81
82 Javascript:
83 - interop: adopt techniques from miniMAL
84
85 Make:
86 - allow '_' in make variable names
87 - hash-map with space in key string
88 - errors should propagate up from within load-file
89 - GC: explore using "undefine" directive in Make 3.82
90
91 Mal:
92 - line numbers in errors
93 - step5_tco
94
95 miniMAL:
96 - figure out why {} literals are "static"/persistent
97
98 ObjPascal:
99 - verify that GC/reference counting works
100 - fix comment by itself error at REPL
101
102 plpgsql:
103 - maybe combine wrap.sh and run
104
105 Perl:
106 - fix metadata on native functions
107 - fix extra line breaks at REPL
108
109 Postscript:
110 - add negative numbers
111 - fix blank line after comments
112 - fix command line arg processing (doesn't run file specified)
113
114 Powershell:
115 - convert function with "abc_def" to "abc-def"
116 - remove extraneous return statements at end of functions
117 - remove unnecessary semi-colons
118 - use ArrayList instead of Array for performance
119 - new test to test Keys/keys as hash-map key
120 - test *? predicates with nil
121
122 R:
123 - tracebacks in errors
124 - fix running from different directory
125
126 Racket
127 - metadata on collections
128
129 Rust:
130 - fix 'make all' invocation of cargo build
131
132 Scala
133 - readline
134 - fix exception when finished running something on command line
135
136 VHDL:
137 - combine run_vhdl.sh and run
138
139 vimscript:
140 - combine run_vimscript.sh and run