• Hacker News
  • new|
  • comments|
  • show|
  • ask|
  • jobs|
  • 6 hours

  • jdbloodstone 6 hours

    [flagged]

  • LoganDark 51 minutes

    Hexcat link is broken and leads to "https://https//hexcat.nl" instead of https://hexcat.nl

  • infogulch 2 hours

    I'm curious about polymorphism. Should it be default on for debug builds just to save storage and compile time? How will rust decide whether to enable polymorphism? Will it be possible to provide source-level polymorphism hints to the compiler?

    panstromek 1 hours

    > polymorphism

    I assume you ask about polymorphization, which is a term used to refer to a specific optimization mentioned in the blog post.

    The base version which Rust wants the most makes sense to enable by default for all builds, because it's purely just removing duplicate work - this is for cases like Vec<u64> and Vec<i64>, where we currently emit code for each one separately, even though it's pretty much the same for both.

    More general version will make sense for debug builds or in some special cases, like when optimizing for size. I believe people also want to experiment with it for some interop use cases (and for that, it'd be useful to have source level annotation). I think it's too early to tell how all of this is going to look like, though.

    estebank 1 hours

    The "hint" you could provide today for polymorphization is to write code like

        fn needs_string_like(x: Into<String>) {
            fn actual_logic(_: String) {}
            actual_logic(x.into())
        }
    
    which is the explicit way of representing the same thing rustc would be doing automatically. The above will create an almost empty `needs_string_like` for each type that it is called with, but a single `actual_logic`. IIRC some optimization passess would completely remove specific instances of `needs_string_like` (like if you call `needs_string_like(String::new())`).

  • panstromek 8 hours

    I don't understandy why, but all submissions of this post so far had incorrect title. When I posted the correct one, it still got reassigned the wrong title and I had to edit it (and it didn't allow me to do that yesterday, only today).

    tialaramex 7 hours

    Hacker News has some automatic fixes for title text. Some - perhaps all - of them can walk into false positives where a change that's usually desirable instead ruins the title either because it's a joke and the change spoils the joke or just because English is complicated.

  • shmerl 1 hours

    Somewhat indirectly related, but is there any progress on implementing persistent caching in rust-analyzer? It would really benefit from faster startup times.

    afdbcreid 8 minutes

    (r-a team member here) The progress is in Salsa (the incremental framework we use), not in r-a itself yet. And there is progress but it's not particularly fast, it's also not a priority for the r-a team (though if you want to contribute, you're welcome of course).

  • KolmogorovComp 1 hours

    I'm wondering about the future of clippy.

    archermarks 12 minutes

    A bit out of the loop, what's going on with clippy?

  • hmokiguess 7 hours

    Pretty wild to see how different people’s experiences can be within the same industry but under different applications and circumstances, here is someone joyful about the future of a language whereas not long ago we had a Ruby gem maintainer in deep dissatisfaction and frustration with the future of it.

    Not implying to compare Rust and Ruby, just mainly observing how these two things came out near each other in the present day.

    anonymous908213 4 hours

    Leadership matters. I don't suppose the Rust leaders have been telling their community to write more open-source code for free with the express purpose of replacing those people with LLMs trained on their work.

    hmokiguess 2 hours

    On this topic, how ironic that the Ruby dude who is getting infamous for doing this is preaching moving to Rust

  • throwup238 5 hours

    > It's easy to understate how big of a deal this is for the compiler. This work resolves a major piece of technical debt that a lot of compiler developers dreamed about for years.

    No kidding. I’ve been waiting for the solver at least half that decade now. Hopefully it and Polonius unblock specialization which has been in purgatory for years.

    panstromek 4 hours

    There's some movement on specialization as well: https://goals.rust-lang.org/2026/specialization.html

    It's not directly blocked on the solver, but getting the type system into a better shape definitely helps reasoning about the soundness issues involved.

    afdbcreid 17 minutes

    More precisely: it wasn't known to be blocked on the new solver (unlike some other features), because nobody dared to touch it until recently... (more seriously, there wasn't enough investment).

  • vatsachak 5 hours

    The best way to get a rust job is get a regular job and just write rust

    cpursley 4 hours

    I did this once but with Elixir, and it worked - because I shipped ahead of schedule (way ahead of the other teams portions). Performance and quality met the standards. Sometimes it's better to ask for forgiveness than permission if that means not having to fool with Java.

    vatsachak 3 hours

    Unless you work at a FAANG the team will ask you to make a tool and will probably be fine with a mainstream language.

  • lolakutty 5 hours

    Rust is not very relevant anymore when you can write it in C and once in a while run an LLM over it to catch any memory issues...

    afdbcreid 6 minutes

    I've never seen a proof that LLMs can fix memory safety in C or C++ like Rust does. I'll believe it when I'll see it.

    And I prefer to work with Rust than both anyway. Such advancement (if it will happen) will only make other languages like Zig feasible for me.

    satvikpendem 5 hours

    I hope this is satire.

    lolakutty 4 hours

    It is not. Tell me one good reason to deal with the horrible language called rust now that we have mechanisms capable of doing the exact same stuff in a vastly less obnoxious manner....(I am talking about running LLMs over your C code once in a while).

    I don't like rust because

    1. Verbose Syntax made worse by having to include type system info... 2. Dumb Borrow checker 3. Automagic stuff...

    esafak 1 hours

    A C user calling Rust a bad language is a fine example of the pot calling the kettle black.

    Sharlin 3 hours

    Thanks for your opinion, we’ll give it all the attention that it deserves.

    lolakutty 1 hours

    Who gives a fuck.

    ikety 5 hours

    or to save tokens you can have an LLM write a borrow checker to do this for you. Oh wait you're just rebuilding rust...

    lolakutty 4 hours

    The point of writing in C is that I don't have to deal with borrow checker shit when it is too dumb to figure out what I want to do is actually safe.

    2 hours

    simonask 4 hours

    My money is on the opposite.

    lolakutty 1 hours

    And that my friend, is the problem with the rust community...

  • yhjc2692 7 hours

    Smaller target directory size would be such a lifesaver. Hoping the best for you, and Rust!

    MBCook 4 hours

    Could you e plain the issue for a non-rustacean?

    estebank 3 hours

    The Rust toolchain by default produces a lot of debug information for each crate being compiled and the language relies heavily on monomorphization (instantiating a different function/type for each combination of generics) which translates to generally having duplicated functionality where the only difference in the object code is the different types. These two things combined, along with large dependency trees and that "features" for conditional compilation cause the same crate to be considered different across different workspaces (meaning the rlibs that were created for one can't be reused for another), means that the target directory for Rust projects can quickly grow. That, + clippy not having stabilized an already implemented process to automatically delete files from the target directory when they are unlikely to be needed again (which can't be 100% accurate, it uses heuristics because a developer could always potentially need an exact rlib from 6 months ago, it is just unlikely) means that you can expect that under the default configuration your target directory ends up being huge after a short period of time.

    A lot of those things are in different stages of being fixed. I would personally want the default for generated debug information to be changed. cargo gc will help with running out of disk space. Better cross-project reuse of existing rlibs could be accomplished with some better tracking of optional features that can be unified (think having `serde` with feature `derive` enabled in one project, and having it without it in another: features are supposed to be purely additive, so you could reuse the earlier rlib on the later, but in practice people (ab?)use features in non-additive ways so it isn't straighforward to do something like that by default). Tools like hakari lets you create workspace-unified Cargo.toml to emulate this behavior.

    yhjc2692 3 hours

    Woah, this is great to know. Thanks for explaining!

    thomashabets2 7 hours

    It would help, yes. Here's one of my projects, that uses different subdirectories in target/ based on compiler options pre-commit runs:

        $ du -hcs target/
        190G    target/

    bitbasher 5 hours

    I can deal with large builds, what I cant deal with is time. My rust web application takes 20 minutes to build in release mode on a high end developer machine. I can’t build it in ci/cd.

    rapind 4 hours

    Yeah, there are some things I've done to mitigate this, especially for the dev loop. Moving templates out of rust (losing some safety). Splitting the application into vertical slices. Only generating code that's changed. Turning features into crates.

    It's been a journey...

    panstromek 4 hours

    20 minut definitely sounds suspicious. For comparison, Rust compiler takes ~10 minutes to build in release mode (in the simple config without all the fancy PGO stuff we run on CI).

    Do you have some more info about the codebase, is it public?

    simonask 4 hours

    That sounds like something is very wrong with your setup.

    stymaar 5 hours

    This!

    There's a recurring meme here and in other social media about rust being slow to compile, but anyone who's worked with Rust know that target dirs are a much more annoying papercut in practice than the relative speed of the compiler (which isn't appreciably worse than any other toolchain out there for the most common workflows).

    4 hours

    d0mine 4 hours

    ~Zero build time Python vs 20 min for Rust web app

    colechristensen 3 hours

    I have a whole section in my global AGENTS.md about how python sucks to influence agents to not use it for anything performance sensitive.

    My favorite improvement example was something a bit of a slog was taking 20 minutes in python, I told the agent to rewrite it in rust and the result was 300,000 times faster... 20 minutes to ones of milliseconds. Obviously not just a python problem but better solutions just seem to fall out of Rust and Python is just slow.

    Filligree 4 hours

    It's more than zero, but 15 seconds would be a great deal more realistic for an incremental build.

    maccard 2 hours

    Go is pretty close to 0 as well IME.

    Funnily enough, last week I was working on parsing some json. I wrote a little script in python, tested it and then ran it over the main dataset. It took so long that I rewrote it in C# before the python script had finished!

    rapind 4 hours

    Both (and memory) are a problem. Build sizes is definitely more easily solved just by throwing more disk at it though (unless you are using a hard constrained mac...).

    estebank 4 hours

    A partial solution that avoids you spending money is to stick `debuginfo = "line-tables-only"` in your `Cargo.toml`.

    epage 2 hours

    This will be the default for the `dev` profile in an upcoming release now that the `debug` profile has been split out.

    colechristensen 3 hours

    A good 4TB SSD was $1000 the last time I checked. The "throw more resources at it" attitude makes all but very top tier equipment kinda useless for many cases.

    I had to abandon several projects until I bought a significantly beefier computer because of disk space, which is ridiculous. A lot of it was rust target directories taking up tens of gigabytes.

    rapind 1 hours

    Yes it's a problem. Not dismissing it. Just a less expensive problem than CPU or RAM is all I'm saying. It's been a thorn for me too (being on a macbook myself, but now I have a dedicated build box).

    RAM prices are insane right now...

    yhjc2692 3 hours

    [dead]

    anonymous908213 4 hours

    A papercut is an unbelievable way to describe this. I tried forking Codex CLI and, for a terminal UI that manages chats and HTTP requests, it takes over 15 minutes to rebuild trivial changes on a top-shelf CPU with all incremental/caching optimizations, and tens of GBs in build caches. Neither of those is acceptable. Full stop. I am aware part of the problem is that Codex CLI is a vibe-coded monstrosity (surprise, software is not solved), but I've not had this problem with vibe-coded monstrosities in eg. Go. Hold your language to better standards. That doesn't mean abandon Rust; that means strive to make the Rust toolchain better than the Go toolchain rather than shrugging your shoulders and saying "lol this is fine no way anybody could do anything about this".

    stymaar 43 minutes

    > it takes over 15 minutes to rebuild trivial changes on a top-shelf CPU

    I have no idea how this could possibly be this bad given that I worked full time with Rust from 2015 to 2023 on a $600 Clevo laptop from 2012 and was used to incremental builds in the low double digit seconds for projects ranging between 100k and 600k loc. (From scratch release builds where excruciatingly slow, but these only happened once every rust updates).

    afdbcreid 15 minutes

    You only clean the build directory once every Rust update? Unless you use nightly, I don't see how that's feasible. Having a 1TB (and pretty free) disk, I still need to clean regularly (not that commonly, but more than once a release).

    xyzzy_plugh 2 hours

    I've seen three outages at various orgs that were prolonged due to compile times. In these cases it was a root contributor to missing RTO. The compile times are a liability.

    One proposal I came across actually suggested breaking up a perfectly fine monolith into a dozen microservices to reduce compile times (at the cost of cumulative CI costs going up).

    When the alternative is massively rearchitecting your systems, Zig and Go begin to look really nice by comparison.

    yosefk 1 hours

    Zig dumps core and Go is slower and needs more memory though, and this matters, too. (not that Rust build times are really a price to pay for avoiding these things, it's more a result of not making fast builds a goal from the start)

    iknowstuff 51 minutes

    Maybe the proposal you saw was breaking up into crates, which is Rust's compilation units and can be parallelized. They're not microservices, they're just libraries which still combine to produce a single binary.

    simonask 4 hours

    I have no idea about the code quality of Codex CLI, but it takes way way less time to build a full game engine (Bevy).

    Stories like this make me think something is wrong with your setup. Do you have Windows Defender or similar enabled on the build directory?

    shakna 1 hours

    Bevy is intentionally sharded across many crates, is small, and has the dev working on optimised build times.

    That isn't "Rust compiles are fast", it's another example of "Rust requires you architect your code a specific way".

    afdbcreid 13 minutes

    > That isn't "Rust compiles are fast"

    And neither the original example is "Rust compiles extremely slowly" (it does compile slowly), it's another example of "vibecoded software is of poor quality".

    yosefk 59 minutes

    Fair enough but Rust also gives you a mix of safety and efficiency nothing else does

    aliasxneo 2 hours

    Weird take. I've worked in large Rust projects for half a decade (in one case, a full blockchain written in Rust). It's slow, full stop. I was under constant pressure to keep CI times down and was resorting to some of the craziest optimizations just to save a few minutes. Meanwhile, all of the platform code I was writing in Go almost never had a CI time above a few minutes.

    Doesn't mean one is better than the other, but to find it odd someone had an experience with slow Rust compiliations and then blame it on their setup is a bit odd.

    simonask 1 hours

    Well, me too, and I can confidently tell you I’ve never seen build times in the 10+ minute range (on capable machines).

    afdbcreid 11 minutes

    It is slow. Nobody would deny that. It also requires work to avoid disastrous compile times, that's also true.

    But 15 minutes? Even rustc doesn't take that long (on a powerful computer), and that's a very large program that is compiled at least twice (bootstrapping)! That's just poor engineering, not knowing how to write fast-to-compile Rust code.

    okanat 1 hours

    What kind of Rust projects? How many dependencies? Does it use macros? How about generics and traits?

    Most of the Rust ecosystem makes unnecessarily heavy use of compile-time traits and monomorphized generics (aka Go generics or C++ templates). The language syntax encourages it as well. The thing is compile times will NEVER drop to level of Go unless the entire set of players (language, standard library, almost all library developers) actually prioritize dynamic dispatching instead of static dispatching / monomorphization. That's the tradeoff for the performance and RAM usage you gain. Template-heavy C++ also suffers from the same issues for the same reason.

    Golang is fast to compile because its interface definitions are runtime/dynamically dispatched (aka `&dyn Trait` in Rust or virtual classes in C++) and it had no generics for a long time forcing types like slices, map and vectors to be magic types.

    If you need fast compile times, you need to split your program into multiple binaries or write your own backend ecosystem that almost only uses dynamic dispatching. If your full Cargo dependency tree pulls 50+ crates, you'll not get fast compile times. You need to avoid derive-macros like plague. You need to use non-Cargo build systems or `build.rs` to generate Rust code instead of derive-macros.

    Unlike Golang Rust also targets extremely memory constrained devices where monomorphization enables memory savings, extra optimizations and fewer CPU cycles / instructions (e.g. microcontrollers, UEFI/BIOS implementation). It is a system programming language first. With system programming languages you are responsible for these choices as the developer. Rust just happens to have a vivid scene of backend libraries since the language's safety enabled many non-system developers to write correct and performant programs quickly.