Emitting Safer Rust with C2Rust

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • c2rust

    Migrate C code to Rust

  • > The date at the bottom of the article is 2022-06-13. Has there been further progress?

    The article links to their github repo:

    https://github.com/immunant/c2rust

    There's commits in the last hour, so at least some signal of life.

  • catacomb_ii-64k

    Rust port of Catacomb II (SDL)

  • Conditional to your definition of "serious", I did: https://github.com/64kramsystem/catacomb_ii-64k. I essentially don't do technical writing anymore (and I had the impression that this topic isn't generally considered interesting), however, my considerations are:

    1. there are three levels of refactoring: removing the extensive (unbearable, to be honest) boilerplate that C2Rust introduces; converting the design from C to safe Rust; convert the design from unidiomatic Rust to idiomatic

    2. as another poster pointed out, for non-trivial projects, writing refactoring tooling is a must (to remove the C2Rust boilerplate), in order to perform step 1

    3. design refactoring (step 3) difficulty depends on the source code design; the code I worked with was hard to refactor, as it was old (school), in particular, lots of globals; the difficulty was not caused by the conversion C<>Rust, rather, the typical freedoms that C gives and Rust doesn't (in other words, the very obvious design differences between C and Rust)

    4. regarding the code understanding, if one performs the translation in the three-steps mentioned in point 1, at the end of step 2, one has effectively a safe Rust codebase, "just" unidiomatic

    5. beside a few steps, I was able to perform a conversion in self-contained steps, which is very good news for this type of work. Even better, it's possible (but that's a niche case) to port an SDL project by using at the same time the C library and the Rust one!

    6. however, I can imagine projects like Wolfenstein 3d to be very hard, since it's hard to port memory allocators and similar

    99. most important of all: just converting to Rust will quickly (even immediately) find bugs in the source; I've found approximately four bugs in the source code, including one by Carmack!

    All in all, I find this tool great, but somebody needs to work on refactoring tools, and C2Rust's output must be improved in order to be found usable by the public.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • openjpeg

    Official repository of the OpenJPEG project (by Neopallium)

  • 5. c2rust expands macros and constants from `#define`. Being able to do side-by-side comparison of the C code will help with adding constants back in and removing expanded code with Rust macros or just normal Rust functions.

    [0] https://github.com/Neopallium/openjpeg/tree/master/openjp2-r...

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts