On Fri, Jun 5, 2015 at 11:40 AM, Jens Axel Søgaard <jensa...@soegaard.net> wrote:
> 2015-06-05 6:37 GMT+02:00 Neil Van Dyke <n...@neilvandyke.org>: > > >> 2. Forget about `eval`, require apps to be compilable on development host >> (but not necessarily runnable there), implement compiler from `.zo` to JS >> (managing TCO, etc.), implement small Racket runtime library in JS, >> implement browser facilities and/or GUI libraries in JS. Later think about >> `eval`.[*] >> > > This approach seems to be what Whalesong does. I agree that `eval` is > unimportant for most programs - and when a Racket version of the new macro > expander is available it ought > to be reasonably easy to implement `eval`. > >> >> [*] I've only done a very brief peek at sample `zo-parse` and `decompile` >> output, so I don't know how tricky it can get, but the little I saw looked >> like a static translation to JS wouldn't be too difficult. I don't know >> how necessary `eval` is if you have bytecode, nor how much of the >> primitives would have to be implemented manually rather than translated >> from `.zo`. > > > There are a few complications. It is hard to use the native JavaScript > stack to > represent the Racket stack. Some byte codes like with-cont-mark manipulate > the stack > in ways JavaScript doesn't support. Some primitives (call/cc and friends) > are > also problems unless an explicit representation of the Racket stack is > used. > > Whalesong compiles zo-bytecode into JavaScript that manipulate an explicit > data structure representing the Racket stack. > > The alternative approach is to compile fully expanded Racket into > JavaScript. > The trio of TCO, contination marks and continuations will most likely turn > out to be the trickiest to get right. > > Even with an explicit control stack for Racket care is needed to avoid > hitting the stack ceiling in JavaScript (why was `goto` left out in the > cold?) > > Finally - a small runtime library is probably unrealistic. Racket has > a huge number of primitives. > > > Relevant paper on continuation marks and continuations from exceptions: > > > http://cs.brown.edu/~sk/Publications/Papers/Published/pcmkf-cont-from-gen-stack-insp/paper.pdf > > > Note: > > The paper "Implementing Continuation Marks in JavaScript" shows how to add > continuation marks to an existing JavaScript engine (Rhino), but > unfortunately that won't help in a general context. > > Implementing Continuation Marks in JavaScript > John Clemens, Ayswarya Sundaram, and, David Herman > > http://www.ccs.neu.edu/home/dherman/research/papers/scheme08-stack-marks.pdf > > My thesis ( http://jeapostrophe.github.io/home/static/students/2012-ms-kgermane.pdf) shows how to combine CM and continuation management with a CPS-like transformation. I applied it only to a really simple language, but I think the technique can apply to bigger languages. If you don't mind opaque, heap-allocated continuations or trampolines, that might conquer the trifecta. > > > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to racket-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.