3 ms·
> That said, I don't think there are any direct blog posts about it; Firefox's other code just sees Rust as C code, as far as I know. So it means the compiled
by oscargrouch 9y ago
> That said, I don't think there are any direct blog posts about it; Firefox's other code just sees Rust as C code, as far as I know.
So it means the compiled binary ends up in a simple compatible C ABI? thats pretty nice, if thats the case.
But giving the project is using LLVM, even C++ ABI would be achievable without too much effort (i guess).
- burntsushi 9y agoTo clarify, Rust has its own ABI, just like C++ has its own ABI. And just like C++, you can expose a C ABI if you want by defining special functions. In C++, it's an `extern "C" { ... }` block, and in Rust, it's a `extern "C" fn foo() ...` function declaration. You can see an example here: https://github.com/rust-lang/regex/tree/master/regex-capi https://github.com/rust-lang/regex/tree/master/regex-capi Adding C++ ABI support is a significant effort.
- oscargrouch 9y ago> To clarify, Rust has its own ABI, just like C++ has its own ABI. And just like C++, you can expose a C ABI if you want by defining special functions. In C++, it's an `extern "C" { ... }` block, and in Rust, it's a `extern "C" fn foo() ...` function declaration. Ohh, Now i got it. But its pretty good thing to have anyway. C ABI is the lingua franca anyway to communicate to any language, even C++. > Adding C++ ABI support is a significant effort. Ok. So if has its own ABI, im sure it would be a pretty hard undertaking to be compatible with C++. I was guessing if maybe Rust had managed to squeeze and reuse the C++ ABI.. but sure, giving Rust is not that much alike C++ this would probably be a bad decision for small gains. Thanks for clarifying.
- Manishearth 9y agobindgen actually has the option to generate wrappers for C++ methods and other stuff for Rust to call. We don't use this, but we do use its ability to generate templates and stuff. The other way around -- getting Rust to use the C++ abi -- needs compiler changes and also has questionable benefits.
- oscargrouch 9y ago> getting Rust to use the C++ abi -- needs compiler changes and also has questionable benefits. Yes.. Im sure is not worthy it overall.
- vvanders 9y agoYup, with bindgen and rusty-cheddar you can build interfaces both ways that just talk over a C ABI. It's really, really nice. In fact Rust in general is awesome for going to a wide range of platforms. I've got a project right now that runs on MSVC-x64/x86, Linux-x64, OSX-x64, Android-armv7, Android-x86, Linux-armv7 and Emscripten. Single codebase and interacting with various languages(C#, C++, Java) via the C ABI. Rust even cross-compiles my C source via GCC crate so I can use C libraries and build for any of those targets from my host(win32) machine. Also, having just spent a few hours fucking around with linker flags in Qt I can't stress enough how awesome Cargo, Crates.io, Rustup and the sane defaults Rust has. It really is an incredible ecosystem.