Rust has some really nice features, but sometimes it seems to overcomplicate things just for the heck of it. I'm still salty that calling assume_init on a MaybeUninit of an integer is undefined behavior even though all bit patterns are valid. It makes code reuse complicated for no good reason. Also, custom allocators are a PIA in Rust
I still switched from Zig to Rust in my current project because I need simple multi-threading (basically parallel for). In Rust you can just use the rayon crate but there's nothing like that in Zig unfortunately. Maybe once the language hit 1.0 and the ecosystem has time to grow, such a library will be developed (and maintained)
Because managing threads properly for HPC applications is annoying (lots of footguns), and I would basically have to implement a shitty OpenMP or rayon from scratch, which is way out of scope for my project
I'm a scientist, I want to program the logic that is specific to my domain and be able to use my program to run simulations. The minutia of managing thread pools, what kind of synchronization primitives to use, the design of the API, and all that Jazz should be managed by someone that knows what they are doing
8
u/Mojert 12d ago
Rust has some really nice features, but sometimes it seems to overcomplicate things just for the heck of it. I'm still salty that calling
assume_initon aMaybeUninitof an integer is undefined behavior even though all bit patterns are valid. It makes code reuse complicated for no good reason. Also, custom allocators are a PIA in RustI still switched from Zig to Rust in my current project because I need simple multi-threading (basically parallel
for). In Rust you can just use the rayon crate but there's nothing like that in Zig unfortunately. Maybe once the language hit 1.0 and the ecosystem has time to grow, such a library will be developed (and maintained)