jkelleyrtp 1 hour ago

I built something similar - tbd on maintaining it - but I got Rust Analyzer emitting code and as well as running in the web. This new concept of rust compile daemon is pretty sick.

Can build and iterate on Rust in the browser!

https://dioxuslabs.github.io/rustd/

Sytten 2 hours ago

We have had good experience with kache so far to speedup builds in CI and local

  • n_u 2 hours ago

    How does it compare to sccache ?

    • jtwaleson 2 hours ago

      Kache caches more, and is path independent, so can be shared between worktrees.

      • TheMrZZ 9 minutes ago

        Interesting. First time I hear about Kache, I'm definitely gonna give it a try.

faresahmed 2 hours ago

Somehow always, someone somewhere rediscovers that cutting down the time between coding and code execution makes our lives easier and to a degree be able to write better programs.

Perhaps the earliest and best attempt was Lisp's computational model. Since then, the idea manifested itself again[1], again[2], and again[3] in different forms.

[1]: Inventing on Principle, Bret Victor: https://www.youtube.com/watch?v=PUv66718DII

[2]: REPL-Driven Development, Stuart Halloway: https://vimeo.com/223309989

[3]: LIVE, Live Programming workshop: https://liveprog.org/

  • Capricorn2481 2 hours ago

    This implies that Rust build times haven't been a topic of discussion for the last 10 years. They don't have long build times just for funsies, Rust is completely different from Lisp.

    • faresahmed 2 hours ago

      I beg to differ. It's not that Rust is completely different from Lisp. PL writers get so caught up with their 'killer feature' which in the case of Rust is the borrow checker, that they completely abandon the other 50% which is the environment.

      If we stopped treating the compiler as a one-shot program, we could theoretically shorten this edit-build-test loop by 99%.

      • LoganDark 1 hour ago

        The borrow checker is an example of a certain kind of reasoning that Rust benefits from. There's a reason a Lisp can be inspected and rewritten as the process runs, and it's the same thing that makes Rust difficult to rewrite in the same way. Not sure the exact term for it, but it's very easy to have profound nonlocal effects, for example with TAIT (type alias impl trait).

        • wahern 1 hour ago

          The borrow checker doesn't rely on interprocedural analysis. The function prototype provides all the information needed to maintain lifetime invariants across functions, so given static typing already then interprocedural borrow checking is effectively zero cost at compile time. (Cf. Intraprocedural, non-lexical borrow checking.) So borrow checking is no impediment to dynamically replacing function definitions. And it would be less of a headache for intraprocedural REPL but-for non-lexical semantics. But in a REPL you could always use an interpreter for running a function currently being edited, then compile it down once complete. REPLs are a headache for languages like Rust because of static typing generally, generics, trait semantics, etc.

    • christophilus 1 hour ago

      But there's not really a great reason for the long build times. There are plenty of languages that compile very fast. The Rust borrowchecker isn't the source of the bulk of the slowness. It seems to be a combination of language design (e.g. they didn't design it for fast compile times from the start), and implementation decisions. It does seem like there's room for a Rust-like language with Go-like tooling, standard lib, and a focus on development speed.

      • pcwalton 59 minutes ago

        It remains to be seen whether you can have a useful borrow checker on top of a simpler type system (at least, a type system that's significantly simpler so as to meaningfully reduce compile times). I have my doubts, personally.

      • nu11ptr 20 minutes ago

        The Rust compiler, while not extremely fast, is not extremely slow either. As an example, my toy compiler is 130K LoC of Rust and compiles in under 7 seconds on a cold build on my M5 Max. An incremental build is nearly instant. So then why is it that so many projects have a minute compile time with far fewer LoC?

        The answer: dependencies (My compiler has virtually none, intentionally)

        Rust has a very small stdlib, so you are forced to bring in dependency crates, and not just a few. Many programs have 50-100 or more, and they all have dependencies, and so on. Contrast with Go where it has a culture of few dependencies, and those project have few dependencies. Your Rust compiler is doing a lot more work for what appears to be the same program as in other langs, but ultimately is a lot more code (typically).

        To make matters worse, cargo does a decent job of parallelizing the builds, but it can only do so a) at the crate level b) only as much as the dependency graph allows.

    • pjmlp 27 minutes ago

      Haskell, Standard ML and OCaml have the tools for faster development workflows, or going for lunch while producing an optimised build.

      It is a matter of priorities.

  • pjmlp 29 minutes ago

    Spot on, hence why having a mix of JIT/AOT tooling is such a great experience.

    Besides your examples, Eiffel, Oberon, Java, .NET, C++ (yep even for it), Cedar, Standard ML, OCaml, Haskell, Prolog, BASIC, Forth

scottmas 57 minutes ago

Anyone know what effect it has on targets/ bloat and dev disk usage?

kennykartman 22 hours ago

I knew that makepad devs were focused on build times, but didn't imagine this much!

ricardobeat 5 minutes ago

> 0 crates.io dependencies, in 438k lines of Rust

I imagine "0 dependencies" is meant to be reassuring here, but the line count has the opposite effect?

ridiculous_fish 1 hour ago

This is preposterously ambitious - a complete Rust re-implementation. Looks like it's mostly claude?

  • pcwalton 1 hour ago

    Yeah, this is pretty much a textbook example of what AI agents make possible these days: things that are ridiculously ambitious, but aren't conceptually very difficult (or, at least, are conceptually well-trodden ground). Things like emulators, language runtimes, platform reimplementations like Darling, etc.

    JITting Rust isn't conceptually very hard: you just take rustc and make everything dynamic instead of static. The only thing that was stopping it before was the sheer amount of effort. Well, now we have a way to reduce that effort.

baq 51 minutes ago

Common Lisp lurks in the shadows, watching its own reinvention comfortably, yet another time

Surac 2 hours ago

moving errors from compile time to runtime is good?

  • jtwaleson 2 hours ago

    For some use cases, like speeding up local development, it's an excellent trade off.

  • andix 1 hour ago

    For quick iterations it's perfectly fine. Change something, see if it works. If it doesn't keep changing until it works.

    In runtimes that provide quick dev loops some developers have continiously running unit testing sessions. They just fire off every few seconds and give intimidate feedback.

tontinton 2 hours ago

The world really needs something like this, but why such a slop UI website.

Just tell Opus 5.5 to "redesign the UI to not look like AI slop, design it like a human expert designer would" at bare minimum.

  • poly2it 1 hour ago

    Perhaps a cynical take, but I feel sloppy content advertised seriously is enabling a transparent form of cross-domain self-selection which can be interesting to observe from the outside.