Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

There are 4 relevant VMs: .net, java, js and erlang.

If you're making a language and not targeting one of them, you're DOA.



Also LLVM, wasm, amd64, ARM, aarch64, RISC-V, Vulkan, Radeon, NVIDIA, Gen, and iCE40. Instruction sets are more exciting than they have been since the 1980s.


These are native instruction sets, not a VM. The parent seems to also mean runtimes, which LLVM does not provide


I think all of those have software implementations ("VMs")†, although it's true that some of them have hardware implementations as well ("native instruction sets"). Since the IBM 360, though, the distinction has been very fuzzy.

† although Intel Gen, RADEON, and the NVIDIA GPU ones might be an exception


Dead or arrival? I'd argue Go and Rust are pretty prominent recent arrivals that have seen great uptake.


And none of them guarantee tail call optimization leading to trade offs in the design of particular languages that may or may not be acceptable.


Erlang guarantees tail call optimisation.


Pretty sure .Net has a TCO opcode that F# uses.


What does "guarantee" mean here? If you end a function in BEAM with another function call, it's TCO.


Tail Call Optimization is an optimization done by the compile/vm that replace (in assembly terms) a CALL by a JMP. Therefore removing a call stack.


Correct. BEAM does real TCO as far as I'm aware. LYSE has a blurb about it and seems to agree (https://learnyousomeerlang.com/recursion).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: