Making C++ Safe Without Borrow Checking, Reference Counting, or Tracing GC

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
  • crubit

  • See also:

    Thomas Neumann's current proposal for memory safe C++ using dependency tracking:

    - https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p27...

    Google's proposal for memory safety using Rust-like lifetime analysis:

    - https://discourse.llvm.org/t/rfc-lifetime-annotations-for-c/...

    - https://github.com/google/crubit/tree/main/lifetime_analysis

  • verona

    Research programming language for concurrent ownership

  • I think the future lies in figuring out how to get the benefits of that secret sauce, while mitigating or avoiding the downsides.

    Like Boats said, the borrow checker works really well with data, but not so well with resources. I'd also add that it works well with data transformation, but struggles with abstraction, both the good and bad kind. It works well with tree-shaped data, but struggles with programs where the data has more intra-relationships.

    So if we can design some paradigms that can harness Rust's borrow checker's benefits without its drawbacks, that could be pretty stellar. Some promising directions off the top of my head:

    * Vale-style "region borrowing" [0] layered on top of a more flexible mutably-aliasing model, either involving single-threaded RC (like in Nim) generational references (like in Vale).

    * Forty2 [1] or Verona [2] isolation, which let us choose between arenas and GC for isolated subgraphs. Combining that with some annotations could be a real home run. I think Cone [3] was going in this direction for a while.

    * Val's simplified borrowing (mutable value semantics) combined with some form of mutable aliasing (this might sound familiar).

    [0] https://verdagon.dev/blog/zero-cost-borrowing-regions-part-1... (am author)

    [1] http://forty2.is/

    [2] https://github.com/microsoft/verona

    [3] https://cone.jondgoodwin.com/

  • 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
  • wasmtime

    A fast and secure runtime for WebAssembly

  • Assuming you are serious, there is https://github.com/bytecodealliance/wasmtime/tree/main/crane... which is written in Rust and is targeted to become the default debug backend in rustc. LLVM as accumulated a lot of optimizations contributed by many various groups and people. It's hard to catch up to that by virtue of resource limits.

  • circle

    The compiler is available for download. Get it!

  • The second someone makes a successor language that seamlessly/directly interops with C++ _AND_ has the level of build/IDE tooling that C++/Rust have, I'm on board.

    The closest thing right now is Sean Baxter's "Circle" compiler in "Carbon" mode IMO:

    https://github.com/seanbaxter/circle/blob/master/new-circle/...

    Unfortunately, Circle is closed-source and there's no LSP or other tooling to make the authoring experience nice.

  • rfcs

    RFCs for changes to Rust

  • Did you get a look at https://github.com/rust-lang/rfcs/pull/3446 at all?

  • ASP.NET Core

    ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.

  • The Kestrel web server[0] is an example of a codebase that makes extensive use of C#'s unsafe functionality. UnmanagedBufferAllocator[1], for example, looks pretty similar to how you'd write it in C++.

    [0] https://github.com/dotnet/aspnetcore/tree/1a56bdb671700ae698...

    [1] https://github.com/dotnet/aspnetcore/blob/1a56bdb671700ae698...

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