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

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • 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/

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB 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

  • 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
  • Official /r/rust "Who's Hiring" thread for job-seekers and job-offerers [Rust 1.69]

    4 projects | /r/rust | 23 Apr 2023