Open mkhan45 opened 2 years ago
named/optional arguments seem unnecessary since we can just use a map as an argument with pattern matching, but maybe there could be some syntax sugar
We also need proper error messages, to start out we'd have to revamp the scanner so that we can pass line number and maybe column information to the parser
records/named tuples might also be unneeded with maps
I've considered it don't think we should have variadic lambdas anymore. They're significantly slower than just having multiple functions unless we implement it as syntax sugar, which has other problems. Since we have a match expression already it also seems a bit excessive and doesn't work well with the let name = fn(args) => expr
syntax
We also want the interactive REPL to not crash when an error occurs, but keep the previous state.
I've made #22 for that
currying might cause hard to debug errors, since error reporting is pretty minimal right now
Inlining functions at preprocess time might be impossible since little is known about the functions called. However, it might be possible at runtime on a block by block basis
edit: alternatively, we could add an inline keyword
could also mark a function body as inlineable at definition time, and then actually in-line it at call time
it might be possible to make a non tail recursive function tail recursive via ast transformation to use an accumulator in simple cases or by adding a stack accumulator in more complicated ones
edit: https://en.wikipedia.org/wiki/Continuation-passing_style
To start out with, we want
Eventually it would be cool to have: