3 ms·
Mozilla's uses a combination of https://github.com/eqrion/cbindgen https://github.com/eqrion/cbindgen and https://github.com/rust-lang/rust-bindgen https://gith
by muizelaar 6y ago
Mozilla's uses a combination of https://github.com/eqrion/cbindgen https://github.com/eqrion/cbindgen and https://github.com/rust-lang/rust-bindgen https://github.com/rust-lang/rust-bindgen depending on the direction of interop. These tools don't provide the safety guarantees of https://github.com/dtolnay/cxx https://github.com/dtolnay/cxx but the also both predate cxx and C++ doesn't have much in terms of safety guarantees to begin with so the bar is pretty low.
- jcranmer 6y agoIt's also worth mentioning that Mozilla tends not to use a lot of standard C++ types, using nsTArray instead of std::vector or nsA?C?String instead of std::string. This makes the porting of APIs using arrays or structs easier, since Mozilla owns the ABI rather than needing to worry about different standard libraries having different ABIs.
- ChrisSD 6y agoC++ interop with C++ can be a pain. E.g. even with the same version of the same compiler, GCC can have different options enabled that affect the layout of some types.
- ncmncm 6y agoThat is the same in all languages mature enough to have variant options. Rust included. Therefore, a tendentious distraction from the topic. Chris, I shall expect better from you in the future.