Are there plans to improve concurrency in Rust?

This page summarizes the projects mentioned and recommended in the original post on /r/rust

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

    The Go programming language

  • Besides Go's many other problems optimizing CPU-bound work, the Go runtime isn't even designed for it. Many people would be appaled to learn that to stop CPU-heavy goroutines from starving IO reaction goroutines, Go will just use thread signals to preempt the CPU-bound work (source). In Rust you can get a real native thread ID to use for things like priority, core pinning, thread-local storage, P/E QoS, etc. while with Go you have no real sanctioned way to control anything at all about your goroutines much less how the runtime manages their underlying threads.

  • ffi-overhead

    comparing the c ffi (foreign function interface) overhead on various programming languages

  • Go doesn't even have native thread stacks. When call any FFI function Go has to switch over to an on-demand stack and coordinate the goroutine and the runtime to avoid preemption and starvation. This is part of why Go's calling overhead is over 30x slower than C/C++/Rust (source). It's understandbly become Go community culture to act like FFI is just not even an option and reinvent everything in Go, but that reinvented Go suffers from these other problems plus many more (such as optimizing far worse than GCC or LLVM).

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

    The Python programming language

  • In python bugs around async are still discovered like this recent fix: https://github.com/python/cpython/pull/96323 tl;dr : launching a background task without keeping a reference to it could lead to get the task garbage collected before completion. And even a python contributor fell for it. The documentation for create_task was only clarified recently.

  • pure-raft

  • I have had excellent success with this approach when implementing the Raft algorithm. Raft involves a complex state machine that uses several notionally "asynchronous" operations (sending/receiving messages, storing/loading data from disk, triggering events on timeouts). But that doesn't mean that it needs to be async. For example, instead of having the user of the crate implement a "Storage" trait with asychronous methods, it simply returns a list of the storage operations that must be executed. The caller is free to execute these however they want, sync or async. Traits are a convenient tool for polymorphism, but are not the only one, and will frequently lead to ugly/complex architectures when combined with async.

  • iced

    A cross-platform GUI library for Rust, inspired by Elm

  • I think this is something that iced is doing really well (which is inspired by elm which damn near did it perfectly, imo).

  • Elm

    Compiler for Elm, a functional language for reliable webapps.

  • I think this is something that iced is doing really well (which is inspired by elm which damn near did it perfectly, imo).

  • embassy

    Modern embedded framework, using Rust and async.

  • Just to add a bit to your explaination about how much control Rust async gives you: Embassy

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