Was Rust Worth It?

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

InfluxDB – Built for High-Performance Time Series Workloads
InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  1. Vrmac

    Vrmac Graphics, a cross-platform graphics library for .NET. Supports 3D, 2D, and accelerated video playback. Works on Windows 10 and Raspberry Pi4.

    Projects Panama & Valhalla seems to solve all your complaints:

    > Java doesn’t support C interop. For many desktop and embedded projects this is a showstopper, here’s an example https://github.com/Const-me/Vrmac/tree/master/VrmacVideo That C# code directly consumes V4L2 and ASIO Linux kernel APIs, and calls unmanaged user-mode DLLs like libfdk-aac.so and liba52-0.7.4.so.

    Part of Panama: check out the "Foreign Function & Memory API" [0]. The official docs here [1] say it is a preview in 21 but it got stabilized in Java 22 (isn't out yet).

    > Another thing missing in Java is intrinsics support, both scalar like popcnt, bitscan, BMI, etc., and SIMD like SSE and AVX.

    Also part of Panama: see the "Vector API" JEP [2].

    > Native stack and value types in C# reduce load on GC, and the number of complicated tricks required from JIT compiler. This in turn helps with startup performance. This is critical for command-line apps, and very desirable for desktop apps.

    This is part of Project Valhalla [3], they're adding value types and actual generics, among other things.

    That said, most of these are not done / not in a stable LTS Java release yet. We'll see how much better it'll be compared to C# (if at all) once all of these land.

    [0] https://openjdk.org/jeps/454

  2. InfluxDB

    InfluxDB – Built for High-Performance Time Series Workloads. InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.

    InfluxDB logo
  3. Composer

    Dependency Manager for PHP

  4. Packagist

    Package Repository Website - try https://packagist.com if you need your own -

    Sorta—it looks like they were most enforced by convention until May 2015, when they finally become enforced [0]. Still, that's a good one that I hadn't thought of, and they at least had the convention in place.

    [0] https://github.com/composer/packagist/issues/163#issuecommen...

  5. wick

    Functional, reactive WebAssembly with a twist

    > In Wick, we use a script to automatically update inline lint configurations for a few dozen crates.

    > https://github.com/candlecorp/wick/blob/28465f8c1492e6588bd2...

    Good lord, that is an INCREDIBLE number of lints to disable, and for... what? If you have to disable lints telling you about things like unused/dead code, intentional validation of the language's conventional style, unused/unnecessary allocations, useless/trivial type casts, ... then I really wonder what kind of code is actually being written.

  6. rfcs

    RFCs for changes to Rust

  7. Polyglot for Maven

    Support alternative markup for Apache Maven POM files

    And you don't even need to use XML with Polyglot Maven

    https://github.com/takari/polyglot-maven

  8. too-many-lists

    Learn Rust by writing Entirely Too Many linked lists

    > Cyclic references can be dealt with runtime safety checks too - like Rc and Weak.

    Indeed. Starting out with code sprinkled with Rc, Weak, RefCell, etc is perfectly fine and performance will probably not be worse than in any other safe languages. And if you do this, Rust is pretty close to those languages in ease of use for what are otherwise complex topics in Rust.

    A good reference for different approaches is Learn Rust With Entirely Too Many Linked Lists https://rust-unofficial.github.io/too-many-lists/

  9. SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  10. rust_cmd_lib

    Common rust command-line macros and utilities, to write shell-script like tasks in a clean, natural and rusty way

  11. rust-playground

    The Rust Playground

    https://play.rust-lang.org/?version=stable&mode=debug&editio...

    In this case, the first two errors are clear. The next 3 provide multiple, redundant context blocks. The upshot is that this simple example results in rustc printing 11 lines of useful error messages and 86 lines of useless messages. Add to that the fact that the useful error messages need not be at the top or bottom of the error list, they can be anywhere inside of it, depending on the declaration order.

  12. min-sized-rust

    🦀 How to minimize Rust binary size 📦

    Rust binaries are by default nowhere close to 500MB. If they are not small enough for you, you can try https://github.com/johnthagen/min-sized-rust. By avoiding the formatting machinery and using `panic_immediate_abort` you can get about the size of C binaries.

  13. axiom

    A 64-bit kernel implemented in Nim (by khaledh)

    I gave Rust a few chances, and always came out hating its complexity. I needed a systems programming language to develop a hobby OS[1], and Nim hit the sweet spot of being very ergonomic, optional GC, and great interop with C. I can drop down to assembly any time I want, or write a piece of C code to do something exotic, but the rest of the system is pure Nim. It's also quite fast.

    [1] https://github.com/khaledh/axiom

  14. .NET Runtime

    .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.

    Writing performance-sensitive code in C and calling it via interop used to be the way to go during .NET Framework days but since then has become a performance trap.

    Especially for small methods, calling them through interop is a deoptimization because they cannot be inlined, and involve GC frame transition (which you can suppress) as well as an indirect jump and maybe interop stub unless you are statically linking the dependency into your AOT deployment. In case the arguments are not blittable to C - marshalling too.

    It is also complicates the publishing process because you have to build both .NET and C parts and then package them together, considering the matrix of [win, linux, macos] x [x64, arm64], it turns into quite an unpleasant experience.

    Instead, the recommended approach is just continuing to write C# code, except with pointer and/or ref based code. This is what CoreLib itself does for the most performance-sensitive bits[0]. Naturally, it intentionally looks ugly like in Rust, but you can easily fix it with a few extension methods[1].

    [0]: https://github.com/dotnet/runtime/blob/main/src/libraries/Sy...

    [1]: https://github.com/U8String/U8String/blob/main/Sources/Share...

  15. U8String

    [work-in-progress] Highly functional and performant UTF-8 string primitive for C#

    Writing performance-sensitive code in C and calling it via interop used to be the way to go during .NET Framework days but since then has become a performance trap.

    Especially for small methods, calling them through interop is a deoptimization because they cannot be inlined, and involve GC frame transition (which you can suppress) as well as an indirect jump and maybe interop stub unless you are statically linking the dependency into your AOT deployment. In case the arguments are not blittable to C - marshalling too.

    It is also complicates the publishing process because you have to build both .NET and C parts and then package them together, considering the matrix of [win, linux, macos] x [x64, arm64], it turns into quite an unpleasant experience.

    Instead, the recommended approach is just continuing to write C# code, except with pointer and/or ref based code. This is what CoreLib itself does for the most performance-sensitive bits[0]. Naturally, it intentionally looks ugly like in Rust, but you can easily fix it with a few extension methods[1].

    [0]: https://github.com/dotnet/runtime/blob/main/src/libraries/Sy...

    [1]: https://github.com/U8String/U8String/blob/main/Sources/Share...

  16. cargo-geiger

    Detects usage of unsafe Rust in a Rust crate and its dependencies.

    Instead of looking at the crates themselves, you might want to check your (or others') Rust application with https://github.com/rust-secure-code/cargo-geiger to get a sense of effective prevalence. I also dispute that the presence of unsafe somewhere in the dependency tree is an issue in itself, but that's a different discussion that many more had in other sub-threads.

  17. rust

    Empowering everyone to build reliable and efficient software.

    That is a different problem than the one I thought you were seeing.

    We do spend a lot of time trying to silence errors that are irrelevant. We also get a lot of complaints when fixing a single error produces a wave of new errors that were hidden due to failures in earlier stages. It's a balancing act.

    Also, specific errors are verbose in order to give people a fighting chance to fix their issue. An error that is too verbose is annoying. An error that is too terse will leave users in the cold as to what the problem was. It's yet another balancing act.

    I filed https://github.com/rust-lang/rust/issues/117233 for you. Could I ask you why you didn't consider doing so when you first encountered this problem?

  18. subgroup1

    Ah that makes sense. I think Go did somewhat stumble a bit in the early days due to this, especially with repositories in GitLab, where GitLab allows essentially a directory tree where your repository can be nested indefinitely in directories like `https://gitlab.com/mygroup/subgroup1/subgroup2/repository`.

    I still don't think this is a huge issue, to be honest. Not one big enough for me to complain about, for sure. But it's definitely not ideal.

  19. SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub 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

  • Ext-PHP-rs: Bindings for the Zend API to build PHP extensions natively in Rust

    1 project | news.ycombinator.com | 28 Mar 2025
  • My negative views on Rust (2023)

    11 projects | news.ycombinator.com | 9 Oct 2024
  • Async2 – The .NET Runtime Async experiment concludes

    3 projects | news.ycombinator.com | 22 Aug 2024
  • Symfony 7 vs. .NET 8 - same-same but different?

    1 project | dev.to | 3 May 2024
  • From Beginner to Master: The Path to Becoming a PHP Guru

    5 projects | dev.to | 12 Mar 2024

Did you know that Rust is
the 5th most popular programming language
based on number of references?