Hacker News new | ask | show | jobs
by giancarlostoro 486 days ago
Really interesting, I've never used the Rust version, I can only assume I've used the C implementation indirectly dozens of times if not hundreds, but does anyone know how 1:1 the Rust implementation is?

The one area where C will always beat Rust (at least today) will probably always be portability, C compilers run everywhere, on everything, and to anything... Unless Rust has similar capabilities via LLVM?

4 comments

Many of those C compilers are stuck in old versions like C89, and full of vendor extensions only relevant to a special CPU of an embedded vendor, compiling code that can hardly be acknowledged as ISO C.

Many of those vendors are slowly throwing away these proprietary toolchains, some of them are actually GCC forks, never ever updated, and replacing them with clang.

So it depends, on how much those vendors will care to support Rust for their customers, or if those kind of customers even care about anything else than their beloved C dialect.

From the GitHub page, they provide libz-rs-sys, a zlib-compatible C API for usage in non-Rust applications.
That's the most interesting thing to me; is this to the point where you could ex. drop it in to a Gentoo box with nothing but a USE flag and switch everything over to use it? (Sadly it's API compatible but not ABI compatible so we're still talking about needing to recompile, but sometimes that's a minor matter)
Here’s the set of platforms Rust supports [1] and indeed it has broad support due to LLMV. It obviously still needs to port it’s platform-specific parts of the stdlib to the platforms that aren’t nostd. There’s also [2] which broadens to the set of platforms that GCC supports although I think it might be more bleeding edge than even tier 3 platforms at the moment.

I think the only place C really beats Rust is in vendors with toolchains they’ve stopped investing in. More broadly there’s clearly pressure for the industry to abandon C/C++ in favor of Rust given the inability of the language to be modernized into a safe version.

[1] https://doc.rust-lang.org/nightly/rustc/platform-support.htm...

[2] https://github.com/rust-lang/rustc_codegen_gcc

To me, the point of using a Rust version over a C version of anything would be for memory safety not performance, so a 1:1 rewrite doesn’t make any sense ie. because what’s the point - you’ve now reproduced any memory dangers!
It’s never either or nor does a 1:1 rewrite imply the use of unsafe or reproduced memory dangers. For example, vec[v.len()] has no memory safety issues so even if the C code did that in rust it would just panic. Similarly, the bounds checks can often end up being elided by converting to idiomatic rust with iterators and for loops. While the point for you may not be performance, the reason many systems engineers are excited about Rust replacing c/C++ is precisely because it shows promise in memory safety with equivalent or better performance which makes it an and rather than or proposition