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

CodeRabbit: AI Code Reviews for Developers
Revolutionize your code reviews with AI. CodeRabbit offers PR summaries, code walkthroughs, 1-click suggestions, and AST-based analysis. Boost productivity and code quality across all major languages with each PR.
coderabbit.ai
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  1. 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

  2. CodeRabbit

    CodeRabbit: AI Code Reviews for Developers. Revolutionize your code reviews with AI. CodeRabbit offers PR summaries, code walkthroughs, 1-click suggestions, and AST-based analysis. Boost productivity and code quality across all major languages with each PR.

    CodeRabbit logo
  3. 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/

  4. wasmtime

    A lightweight WebAssembly runtime that is fast, secure, and standards-compliant

    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.

  5. 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.

  6. rfcs

    RFCs for changes to Rust

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

  7. 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

  • Introducing Spin 3.0

    11 projects | dev.to | 12 Nov 2024
  • Unlocking the Power of WebAssembly

    3 projects | dev.to | 10 Mar 2024
  • MotorOS: a Rust-first operating system for x64 VMs

    7 projects | news.ycombinator.com | 7 Jan 2024
  • Announcing Floneum (A open source graph editor for local AI workflows written in rust)

    3 projects | /r/rust | 12 Jul 2023
  • ROS2: Yocto vs. Docker

    2 projects | /r/embedded | 27 Apr 2023