Port React Compiler to Rust

(github.com)

59 points | by boudra 2 hours ago

8 comments

  • molf 12 minutes ago
    After bun [1] this is another high-profile project that was ported to Rust by extensively using LLMs.

    Very curious to see how these rewrites play out. Is the LLM foundation solid enough to build upon and iterate on? Or does this cause projects to become unmaintainable because no person understands the implementation anymore?

    [1]: https://news.ycombinator.com/item?id=48132488

  • willsmith72 1 hour ago
    Are people actually using the react compiler?

    Haven't heard about since ages ago when it was extremely slow

    • molf 1 hour ago
      Yes absolutely.

      It's brilliant: all useMemo and useCallback can be removed and you get the same runtime performance and then some, at the cost of only a slight increase in code size.

      A small downside at the moment is the build time. This change will hopefully help address that because it will no longer depend on babel.

    • paavohtl 1 hour ago
      We have used React Compiler in production for a large ecom / media website for about a year. Performance has been fine overall, and we haven't ran into any major bugs attributable to it in that time.
  • Surac 50 minutes ago
    <something> rewrite to rust using AI sound like meme now.
    • giancarlostoro 35 minutes ago
      Speaks volumes to the strengths of the language, also speaks volumes that LLMs lift the barrier of entry for Rust programming, the borrow checker woes can be offloaded to the model, you focus on all the other programming logic.

      Whats funny is I had been using Rust more with Claude because of this, and before Anthropic did their rewrite of Bun I tried a Rust rewrite of a C# project I had laying around (.NET 3.5 from back in 2008) it wasnt perfect but its nearly there now, mostly for fun, and I did it because for a little while I realized LLMs can be useful for more serious refactors, and figured it might be good for a language rewrite. Sure enough.

      I think rewriting tooling that takes text and transforms it in a language like Rust is fine for JS projects, so is Go, which is why TypeScript is migrating to Go. The “free” optimized speed increases are worth it, at the temporary cost of dealing with the migration for a year or two, which with LLMs trims down the initial work into a week effort it seems? Wild.

      • fg137 27 minutes ago
        > you focus on all the other programming logic

        Does that actually happen?

  • ramon156 1 hour ago
    I think it's fine to experiment, just communicate with your users and make sure its opt-in.

    Seems like they kind of did that? The thread seems like people already were waiting on this, so that's positive.

  • Trung0246 1 hour ago
    Curious but can we use lean4 as port target instead of Rust?
    • bhy 45 minutes ago
      I don’t think lean4 compiled code is as efficient as rust. For verification purposes, there are some tools allowing formal verification of rust code.
    • jon-wood 1 hour ago
      I'm sure its technically possible, you might need to provide a bit more context if you expect anyone to change course here and port it to a programming language approximately no one has heard of rather than Rust though. What makes you think that would be a good idea?
      • koito17 1 hour ago
        > approximately no one has heard of

        Just cause it isn't used for webshit doesn't mean "approximately no one" has heard of it.

        Lean is pretty much the most popular language mathematicians use today for computer-assisted proofs. More mature audiences may know about Rocq, Isabelle, etc., but Lean was already popular enough for a few people I know to have written their PhD theses on it about a decade ago.

        I think GP is joking about a port to Lean because that would at least produce a formally verifiable output.

        • HeavyStorm 1 hour ago
          Oh, PhDs, you're right, that's not approximately no one... It's probably approximately one.

          I like Lean (and more generally dependent types) but ffs Lean has a very, very small userbase for a project like this. GGP would have to really justifyv the benefits for such a switch.

    • giancarlostoro 33 minutes ago
      Never heard of it, and I nerd out on programming languages. Reminds me of a convo yesterday with my coworkers where I noted I never heard of Sheerpower a language someone who worked there had done, and I have heard of languages so old and niche most people are shocked.

      My first programming interview my interviewer was like what the heck are you doing with D? And he noted he has a room full of devs where nobody knows what D is.

  • voidUpdate 1 hour ago
    What is the react compiler written in currently?
    • LoganDark 1 hour ago
      Uh, TypeScript?
      • iammrpayments 1 hour ago
        I think they use something called “flow” last time I’ve checked, it’s like typescript but when I went to visit the website with more information it was so slow it crashed my browser.
        • __jonas 1 hour ago
          Are you sure? The React compiler is a fairly new addition to React, Flow is Facebook's old alternative to Typescript, but Typescript won the ecosystem in terms of broad adoption in the end. I think Flow is barely used today, I would be really surprised if they choose it for a new tool, even for a Facebook project.

          You may be thinking about React itself, not the new compiler? I'm sure there must be some flow in there still from back in the day.

        • LoganDark 1 hour ago
          You may be right. I think Flow was a predecessor to TypeScript.

          I just checked out Flow and woah. First-class syntax sugar for React. Maybe cool. (If it doesn't break catastrophically in a sane build system like Vite)

      • voidUpdate 54 minutes ago
        Isnt the benefit of rust that it's memory safe? Is typescript not?
        • bandrami 47 minutes ago
          I think the benefit of rust here is that it's not hosted whereas typescript is
        • LoganDark 51 minutes ago
          The benefit of Rust over TypeScript is that Rust is faster.

          TypeScript is memory-safe, but you can't really control where the memory comes from. In Rust you have structs, traits, references and all sorts of things to control both your memory usage and your memory efficiency, and you just don't really get that in TypeScript. Plus, in Rust it's a lot easier to utilize multithreading -- JS is notoriously tedious to parallelize (message-passing between workers is a bit annoying compared to structured concurrency in Rust)

          • epolanski 32 minutes ago
            Quite sure performance and not memory safety is the issue here.
  • LoganDark 1 hour ago
    Why are they porting the Babel-isms? They should be using Oxc tooling directly, not hanging onto JavaScript parsers, IMHO -- isn't the benefit of porting to Rust that you can use fast native code?

    It seems backwards that they are freezing the Babel AST into the interoperability contract and only using the more efficient native representations in an isolated fashion -- shouldn't it be the other way around?

    • molf 55 minutes ago
      OXC is not the only consumer, so using the OXC AST wouldn't particularly make sense? I thought it was pretty well explained in the PR:

      > Note that the conversion from any AST into our HIR is complex, and we can only maintain one version. Hence we've aligned on using a Babel-like AST as our public API. Another key point is that we don't yet implement our own scope analysis (since the TS version of the compiler relied on Babel's scope analysis), so for now we require that the scope data be serialized. It's a denormalized graph, and some metadata has to be stored to associate nodes with scopes. We're open to feedback about the AST and scope representation - we iterated a bit just to get things to work, but it can be more optimal.

      • LoganDark 53 minutes ago
        I saw, I just don't understand the rationale for picking Babel over OXC or something else as the interchange format -- other than "we were already doing it this way". After all, you know what they say about temporary solutions.
        • molf 51 minutes ago
          So isn't not changing more sensible than changing to an arbitrary alternative?

          The current developers surely are more familiar with the Babel representation than OXC, so why switch?

          • LoganDark 46 minutes ago
            What I mean is, if you're going to rewrite it in Rust, why rewrite Babel rather than leaning on the existing ecosystem? I know they're not actually rewriting Babel, just reusing the semantic layout of its AST, but it's feeling a bit like the MediaWiki parser situation to me (roughly "if we started from scratch today, we wouldn't choose to have it this way, but we started a different way before, and it's been a difficult path to get to where we want to be"). Maybe that's a fairly remote analogy but it feels similar.
  • AbuAssar 58 minutes ago
    now we need to port angular compiler to rust!
    • flufluflufluffy 20 minutes ago
      We should compile Firefox to wasm, and run Firefox inside Firefox so we can Rust while we Rust