Was Porting To Rust A Mistake?

Поделиться
HTML-код
  • Опубликовано: 4 окт 2024
  • I'm not the biggest fan of Go, but I'm also not the biggest fan of unnecessary rewrites. Turborepo is one of the most important parts of my toolchain lately, so I have lots of reason to be skeptical.
    Follow up coming soon!
    SOURCE
    vercel.com/blo...
    Keywords RUST GO GOLANG TURBO TURBOREPO TURBOPACK NEXT COMPILER BUILD MONOREPO TOOLS
    Check out my Twitch, Twitter, Discord more at t3.gg
    S/O Ph4se0n3 for the awesome edit 🙏
  • НаукаНаука

Комментарии • 274

  • @LtdJorge
    @LtdJorge 6 месяцев назад +169

    Rust is already doing incremental compilation. It only compiles what changed, but since your crate is an entire binary with all dependencies statically linked, it at least needs to recompile your crate and link it
    There's a trick by wrapping big dependencies in a dynamic library so it doesn't need to relink or recompile your crate if the dependency changes.

    • @jenreiss3107
      @jenreiss3107 6 месяцев назад +14

      this is something that rust needs to take from ocaml: module level compilation. because rust builds objects at the crate level, it means that you're more often going to get cache invalidations at the compile step, whereas with ocaml if you change one module within a library it's not going to force a recompilation for the whole library

    • @LtdJorge
      @LtdJorge 6 месяцев назад +7

      @@jenreiss3107 yeah, it's the biggest limitation for compilation times right now, IMO. However, if your machine is powerful and only your crate is invalidated it's kinda quick, using the mold linker it takes some seconds in my case.

    • @クールなビデオ
      @クールなビデオ 6 месяцев назад +6

      All we ask for as rust community member is a crumb of integrity , theo you should put more care and do some basic research like this is really bad and it could harm your brand.
      Second point people can feel free to write dev tools in Go ,but constantly bashing rust devs trying to improve devs tools is really weird and you're basically doing the same things that some dumbasses that keep spamming rewrite in rust everywhere .
      If you think that you can deliver better result in other language please go ahead we will support you but guess what (this is what linus realized too) you have to give people incentives to get them involved so there's that reality you have to reckon with too

    • @ethanwilkes4678
      @ethanwilkes4678 6 месяцев назад +4

      You’d think he’d at least do some basic research.

    • @uoweme5grand
      @uoweme5grand 6 месяцев назад

      Yea I think crate is the smallest compilation unit. Bigger projects tend to get divided into smaller crates so the incremental build can just be done on the crate that got changed. Although the initial build would still take a long time. I believe this is because of a lack of stable abi in rust and everything needs to be built from scratch (including the direct dependencies and the transitive dependencies). I am not too sure but I think most of these are cached? (with the exception of some libraries that have some special build logic that disqualifies them from caching).

  • @jancartman321
    @jancartman321 6 месяцев назад +305

    Having used Rust and Go for a good amount of time, the reason I would always choose Rust for tools like this is not performance, but correctness. Rust is quite a pain to learn and even if you can code Rust "good enough" it always takes longer to get the job done. But the results are remarkably more stable and reliable than what you get from other not so strict languages.

    • @jenreiss3107
      @jenreiss3107 6 месяцев назад +29

      this is incredibly valid. when I am writing a new feature at work, if the serialization/deserialization works and I've written unit tests for it, I can be 99% sure that the feature works in production--the only thing that could be missing is a business logic bug, which is soooooo much easier to debug than a race condition or a deadlock. don't get me wrong, rust has both, but in the course of every day dev my company has seen one deadlock in 10 months

    • @moodynoob
      @moodynoob 6 месяцев назад

      One of the Turborepo devs said the amount of issues being filed in Github and dropped so drastically they momentarily were concerned that they had lost users (which was not the case). Being able to ship with confidence is an important factor when building low level tooling.

    • @erewnoh
      @erewnoh 6 месяцев назад +19

      At my company different teams use different languages to build the products they’re responsible for. I’m lucky enough to be on a team that uses Rust for all of our projects except for when we MUST use another language (like writing a JDBC driver). I honestly don’t think rust slows us down at all. Maybe we sandbag on our objectives but we’re always ahead of where we say we’ll be and ship faster than other teams using Go, C++, etc…

    • @kalasmournrex1470
      @kalasmournrex1470 6 месяцев назад

      Correctness is number 1, but also
      Basically everything in Go sucks. Go is a terrible language that looked at 40 years of programming language advancement and said "nah, we wrote C, and that's good enough". The go creators actively said "we are smarter than everyone else who does PL, and to prove it we will create a language with no features except go routines". DRY is nearly impossible in Go. If I never have to type "if err != nil { return nil. err }" again, I will die happy. I agree that exceptions are bad, but they decided to create a system that is even worse than exceptions. Implicit interfaces are also stupid. They offer no advantages but make it impossible to have default functionality, another crucial aspect of DRY. Everyone has already whinged about generics enough that go decided to add them, using a design somehow even worse than Java's.
      My only real complaint about rust is that async is a mess.

    • @OctaviusPelagius
      @OctaviusPelagius 6 месяцев назад +17

      Serious question. What in Go makes it not as correct or harder to enforce correctness?

  • @_aryan_570
    @_aryan_570 6 месяцев назад +84

    Yes, we need a followup video.

  • @dealloc
    @dealloc 6 месяцев назад +63

    I understand the points Theo is trying to make and they are valid in their own right, _if_ their actual reasoning was the main point of their decision to port. But they already wrote back a post a year back with their rationale behind their strategy to port. And the first point was that the project had scaled so much that correctness was of crucial importance. Go's loose types and error handling made it hard for them to ensure they shipped correct software to users. This is especially a problem when you deal with I/O and async and ship software that are installed by people individually, rather than running them on servers.
    Also I don't think comparing esbuild and Turborepo makes much sense. They are wildly different projects with different requirements. Esbuild is immensely powerful and fast for development builds, but does not surpass things bundlers like Rollup for shipping production-ready code-and it is not it's goal to as Evan has already stated. This is why Vite uses either of them, depending on the environment.
    Turborepo on the other hand has to work beyond just individual projects; it has to work and scale for very large monorepos, with multiple apps, packages and dependencies-so the scope is much different from a build tool.

  • @ehutch79
    @ehutch79 6 месяцев назад +52

    The whole JS/TS community needs to take a step back and objectively evaluate whats involved in building a web app.

    • @electricshmoo
      @electricshmoo 6 месяцев назад +9

      None of this project made sense to me. As soon as you're "compiling javascript"... something has gone wrong.

    • @SandraWantsCoke
      @SandraWantsCoke 6 месяцев назад +4

      What, are you telling me I should not be using all the 300 great packages only 40 of which are outdated?

    • @perc-ai
      @perc-ai 6 месяцев назад

      the future is rust and JS developers keep doubting it.

    • @ehutch79
      @ehutch79 6 месяцев назад +2

      @@perc-ai Isn't the whole thesis of the video that JS developers are TOO all into rust?

    • @perc-ai
      @perc-ai 6 месяцев назад +5

      @@ehutch79 Too much business logic is written in JS and the language is too loose, theres no way to debate this. Rust is the future of software as of now.

  • @RedPsyched
    @RedPsyched 6 месяцев назад +101

    As much as I love your videos, I felt that the points raised in this video/stream were, while valid, exaggerated due to a personal bias against Rust or migrations to Rust specifically. As turbo users, yeah we didn't get much in a long time, but in speaking of this you unintentionally hide that the performance being significantly better isn't also a "feature" that us users benefit from? Yeah the time it took for that performance benefit and the cost of not having other features is what's being pointed at, but that's opinionated; it depends on what a user deems to be worth it and what the team does as well.
    Definitely need a followup video; Rust wasn't done justice here.

    • @SteinCodes
      @SteinCodes 6 месяцев назад +11

      I am more concerned about just Theo's knowledge on the topic, I used esbuild in 2020 it had hardly enough features and support compared to turbo, it took over a year for esbuild to be usable in production for large projects.
      Then there is also the huge performance and code quality changes that needed to be made during the process of 15 months, and lastly most people who start Rust projects don't really know Rust as well atleast not all of the team is on the same level, whereas in Go there are hardly any design decisions around architecture to be made, it's all just bad, you won't really gain performance because you spent 30 mins extra adding generics.
      Eg, HMR for JS is still not supported in esbuild (out of scope apparently). Also Lazy bundling and incremental computation.
      I mean I am not sure if Theo is uninformed or just disingenuous. Turbo has more features, and they have kept up to date with ecmascript changes in the last while and also improved docs and code quality overall substantially. Further they have kept the product working, shipping bug fixes and incrementally improving performance. 15 months for all this is pretty good even assuming there wasn't a language switch, I have seen teams spend 6 months or more on refactoring and such.
      Either way as someone who has written millions of lines of Rust, Go and also less but still a huge amount of Typescript it's practically a nonsense video made to stroke ones ego about how they are correct by making their own interpretation of facts.

    • @gearboxworks
      @gearboxworks 6 месяцев назад

      @SteinCodes - *Millions* of lines of code? 🤔

    • @SteinCodes
      @SteinCodes 6 месяцев назад +2

      @@gearboxworks I have been coding for last 8 years, in college I wrote everything from databases to game engines and more. Then a few years professionally in multiple startups. From compilers & parsers to services and machine learning models and apps.
      And same for Go but mostly after getting jobs stuff like k8s plugins, controller, or big micro-services(didn't feel micro after putting all the effort).
      And lastly there are lots of tests, so many tests. Purely pain but worth it if it kept prod safe.

    • @gearboxworks
      @gearboxworks 6 месяцев назад

      @@SteinCodes - Let's do the math. Assume one line every 30 seconds. 40 hours a week. No breaks. Nonstop for 8.33 years. That is what it would take to have written "millions of lines of code" (I noted your plural, so 2 million at least.)
      And you have been coding for (only) 8 years?
      You made some reasonable arguments, but then you leaned into an appeal-to-(your-own)-authority rather than let your arguments stand on your own and revealed your claims to be just another person's likely-biased opinions. I kinda hoped by commenting you would show some humility and say "Yeah, sorry for my hyperbole" but since you didn't I assume you don't recognize it as such.
      BTW, I have been coding for over 30 years, most recently 5 years with Go, and I doubt I have yet to write 1 million lines of code. But if I had written 1 million+ lines of code that would mean I spent way too much time writing code and not enough time deciding what code should be written. 🤷‍♂️

    • @SteinCodes
      @SteinCodes 6 месяцев назад +1

      @@gearboxworks if it wasn't obvious it wasn't literal dozens of millions of lines of coding. Nor was it "I know better than Theo". I don't know as much as Theo in most stuff probably, but I just wanted to state I have written a lot of Rust and Go and worked on fairly huge projects, and haven't found a single useful point being discussed in the video from my experiences.
      Also I am not sure where the figure 40 hours comes from, I have worked for way longer than that, just my first year college project is over 100K lines. And then there were my summer projects, bachelor's projects and even multiple research projects. None of this includes the amount of code I rewrite or throw away, or code golf or LeetCode.
      From my perspective I am not sure how after 30 years you may not have written tens of millions of lines of code.
      It might be unhealthy but for me for the last 6-8 years my work, hobby and relaxation have all been coding. And I don't feel like it will change in any significant way any time soon.

  • @o__sama
    @o__sama 6 месяцев назад +81

    The main reason in adopting rust is adding features without breaking existing stuff, it is the guarantees rust gives in producing correct code, it is not just about the strict system, it is also the immutability by default, the no sharing mutable state semantics, it is the match pattern, the amazing error handling, the need to usually write pure functions ... Your view of rust is too shortsighted.

    • @kamikaz1k
      @kamikaz1k 6 месяцев назад +10

      It’s not short sighted, he’s oriented towards experimentation which has to be shorter time horizons. So to his point, backwards compatibility is less important than pace of experimentation and delivery of value. You’re right in that they’re different values, but wouldn’t you agree that the JS ecosystem values are vastly different from Rust ecosystem?

    • @perc-ai
      @perc-ai 6 месяцев назад +2

      hes a JS dev give him a break. He doesnt realize the future of web is rust...

    • @icesentry
      @icesentry 6 месяцев назад +10

      @@kamikaz1k Yes experimentation is different, but turborepo is not a product based on experimentation so I don't know why that should be the target.

    • @CatFace8885
      @CatFace8885 6 месяцев назад +5

      @@perc-ai not gonna lie bro, you could've used a better argument than actual ad hominem

    • @chrisdaman4179
      @chrisdaman4179 6 месяцев назад

      Rust freaks keep saying "correct code" like that is even a thing that exists. The language is the programming equivalent of a Communist utopia. It's not realistic or practical.

  • @DaffyDuckTheWizzard
    @DaffyDuckTheWizzard 6 месяцев назад +6

    Quite frankly this entire piece is just a testament of how truly powerful Zig is
    Just imagine when we get the Zig Zag update lmao

  • @geoffreygordonashbrook1683
    @geoffreygordonashbrook1683 6 месяцев назад +6

    Would love to see the followup video. Many thanks for great discussion and hearing from the Rust devs. (So interesting to see how zig is being used...)

  • @eldarshamukhamedov4521
    @eldarshamukhamedov4521 6 месяцев назад +6

    "We came in thinking we could refactor while porting." Ooof... been there. Never, ever mix refactoring with moving/porting/decomposing code. Doing both at the same time isn't porting, it's rewriting from scratch, and it almost never goes well. It's super tempting because no one wants to bring unwanted behaviors from the old code base to the new, and no one wants to refactor old code in place first, but you, and your team, and your company, will all suffer if you jump the gun on this.

  • @erikfundercarstensen7344
    @erikfundercarstensen7344 6 месяцев назад +5

    Rust does do the trick of not compiling things which hasn't changed, it is described as "Incremental Compilation". This doesn't solve the first build of a program, or the time a release build takes in CD, but when working on a Rust project, it isn't _as_ bad. A bigger "problem" is that Rust allows, and the community has embraced, monomorphized generics as the main kind of polymorphism: It is really good for performance, and really bad for compile times.

    • @lame_lexem
      @lame_lexem 6 месяцев назад +3

      ci/cd builds still can use incremental compilation
      tho it is complicated to setup

    • @erikfundercarstensen7344
      @erikfundercarstensen7344 6 месяцев назад

      @@lame_lexemI have gotten that to work locally with cargo-chef and a multi-stage docker build, but sadly my company is on GCP where it doesn't work. We have also tried with their Kaniko cache, but haven't been able to get it to work.
      Please if you have a solution, share it, takes 6 minutes from push to deploy, which is just short enough that you don't want to start something else while waiting, but long enough that it's painful 🥲

    • @houstonbova3136
      @houstonbova3136 Месяц назад

      There’s a general lack of understanding the difference between compressing a bunch of JS libraries based on import statements and evaluating a program to optimize size, performance, and debugging based on lifetimes and utilization.

  • @elvispalace
    @elvispalace 6 месяцев назад +46

    Go has better developer experience, but for a bundler, we should push to the maximum. So Rust is the best choice. It's not like every frontend developer should master rust to create websites, so the people behind turborepo can spend a lot of time in it. We already have many bundler btw

    • @tinrab
      @tinrab 6 месяцев назад +29

      I think Rust has better developer experience. Go is just easier to learn.

    • @mikhalpalych
      @mikhalpalych 6 месяцев назад

      fight

    • @kcable194
      @kcable194 6 месяцев назад +3

      Go is much better than Python, Java, or JavaScript but I’d say Rust is on top for me

    • @tinrab
      @tinrab 6 месяцев назад +4

      @@kcable194 Depends on what you're doing, as always, right? :) JS is great for UI, Python for ML, AI, data science, etc., Imo, Rust is great for services, long-lived infra tools (like DBs, proxies, message brokers...). I don't like Go, but it's good for tools, where GC isn't an issue. Although, personally, I prefer Rust.

    • @kcable194
      @kcable194 6 месяцев назад +4

      @@tinrab oh for sure, totally agree. I was thinking mostly about toolchains, correctness, refactoring large apps, and ease of deployment. Every language has its strengths and use cases!

  • @JohnPywtorak
    @JohnPywtorak 6 месяцев назад +4

    @Theo you can install rust / crate binaries and bypass the build, it exists, one such example is the crate cargo-binstall and cargo-quickinstall, pick best for you.

  • @tinrab
    @tinrab 6 месяцев назад +50

    The reason they moved to Rust isn't because it's Rust. The author even said this. There are plenty of benefits to using Rust over Go.

    • @OctaviusPelagius
      @OctaviusPelagius 6 месяцев назад +9

      Like...?

    • @VachicorneOld
      @VachicorneOld 6 месяцев назад +2

      Theo is making a completely strawman argument here.

    • @tinrab
      @tinrab 6 месяцев назад +4

      @@VachicorneOld He just doesn't like Rust, which is a shame. I'd be really cool if he learned it. The argument of shipping fast is fine, but not all software needs to be developed like that. And comparing turbopack with esbuild is fine, but esbuild already exists, so what's the problem? If you're gonna build a new transpiler/bunder make it better/faster than that.

  • @ISKLEMMI
    @ISKLEMMI 6 месяцев назад +20

    Go is the single easiest language to learn and move fast in. Nothing else comes close. Not even TS/JS.
    However, Rust does not rebuild everything all the time, like you said. Incremental compilation time are... fine but not good. It is orders of magnitude faster than TS/JS at runtime in real-world applications and produces much more sound code than Golang (or any scripting language like JS), but it is much slower to iterate in.
    You may not always nail all the details, but your intuitions are almost always right. Good video!

    • @milomaz1
      @milomaz1 6 месяцев назад +3

      and the fact that go recompiles so much every time, and it's STILL fast is insane. Really I haven't found a need to get a faster binary in production so far so the iteration of Go wins by far for me

    • @dbug64
      @dbug64 6 месяцев назад

      @@milomaz1 I see Go as a Pascal dialect but with curly brackets. In the 80's, adverts for Pascal compilers always had numbers in them. 80000 lines per minute*
      * = on a 6Mhz 8086 PC clone.
      Niklaus Wirth, inventor of Pascal et al, was famous for not adding features to the compiler if it didn't make the compiler faster compiling itself. Look up Wirth's Law to see his thinking.
      Go isn't bringing anything new to the table. What Pascal had back then works just fine, adding a GC makes it even easier to code in. Google could have left that out IMHO. But to me and many others, Go feels too simplistic and the error handling, well, better than exceptions I guess...
      One could argue that Rust isn't really advancing anything either. It's like a low-level ML dialect, but without GC. But the mix of advanced old features is about "just right" for the time we live in.

  • @VachicorneOld
    @VachicorneOld 6 месяцев назад +4

    Theo, I like you, but I think you are making a strawman argument here.
    1 - Rust has incremental compilation, while it is slow compared to Go, if you don´t know that Rust has incremental comp, maybe you should learn your subject before.
    2 - If you summarize their reasons to move from Go to Rust only because "they wanted to move to Rust", maybe you have not completely understood their position and reasons.
    I think that your opinion here is quite biased, your mindset is gear toward fast moving and fast experimenting solutions, while Rust is more focused about correctness. The benefits of Rust go beyond speed (which in 99% of the cases will land marginal gains vs Go).

    • @dornexham
      @dornexham 6 месяцев назад +3

      He has a personal vendetta against Rust, the fact that he resumed every point they made in the article to “ackshually they just wanted to write rust because it’s trendy” is shocking and mind boggling. Biggest L take I’ve seen so far Theo 🎉

  • @petertillemans2231
    @petertillemans2231 6 месяцев назад +9

    I think blaming Rust for lack of movement is putting the horse behind the cart. I think they think turborepo is close to finished software and they want to tie it down to avoid sliding back in the future. I think they DECIDED to slow down and this decision opened the door to use Rust to effectively ensure stability for the long term.

    • @sp3ctum
      @sp3ctum 6 месяцев назад +1

      I think you put it very well. The expectation that you are able to produce new features while rewriting is crazy.
      Obviously the team saw it beneficial to move to rust from go, so I'm not sure if there's any problem here.

    • @lunakid12
      @lunakid12 5 месяцев назад

      @@sp3ctum "The expectation that you are able to produce new features while rewriting is crazy."
      But whose expectation was that? Definitely not of this video, if you meant that. Theo said new features _instead of_ rewriting (not "while").

  • @einargs
    @einargs 6 месяцев назад +25

    It's super cool that they used zig as a build tool. Also, "rewrites are almost always wrong" is the opposite of a spicy take.
    Comparing the initial write of a program to having to rewrite it while duplicating exactly various behaviors is not a good comparison though.
    Follow ups are great.

  • @taksuyu
    @taksuyu 6 месяцев назад +3

    Should definitely do that follow up video. My experience with languages like Rust is that yes it'll take longer to develop things initially. However, you will always have more wins when it comes to maintaining and refactoring code into the future and the velocity and correctness starts to compound over time.

    • @steveoc64
      @steveoc64 6 месяцев назад

      By “languages like Rust”, do you mean just Rust, or other compiled languages that don’t necessarily have all of Rust’s downsides ?

    • @chrisdaman4179
      @chrisdaman4179 6 месяцев назад

      Not to be rude but I just don't believe you. Rust is one of the most difficult languages to refactor in. I genuinely believe most people have never actually attempted to build a real product grade product. Rusts entire point is study code. Study code is unchanging code. Unchanging code is borderline useless code.

  • @blankvoid4137
    @blankvoid4137 6 месяцев назад +24

    I am learning go. Loving it

    • @AdamFiregate
      @AdamFiregate 6 месяцев назад +6

      I use TS, Go, and Rust. 💛

    • @jancartman321
      @jancartman321 6 месяцев назад +1

      @@AdamFiregate me too, was about to respond with the same ☺

    • @jancartman321
      @jancartman321 6 месяцев назад +1

      Great idea to learn Go, but don't be too fast ditching Node (Typescript of course) 😉...

    • @tranquangthang8897
      @tranquangthang8897 6 месяцев назад +1

      I will say go has given me a paradigm shift and the learning process is extremely straightforward and fast.

    • @blankvoid4137
      @blankvoid4137 6 месяцев назад

      @@AdamFiregate Can't escape TS. Sadly, I gotta use TS for my work.

  • @remrevo3944
    @remrevo3944 6 месяцев назад +1

    Rust *does* do incremental compilation and most of the compile time is spend in LLVM (the thing that produces the actual assemby) anyway. (And it can be switched with alternative compiler backends like cranelift, which are faster in terms of compile time.)
    In terms of dependencies rust normally only caches on a per-project level, which means that new projects (like what you create in the background with cargo install) take a bit longer to compile.
    But that can be fixed by using sccache.

  • @jonnyso1
    @jonnyso1 6 месяцев назад +10

    Theo is a broken record at this point, for him how fast you ship something is more imoportant than everything else, fair enough, but I would prefer something that's reliable in this modern world for a change.

    • @chrisdaman4179
      @chrisdaman4179 6 месяцев назад

      Reliable is a moving goal post and rust is resistant to change. Rust is just too slow to develop and refactor to be useful. Build any app larger than your to-do lists, and it falls on its face every single time. That is why rust isn't gaining popularity as people attempt to adopt it. It's a false bill of sale.

    • @EmiNNsoNify
      @EmiNNsoNify 6 месяцев назад

      So just to get you straight you want a slow to change but stable tool for one of the most changing fields in CS/IT web development ( and especially JS/TS ). Well wish you and the people supporting this tool a lot of luck when the new hype comes around the block and they take 6 months to implement it only to find out the hype is already in it's dusk.

    • @jonnyso1
      @jonnyso1 6 месяцев назад

      @@EmiNNsoNify Who says its going to be slow ? If it is, by how much ? Talking about Rust specifically, I haven't found it to be very slow to change or iterate over, it gives you a lot of confidence that things won't break under you, the same reason why people use TS over JS, would you advocate the usage of JS over TS because it lets you move faster ? Probably not. Its about balance, and Rust in my opinion is a better option for anything other than frontend dev, even over Go, but thats just my opinion on my experience, if you look through the other comments here you'll find a mixed bag of opinions going either way. Rust is fairly new so the jury's still out, I get where Theo is comming from but I don't really agree with his take, sometimes to move forward you need to step back a little and regroup.

    • @martinpata2899
      @martinpata2899 6 месяцев назад

      ​@@jonnyso1rust isnt better than go for 99% of backend usages

    • @jonnyso1
      @jonnyso1 6 месяцев назад

      ​@@martinpata2899As I said, that's my opinion, maybe I just put more weight into the benefits Rust overall design gives.

  • @eukatastrophe
    @eukatastrophe 6 месяцев назад +3

    Yup, and he ignored the fact that they caught a number of undiscovered bugs in the Golang code.

  • @dtesta
    @dtesta 6 месяцев назад +2

    But Go already does cross-compilation? So why was that even an argument to switch?

  • @danielbrenot5173
    @danielbrenot5173 6 месяцев назад +1

    Theres a bunch of things you can do for incremental compilation of rust and just generally speeding up compilation times. Not the least of which is compiling in debug if you're just checking program behaviour and not performance. Unfortunately with at least one of my projects i need to compile in performance due to that usually being what we optimise for, but you can usually disable LTO linking and such for a very small runtime hit.

  • @lezzbmm
    @lezzbmm 5 месяцев назад +1

    18:50 i’d be rly curious to see character count comparisons
    go tends to rly tempt ppl to one-line things they shouldn’t
    also rust has more “boilerplate” (that’s not actually boilerplate bc it’s the minimal amt of tokens to disambiguify the code sufficiently for the compiler to make as-efficient of a binary out of the code as it does)
    but this “boilerplate” (amongst other things) saves devs hours in the long run by avoiding ambiguous code with complicated bugs even getting checked into git let alone pushed live

  • @r2_rho
    @r2_rho 6 месяцев назад +5

    Definitely going to need that follow up

  • @simonhartley9158
    @simonhartley9158 6 месяцев назад +1

    One of the reasons they needed to move off Go was in order to support Alpine Linux. It's deeply unfortunate that Go is only now (almost?) ready in this area with a significant bug fixed in the February 1.22 release while not even making the release notes!

    • @CramBL
      @CramBL 6 месяцев назад

      Go language developers already showed that they don't care about correctness, language consistency, and support for what they deem "niche" platforms like Raspberry Pi (fucking lol). They'd rather write a 150 page blog about the pitfalls of the Go language.

  • @jonas-mm7em
    @jonas-mm7em 6 месяцев назад

    Thanks for the video. I enjoyed the video and having another video to counter balance with a point of view on the people involved in the project will most likely be interesting as well IMO.

  • @elvispalace
    @elvispalace 6 месяцев назад +26

    Rust, Rust, Rust, Rust 💪

    • @lunakid12
      @lunakid12 5 месяцев назад +1

      OMG, all your 6th-grader classmates liked your comment, how cute!

    • @elvispalace
      @elvispalace 5 месяцев назад

      @@lunakid12 a

  • @dinushkam2444
    @dinushkam2444 6 месяцев назад +3

    No no you don't understand..
    engineers needed to do work....
    so they translated go to rust

  • @d3stinYwOw
    @d3stinYwOw 6 месяцев назад +2

    What about Nim language? I think it should be also considered besides Rust, Go and Zig for creating useful tools efficiently. It's like marrying simplicity of Python, strength of Ada, typing of OCaml, with sprinkle of crazy metaprogramming capabilities and interchange-able GCs. You can even drop one if you want.

    • @TJackson736
      @TJackson736 6 месяцев назад +2

      Nim shouldn't be considered a competitor for Go or Zig. Go is a simpler and non-OOP competitor to Java and C#. Zig is a C replacement. Nim, like Rust, is a C++ replacement.

    • @d3stinYwOw
      @d3stinYwOw 6 месяцев назад

      @@TJackson736 Not necessairly, since Nim is so flexible that you can compile it to C, C++, ObjC or JavaScript. Additionally, you can interchange GC. You can even use Go's one...
      Nim is a different category than Rust, Zig or Go, because you can tune code to be between all of them at the same time. Plus metaprogramming capabilities in Nim are really powerful.

    • @thepatzer
      @thepatzer 6 месяцев назад

      I really like Nim but am somewhat discouraged by the lack of developer adoption and momentum.

    • @d3stinYwOw
      @d3stinYwOw 6 месяцев назад

      @@thepatzer That's chicken and egg problem. Without people test-driving language there won't be any usage and/or adoption. Simple as that. Try it :)

    • @digitalspecter
      @digitalspecter 2 месяца назад

      Nim has leadership & community problems. It doesn't instill confidence in the future of the language.

  • @Kane0123
    @Kane0123 6 месяцев назад +3

    So Theo has negated the time Turborepo has saved? Gottem

  • @yiannis_p
    @yiannis_p 6 месяцев назад +1

    What a massive W take here. Very well structured and explained.

  • @wes2091
    @wes2091 6 месяцев назад

    would love to see the follow-up video, thanks for offering Theo

  • @infinitivez
    @infinitivez 6 месяцев назад

    Theo leaving us with cliffhangers?!? Aaaahhhh!
    OFC we need ANOTHER video, we have to know what the Rusties have to say now! Can't leave us hanging like this 😄

  • @Leto2ndAtreides
    @Leto2ndAtreides 6 месяцев назад +5

    Acme... Also in old cartoons.

    • @thepatzer
      @thepatzer 6 месяцев назад

      Important to know the classics.

  • @HUEHUEUHEPony
    @HUEHUEUHEPony 6 месяцев назад

    You can use rust with mingw as well, which is better because it's compiler is not propietary

  • @LucasOe
    @LucasOe 6 месяцев назад +1

    Personally, I don't think a fast development cycle is necessarily a good thing. I'd rather have features that take longer to ship if I can be sure they're stable and well thought out. I think the constant chase to "move fast and break things" is one of the biggest problems in the JavaScript ecosystem.

  • @houstonbova3136
    @houstonbova3136 Месяц назад

    It’s not more than twice as much code. They had Go and Rust already in the binary at this point so less than half the application existed to port. It’s likely it was more 1:1

  • @vinicchleme
    @vinicchleme 6 месяцев назад

    Love the video❣ Waiting for the follow up.

  • @nhwhn
    @nhwhn 6 месяцев назад +9

    Rust prevails 🦀🦀🦀🦀🦀🦀🦀🦀🦀🦀

  • @ermilburn02
    @ermilburn02 6 месяцев назад

    Definitely want to see this follow up

  • @blackmirroxx
    @blackmirroxx 6 месяцев назад +3

    I am moving from C++ to Rust. So the Error Handling is far suporior.
    $> rustc --explain
    Pretty need.

  • @JohnPywtorak
    @JohnPywtorak 6 месяцев назад

    Please do the follow up, because I as well don't think you had the right angle and flat wrong with certain items; However, the general critique was not unfair and a good question to ask.

  • @ceigey-au
    @ceigey-au 6 месяцев назад

    I definitely feel like NextJs is the odd framework out now avoiding Vite.
    IMO Nuxt and Hono (as it expands with HonoX) have some of the nicer architectures. Basically a composition of vite plugins and WinterCG middleware 😅

  • @razzeeee
    @razzeeee 6 месяцев назад +2

    Should have been haskell, sorry not sorry.

  • @dragenn
    @dragenn 6 месяцев назад

    More videos please. Im in the mist of choosing Rust, Go, or C#.

  • @dobremordy1676
    @dobremordy1676 6 месяцев назад

    When you dress up a code rewrite like this, then any migration never made sense. Rewriting code always takes time and you don't want to release more functionality then. Not to mention that you can only evaluate the rewrite itself when they start creating functionality without the baggage from the process itself.
    Also, not every rewrite is to make the product faster or more functional, stability and scalability over time are also reasons for rewriting.

  • @ccj2
    @ccj2 6 месяцев назад +1

    did anyone else notice the number of hours saved go up by 1 at 2:43?

  • @lastink444
    @lastink444 6 месяцев назад

    oh we sure need a followup video on this

  • @kamikaz1k
    @kamikaz1k 6 месяцев назад +2

    The JS ecosystem values are vastly different from Rust ecosystem. Rust software is much closer to bulletproof software than application software. Go on the other hand is designed precisely for minimal complexity, which lends itself to experimentation well.
    Not everything needs to be correct. But most things benefit from being faster (both to write, and to run).

  • @yassirhassan2063
    @yassirhassan2063 6 месяцев назад +1

    Probably Go is more than enough for any JS dev tool. Rust is good when you need to squeeze the last bits of memory and cpu cycle.

  • @Fanaro
    @Fanaro 6 месяцев назад

    21:15 I think this type of assess could much better be discussed in an interactive interview with the Rust people from Vercel. Have you tried contacting them?

  • @lukq90
    @lukq90 6 месяцев назад +10

    I'm wating for Rust to Mojo migration

    • @cysia3683
      @cysia3683 6 месяцев назад

      what would be the benefit?

    • @lukq90
      @lukq90 5 месяцев назад

      @@cysia3683 It was a joke ;)

  • @abiiranathan
    @abiiranathan 5 месяцев назад

    Am currently at war with the mighty borrow checker! I hope I conquer it

  • @goraxe01
    @goraxe01 6 месяцев назад +1

    I'm definitely interested in the follow up. My take is there was a little bit of 'not invented here' and some naivety around opportunity cost.
    Seen it many many times new team takes over a system project, code is critised and a rewrite is proposed sometimes its justified, sometimes the rationale can be shakey.
    A consideration to think about is skillset of team vs market rate of engineers as they attrition out

  • @Satook
    @Satook 6 месяцев назад +1

    Totally agree Theo. Huge amount of effort spent delivering a total non-feature that *might* allow them to move more quickly.
    With how slow iteration is in rust due to compile speeds and design intrusive types, I really doubt their dev speed will increase.
    Hopefully I’m wrong.
    It’s really telling that while porting the entire codebase no significant improvements were noted to call out.

  • @TurtleKwitty
    @TurtleKwitty 6 месяцев назад +2

    Moving to rust could have made sense if there were performance bottlenecks, but it felt more like a rewrite the libraries in rust and call into from go, not fullrewrite right off the bat for no gain?
    Say the hashing, that's offen a memoery thrashing operation casue of how much memory you need ot run too, moving that part to rust makes perfect sense to not have GC work, but does the rest matter? Who know?
    What could have been interesting in typescript projects would be moving to assembly script and compiling /that/ to see how well the transition to native speeds go ?

  • @briankejlberg7563
    @briankejlberg7563 6 месяцев назад

    I don't find the comparison of the esbuild readiness because of go vs. a working project in go rewritten in rust while maintaining a working project in go. If you should comare this in a more fair manner, you should probably have compared it to swc, which was written in rust to begin with, the swc project has its own "unfairness" too it - as it aims to be a drop-in replacement for babel, so the API was "fixed" and not designed to be easy from a rust perspective.

  • @jenreiss3107
    @jenreiss3107 6 месяцев назад

    he built the project and ran a LoC tool on the repo--of course it's going to be higher, it's including all of the source from the libraries they used in the `target` folder

  • @RandomGeometryDashStuff
    @RandomGeometryDashStuff 6 месяцев назад

    10:26 environment variables compiled in code???
    aren't environment variables decided by program that executed program (look in execve man page for linux, don't know about windows)?

  • @SamualN
    @SamualN 6 месяцев назад +5

    Zig mention!

  • @atikenny
    @atikenny 6 месяцев назад +1

    I am so glad that you focused on the ROI aspect in this video. It rarely gets mentioned in blog articles about such big shifts in technologies / frameworks. They are mostly only about the challenges and benefits of the "rewrite". I am looking forward to your reaction to the reaction video about the same topic, because I cannot imagine how burning ~1-2 M USD of engineering time will be worth it compared to the solution in Go.
    On another note, I don't agree that this is not the responsibility of the engineers who think about such changes to know if its worth it. I believe it's one of the most important aspects of being an engineer to think about the tradeoffs, technical or financial. It _is_ part of your job to know when the business will realize the value that you will spend on the change, and if the answer is never: stay with Go.

  • @SandraWantsCoke
    @SandraWantsCoke 6 месяцев назад

    I don't see from the article why the moved over to Rust. It's the Enums? :D

  • @flufster777
    @flufster777 6 месяцев назад

    "we're not moving forwards here" -- yes, crabs primarily move sideways.

  • @lezzbmm
    @lezzbmm 5 месяцев назад

    25:10 whoa ok that’d be rly cool

  • @johnnguyen1826
    @johnnguyen1826 6 месяцев назад +2

    I honestly never understand why they migrated to Rust. Theo made good points!

  • @kalasmournrex1470
    @kalasmournrex1470 6 месяцев назад

    We wrote a compiler in rust in 1/4th the time it took to write in go. Depends one what you are writing. Also, every line of go I write makes me hate myself.

  • @toifel
    @toifel 6 месяцев назад +1

    I'll just build my own JS tooling on PHP because F it at this point

  • @themcc1879
    @themcc1879 6 месяцев назад +2

    Big Rust energy. But to be serious, this feels like a change because of technical reasons kind of move. Like knowing you missed the exit so you turn around immediately at the next rest stop. I doubt it is a golang problem because someone out there can make it happen. Whatever it is they need to focus on the goal not the implementation. As a programmer I focus on implementation but my higher ups care about goals.

  • @andrewgrant788
    @andrewgrant788 6 месяцев назад +1

    Just write everything in C++

  • @anthonyshewww
    @anthonyshewww 6 месяцев назад

    The follow-up video with the corrections will be very important. 😄

  • @unl0ck998
    @unl0ck998 6 месяцев назад

    Its hard to see a ROI of 2 years of a team of engineers thats shorter than the lifespan of turborepo. Specially playing catchup due to lack of progress during that rewrite.

  • @adaliszk
    @adaliszk 5 месяцев назад

    I kinda wish that sometimes when you do start a rant, just google first, just in case your knowledge is outdated already.

  • @javiasilis
    @javiasilis 6 месяцев назад +1

    I think the talk we should all be having is how impressive is Go with such a small footprint able to achieve so much.

  • @moodynoob
    @moodynoob 6 месяцев назад

    Guy who ran away from using Go says everyone else should stick to it 😂

  • @micmine
    @micmine 6 месяцев назад

    I am interested in the followup

  • @ilyamurashov
    @ilyamurashov 6 месяцев назад +1

    But how many millions of hours were spent trying to set it up and then maintain?

  • @drewhjava
    @drewhjava 6 месяцев назад +1

    Imagine just using Vite.

  • @Luxalpa
    @Luxalpa 5 месяцев назад

    "Follow up coming soon!" like when?

  • @edsonsantos7372
    @edsonsantos7372 6 месяцев назад +9

    100000... more like 25000 since 75% probable will be "if err!=nil{ log.Printf(err)}"

    • @kalasmournrex1470
      @kalasmournrex1470 6 месяцев назад +2

      !=, but yea :D

    • @jonnyso1
      @jonnyso1 6 месяцев назад

      To be fair rust will be 75% of ?, map, and_then, or_else, match and you'll like it !

  • @sk8ersteve
    @sk8ersteve 6 месяцев назад

    @2:37 so what you’re saying is devs will no longer have time to watch your videos

  • @voidmachines
    @voidmachines 6 месяцев назад

    I think you should invest some time to understand some fundamental. Your opinion is valid but it's an end users opinion always wanting more instead of wanting a better experience

  • @RandomGeometryDashStuff
    @RandomGeometryDashStuff 6 месяцев назад

    11:40 tar format with compression?

  • @maninalift
    @maninalift 6 месяцев назад

    Gotta watch out for a cache-hash mishmash mismatch !

  • @roodood
    @roodood 6 месяцев назад +3

    tl;dr: we wasted a bunch of VC money lol

  • @EusebioResende
    @EusebioResende 6 месяцев назад +1

    Over-engineering?

  • @omojjegomosc8211
    @omojjegomosc8211 6 месяцев назад +1

    I regret that Zig isn't getting more hype.

    • @omojjegomosc8211
      @omojjegomosc8211 6 месяцев назад

      @fried-chicken-448 I'm talking in general about the situation in tech, not Vercel.

    • @fsharplove
      @fsharplove 6 месяцев назад +1

      Since I discovered F# I am more excited by not hyped language. If Zig is not getting more hype I need to look at it. Haskell and Ocaml seems interesting too. F# being very good I expect Ocaml and Haskell to be good too (ML family)

    • @omojjegomosc8211
      @omojjegomosc8211 6 месяцев назад +1

      @@fsharplove FP languages aren't popular so this is nothing new.

    • @cherubin7th
      @cherubin7th 6 месяцев назад +1

      At least it gets segfaults.

    • @digitalspecter
      @digitalspecter 2 месяца назад +1

      @@fsharplove I think F# is one of the best "corporate" languages.. Learning Haskell is definitely mind expanding :)

  • @RobertSelberg
    @RobertSelberg 5 месяцев назад

    2:39 Sooo, your saying that you have nullified all the hours turbo has saved humanity.. 😉

  • @wobsoriano
    @wobsoriano 6 месяцев назад

    Imagine if they just use Vite and wait for Rolldown

  • @TheVigilantEye77
    @TheVigilantEye77 2 месяца назад

    Rust rust we must !

  • @levabala4922
    @levabala4922 6 месяцев назад

    nice video thumbnail!

  • @MRAMAZRBALLZZ
    @MRAMAZRBALLZZ 6 месяцев назад +142

    Kind of sucks that this channel is just making money from reading other people's hard work

    • @jacobmars1902
      @jacobmars1902 6 месяцев назад +44

      same as the primeagen

    • @blyxyas
      @blyxyas 6 месяцев назад +68

      Well, for me Theo is kinda a news channel. It keeps me updated with whatever happens in the programming world, + gives a lot of points and opinions from someone with more experience. It’s a learning experience

    • @MRAMAZRBALLZZ
      @MRAMAZRBALLZZ 6 месяцев назад +3

      @@jacobmars1902 don't watch him either

    • @MRAMAZRBALLZZ
      @MRAMAZRBALLZZ 6 месяцев назад +12

      @@blyxyas I used to like him for that but now he doesn't actually do anything but read articles, there is no added information. Just easier to read the article myself I find.

    • @rasibn
      @rasibn 6 месяцев назад

      ​@@MRAMAZRBALLZZit's a news channel. You watch to stay updated about webdev.

  • @boredstudent9468
    @boredstudent9468 6 месяцев назад

    Why are you all incapable of just keeping your repos to manageable sizes

  • @guidomaruccib
    @guidomaruccib 6 месяцев назад

    Make follow up video

  • @СлаваВолошин-ы3с
    @СлаваВолошин-ы3с 6 месяцев назад +4

    moving fast with Rust just not possible

    • @jcbritobr
      @jcbritobr 6 месяцев назад

      You need to look at fish shell. It is already completely ported from c++ to rust. 😂😂😂

  • @steveoc64
    @steveoc64 6 месяцев назад +1

    Just sounds like a classic case of Resume Driven Development
    They just wanted to pad their CVs with a Rust project, and attract VC funding for the next round

  • @fischi9129
    @fischi9129 6 месяцев назад +1

    nuxt mentioned

  • @lezzbmm
    @lezzbmm 5 месяцев назад

    18:00 bro doesn’t get it yet

    • @lezzbmm
      @lezzbmm 5 месяцев назад

      (still very interesting stuff but clearly theo doesn’t understand how rust is different as a paradigm shift in programming not a flavor of the month)