On Tue, 23 Jul 2019 09:22:11 -0700 (PDT), Thomas Dickerson <[email protected]> wrote:
>Since people are talking about running on different "VM" architectures, an >LLVM backend would be lovely and gives WebAssembly for free. +1 >JVM support, on the other hand, seems like a particularly poor time >investment, since (1) there is no shortage of options for functional >programmers, and (2) the only real advantage of running on JVM is if you >can provide interoperability with the massive Java ecosystem, but that's >essentially incompatible with working around the JVM's bad architectural >decisions. >The elephant in the room for any Scheme running on the JVM is that (a) >cross-function tail call elimination is incompatible with the security >model; (b) trampolining everything is bad for performance and, more >importantly, makes interoperability miserable (have fun writing all your >Java code that calls Racket code in manual CPS-style); and (c) throwing >everything into a massive state machine while-loop with gotos is both a >static analysis nightmare and breaks the JIT optimizer due to single-method >bytecode size restrictions. Yes, JVM seems a rather poor target for a Scheme ... although Kotlin does heroics converting tail recursion into interation to get around (at least some of) the limitations. OTOH, the dotNET runtime does support tail calling. F#, at least, uses that feature even if no other dotNET languages do. Since dotNET Core now is supported on Linux, perhaps it should be considered as a target instead of the JVM. YMMV, George -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/k8uuje5o61glv0hn2r0akilh2b1b19f0rh%404ax.com.

