Requirements, and who they satisfy


Last modified on 2025-05-26

Happy as is

About a third of the people I interviewed did not desire anything new from the language. They expressed the sentiment that they have suffered enough linking issues with C/C++ and don’t want to go back.

Incremental builds

Does not require stability, as the pieces can be recompiled at any point. The split can be implicit, but globals need to be done properly.

Detach dependency

Sometimes, a dependency of a program should not be included in the final binary. Vendor libraries and LGPL libraries (Bevy).

Need a guarantee that it is not included in the final binary.

Divide releases

Split out libraries from the main program.

Same globals problem as above. Requires being able to be explicit about the library graph. Need ecosystem consensus on crate features. Most (but not all) systems can rebuild the whole world if needed. Need to have some notion of when a rebuild is needed.

Multiple desires for this: * Linux package managers * Rustup * Rust-for-linux * Incremental Docker deploys

Feature selection

  • Android versions
  • Bevy vendor libraries

Requires some weak linking, change behavior depending on symbols.

RWPI ROPI

Tock and Hubris

Unloading

Bevy

Want to have type information in order to poke the game from the editor.

Cannot sacrifice performance, can sacrifice soundness.

Want to load/unload mods, with possibly different compiler versions. Leaking memory is acceptable.

Linux kernel modules

Soundness and performance are king. For unloading: need to guarantee no use-after-free. Need some guarantee from the compiler that 'static does not escape, or ideally have a 'crate notion.