4 ms·
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 pr
by pygy_ 4y ago
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.
- silon42 4y agoIf I understand what cross-realm means (code security), then I'm not sure that can be done at all.
- leoc 4y agoThese absolute bozos. A Web Assembler that can't do jumps. What a show.
- pygy_ 4y agoMy comment is about ES6 proper tail calls. WASM is another story
- leoc 4y agoGraaagh, sorry.
- int_19h 4y agoIt'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.
- titzer 4y agoEvery optimizing JIT for JavaScript has the same limitations.
- int_19h 4y agoThen 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.
- titzer 4y agoI'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.
- int_19h 4y agoThat'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.
- miclill 4y agoThanks for clarifying. What is this PTC you mention?
- pygy_ 4y ago“Proper tail calls”, i.e. tail calls as specified for ES6