Hacker News new | past | comments | ask | show | jobs | submit login

The standard mandates it, and the V8 team implemented it, shipped it behind a flag, then unshipped based on reasons that initially seemed and ultimately were proven fuddy, when WebKit shipped PTC, and the world didn’t fall down.

The reason actual why it was withdrawn is that it would have required expensive changes to Microsoft’s Chakra (the calling conventions were incompatible).

Then Edge died... and Google didn’t add it back. Go figure.

Firefox also has problems implementing cross-realm tail calls. That could be spec’ed around, but there’s no will to do so.




These absolute bozos. A Web Assembler that can't do jumps. What a show.


My comment is about ES6 proper tail calls. WASM is another story


Graaagh, sorry.


It's not that much better. Apparently at least some of the idiosyncracies in the design of wasm, such as the lack of regular unstructured branches, is due to the internal implementation details of V8.


Every optimizing JIT for JavaScript has the same limitations.


Then maybe we shouldn't be repurposing VMs written for JavaScript for that brand new thing? Ditch the baggage and do it right. Especially given that, if successful, wasm is basically the next JS, and will be around for decades.


I'm all for rewriting things from scratch. That's why I'm doing a new Wasm engine from scratch. But reusing TurboFan is how we took Wasm from concept to near-native performance, shipped in Chrome, in 2.5 years.


That's all well and good - but, again, the spec will be around for decades. Compromises made today to ship things faster means a lot of pain in those years ahead. I pity all the compiler writers who will have to implement relooper again and again.

But instead we'll probably do things like asm.js - that is, bless certain wasm patterns such that advanced VMs would be guaranteed to optimize them. And so everything will be way more complicated than it needs to be. Just like the JS stack today.


That's why multiloop is coming.


Has there been any movement on that (or funclets) recently? All the repos I can find haven't been updated in a while.


If I understand what cross-realm means (code security), then I'm not sure that can be done at all.


Firefox can’t eliminate tail call across realms. The spec could make an exception for that scenario


That seems reasonable. Tail call elimination, limited to within a realm, still seems pretty useful.


Thanks for clarifying. What is this PTC you mention?


“Proper tail calls”, i.e. tail calls as specified for ES6




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: