I don't think rustc and cargo intend to provide that though. I'm not familiar with bazelbuild.github.io/rules_rust/ but it's basically the same thing outside AOSP. cargo-raze converts Cargo to Bazel and then it fits into the overall Bazel system with other languages like C.
Conversation
I want this
Quote Tweet
Replying to @bascule @rikarends and 2 others
D recently added an "ImportC" feature like this.
The implementation was only 4klocs, which is pretty cool:
github.com/dlang/dmd/pull
1
It feels like you have this when using Rust in AOSP because you never need to use bindgen. You depend on the library, call the C code and when you modify the C code, the ABI has changed for the Rust code built with it too. So rustc doesn't do it, but it feels like it's doing it.
1
Cargo could provide comparable UX but I think it just doesn't have the ambition / goal to provide this. You would get better error messages from rustc being aware of it, but I don't think it's essential. I can't really see it either happening though.
1
Per the D patch, it seems like it could be a 4 kloc-ish change to rustc.
It would require an expert on the C standard. Maybe could do it.
1
Rust has a strong culture of wanting to delegate solving problem to standalone projects maintained by other people and I think it makes it a lot harder to successfully land something like this.
Before Rust cared about wanting independence from LLVM, it could have used libclang.
1
I say it can be done and it’s not that hard and it’s a small and self-contained patch
1
The hardest part is actually understanding/language lawyering the C standard
2
I'd like to see this as a Cargo crate. It could be a self contained C compiler callable from build.rs crates.
1
1
I think the cool thing about rustc doing it is you wouldn't need to have the intermediate output and could actually have compiler errors referring to C code instead of intermediate output that a human didn't write.
Only other thing that annoys me is that Rust code ends up not being able to use inline variants of C functions automatically and that would be a lot harder than just handling declarations. Going to be a major perf hit for Rust modules in the Linux kernel without using LTO builds.
1
Wait, what? You’re claiming that giving rustc a first-class notion of all of the C code wouldn’t help?
1
Show replies

