3 ms·
> We previously explored Swift, but the C++ interop never quite got there But Rust doesn't have C++ interop at all?
by viktorcode 7mo ago
> We previously explored Swift, but the C++ interop never quite got there
But Rust doesn't have C++ interop at all?
- k33n 7mo agoIt's technically Rust -> C -> C++ as it stands right now
- tonyedgecombe 7mo ago>But Rust doesn't have C++ interop at all? It also doesn't have the disadvantages of Swift. Once the promise of Swift/C++ interop is gone there isn't enough left to recommend it.
- skavi 7mo agoI’m curious what issues people were running into with Swift’s built in C++ interop? I haven’t had the chance to use it myself, but it seemed reasonable to me at a surface level.
- stratos123 7mo agoThere's a list of unsolved problems in this Ladybird issue, now closed because they dropped Swift: https://github.com/LadybirdBrowser/ladybird/issues/933 https://github.com/LadybirdBrowser/ladybird/issues/933 for example: "Swift fails to import clang modules with #include <math.h> with libstdc++-15 installed. Workaround: None (!!)"
- nicoburns 7mo agoYou can do it via the C ABI, and use opaque pointers to represent higher-level Rust/C++ concepts if you want to. Firefox is a mixed C++ / Rust codebase with a relatively close coupling between Rust and C++ components in places (layout/dom/script are in C++ while style is in Rust, and a mix of WebRender (Rust) and Skia (C++) are used for rendering with C++ glue code)
- wavemode 7mo ago> You can do it via the C ABI, and use opaque pointers to represent higher-level Rust/C++ concepts Yeah but, you can do the same in Swift
- nicoburns 7mo agoMy understanding from a brief read of the Swift issue is that they kept running into bugs in the Swift compiler which, in practice, prevented them from doing the things that they ought to be do in theory. This went on for long enough, that they got fed up and abandoned Swift. The Rust compiler is incredibly solid (across all target platforms), and while it's C/C++ interop is relatively simplistic, what does exist is extensively battle tested in production codebases.
- azornathogron 7mo agoIt may have in the future. Crubit is one effort in this direction: https://crubit.rs/ https://crubit.rs/
- woadwarrior01 7mo agoYeah, that part doesn't make much sense to me. IMO, Swift has reasonably good C++ interop[1] and Swift's C interop has also significantly improved[2] since Swift 6.2. [1]: https://www.swift.org/documentation/cxx-interop/ https://www.swift.org/documentation/cxx-interop/ [2]: https://www.swift.org/blog/improving-usability-of-c-libraries-in-swift/ https://www.swift.org/blog/improving-usability-of-c-librarie...
- matthewkosarek 7mo agoThere is also cxx.rs, which is quite nice, albeit you have to struggle sending `std` types back and forth a bit
- nicoburns 7mo ago> albeit you have to struggle sending `std` types back and forth a bit Firefox solves this partly by not using `std` types. For example, https://github.com/mozilla/thin-vec https://github.com/mozilla/thin-vec exists in large part because it's compatible with Firefox's existing C++ Vec/Array implementation (with the bonus that it's only 8 bytes on the stack compared to 24 for the std Vec).
- nickorlow 7mo agoLuckily, ladybird also does not use `std` types
- the_mitsuhiko 7mo agoRust has cxx which I would argue is "good enough" for most use cases. At least all C++ use cases I have. Not perfect, but pretty damn reasonable.