proj-jasper-jasperImplementationThoughts

let's use something similar to the nanopass compiler framework: https://github.com/akeep/nanopass-framework/blob/master/doc/user-guide.pdf?raw=true , https://github.com/akeep/nanopass-framework

static analysis must be able to say whether a given symbol is an fexpr or not, at least in most cases

---

why is it that compiling one HLL to another, e.g. CoffeeScript? -> JavaScript?, causes complaints that it's a hack and it's hard to debug, whereas compiling a HLL to a existing VM, e.g. Clojure -> JVM or Elixir to ErlangVM?, doesn't?

Part of it may be that VMs are designed to be intermediate target languages and have appropriate facilities for that, whereas languages like JavaScript? weren't designed to be intermediate target languages. What are the 'appropriate facilities' that intermediate target languages should have?

Jasper should be a good intermediate target language and so should support these features.


callGC, the function used to explicitly invoke the garbage collector, should return a bool to say if it's done or not, so that the program doesn't waste time calling it 100 times when it has nothing to do (a complicated version of a wasteful spinlock, i guess). there should be a function callGCDuration(duration) which calls callGC over and over again until either callGC says it's finished, or the given duration has passed.