Remix.run Logo
Cpp2Rust: Translates C++ to safe Rust automatically(github.com)
38 points by signa11 6 hours ago | 11 comments
crnakfls 42 minutes ago | parent | next [-]

> Notable unsupported constructs include: union, volatile, goto, exceptions, bitfields, placement new, user-defined copy/move constructors, dynamic_cast, const_cast, base classes with fields or non-virtual methods, multiple inheritance, and multi-threaded code.

bitwizeshift 29 minutes ago | parent | next [-]

Lol, “user defined copy/move constructors” That’s actually so many types that would define this

antiframe 32 minutes ago | parent | prev [-]

So, most C++ code I have seen in my forty years of coding.

logicchop an hour ago | parent | prev | next [-]

If I can autoport my C++ to Rust, and the port is confirmed identical, and the Rust is confirmed safe, can't I use that to reason about the safety of my C++? Is safe C++ just a matter of proving it has a safe Rust equivalent?

johnbender an hour ago | parent | next [-]

It depends on what “confirmed identical” means. Most compilers (or translators as you like) only guarantee that the output program represents a subset of the behaviors of the input program so it could be that subset is the “safe as in Rust” subset.

_flux 42 minutes ago | parent | prev [-]

The conversions seem to use (sometimes?) unsafe blocks.

z_open 2 hours ago | parent | prev | next [-]

Why does the example not show an example of unsafe C++?

rileymat2 2 hours ago | parent [-]

The Readme is slim, with the intent to show a hello world but the tests do. Look in https://github.com/Cpp2Rust/cpp2rust/blob/master/tests/ub/

IshKebab an hour ago | parent | prev | next [-]

Yeah the readme definitely needs some non-trivial examples. How does this handle raw pointers? Operator overloading? Inheritance?

dmitrygr 29 minutes ago | parent | prev | next [-]

The original paper quoth:

> our reference-counted translation model, where every variable is pessimistically wrapped inside a Rc<RefCell<T>> type, checks that would usually execute at compile-time are shifted to run time, degrading performance.

migueldeicaza an hour ago | parent | prev [-]

codex "/goal port this codebase from c++ to rust"