4 ms·
i think you can successfully type the return type using a Union. This might have the performance penalty of instability, but i care more about the soundness iss
by jlrubin 5y ago
i think you can successfully type the return type using a Union. This might have the performance penalty of instability, but i care more about the soundness issue of potentially returning garbage types than about e.g. vtables
btw rust-miniscript is a nice example of a type stable parser :)
- ulysses4ever 5y agoYou can use Unions, and in fact that's what Julia do. The issue is performance -- that's what the paper advocates: stable (grounded, more precisely) functions are a clear cut in terms of optimization. Unstable ones is a lottery (sometimes Julia does a decent Job at optimizing them sometimes not). Rust is an interesting example, maybe I should look into the library. But the compilation model is very different from probably any JIT, including Julia. Optimizations too. For one, unions (enums) in Rust would have much less profound impact on possible optimizations and therefore performance.
- jlrubin 5y agoI think that Julia lacks a native tagged enum, which is what rust has. Unions are more akin to a local trait T that you box and implement for all the return types, which is strictly worse. If instead explicit unions were optimized to be tagged enums you could get the big performance gains of rust. Calling code would, of course, have to destructure the return. But destructures of a return value can be very efficient using match (jump tables internally where possible).