111 points hnisjafx40 2 hours ago 61 comments

AbuAssar 1 hour ago | parent

According to voidzero, this port is up to 8x faster than TS 7.0 & ~70% less memory.

Microsoft should seriously consider porting typescript to rust at this point

ndr 1 hour ago | parent

I wonder how more frustrating is it to work on the compiler in rust vs go.

IIRC at the time of the port to go they wanted fast test and compile time, of course it's a different era now.

lemagedurage 10 minutes ago | parent

That's interesting. A go version to iterate on the code and a rust version to run the code might be an optimal split here.

tgv 1 hour ago | parent

Idk. Apart from the fact that benchmarks are generally of questionable value, what's the point? Is the TS compiler unbearably slow?

eterm 1 hour ago | parent

Faster feedback loops almost always deliver improvements elsewhere.

TheMrZZ 1 hour ago | parent

The success of "modern" CLI tools written in Rust (uv, oxlint, turbopack) show there's a clear demand for faster tools in general.

Also, faster feedback loop is crucial for AIs, so I guess this makes sense.

pjmlp 1 hour ago | parent

What they show is that JavaScript should never have left the browser into the backend.

Don't rewrite into Rust, Go, Java, .NET, Zig, Odin, whatever.

Start with them directly.

ruther4d 1 hour ago | parent

They say the point in the article - WASM

msdz 1 hour ago | parent

(Not sure if this could be a genuine remark or is more of a joke, but)

Why not vibecode a Go -> WASM cross-compiler, then?

AbuAssar 1 hour ago | parent

Go needs a garbage collector while rust doesn’t.

msdz 1 hour ago | parent

Yes, of course, but couldn’t you have/make one in WASM too? (I have no clue how memory is allocated there)

jerf 54 minutes ago | parent

Yes, and when you ship a Go WASM package it is already included. But it has a certain impedence mismatch with WASM since it is rolling its own stuff that WASM can't see, I believe the performance is a bit less good than it could be, and it results in very large WASM packages for small amounts of code.

Since a typescript compiler isn't "a small amount of code", you'd have to see specific numbers on the final WASM assembly size to know how relevant that is. I'd expect well-written Rust code to beat well-written Go code on final assembly size by some amount, which may or may not be relevant to any particular use case (since in a lot of cases one "couple dozen megabytes" is much the same as another when it really gets down to it, it's not like Go is going to be emitting gigabytes to Rust's hundreds of kilobytes or something). However I can't judge what AI-written Rust code versus well-written Go code would come out as. AI is not terribly good at being concise (he said, while writing this post between prompts fighting with an AI to make a PR much more concise than it currently is).

Lvl999Noob 1 hour ago | parent

Wasm comes with a garbage collector though, no? So a garbage collected language that offloads all memory management to the runtime would actually be better than one that ignored the platform and does its own stuff.

zamalek 1 hour ago | parent

Apparently there were some design issues (raised and ignored) that made it unusable for many languages.

Tadpole9181 51 minutes ago | parent

The JVM alone has, what, 4 different modern GCs now? Garbage collectors aren't really universal, so they can pose different issues for different languages.

ZiiS 58 minutes ago | parent

You already can run the Go tsc in WASM using mature tools; but it further amplifies the memory and performance difference between the Rust version (which maps more cleanly onto WASM's design).

Tadpole9181 53 minutes ago | parent

1. Porting typescript is made easier by the enormous test suite they can copy for verification.

2. They're doing this for workers, so with a systems-level language, there's a much higher potential for CPU and memory savings (an order of magnitude on this first pass, apparently). Driving their compute costs down is very revenue-efficient at this scale.

tgv 36 minutes ago | parent

For workers, you only need to strip the types. There's no need to do the expensive checking.

Tadpole9181 30 minutes ago | parent

Did you read TFA?

> Just a few weeks ago we announced supporting native Rust in Workers with the new Emscripten target for wasm-bindgen. When you run entire software build and deployment systems in tight loops on Workers, the benefits of a small memory footprint pay off quickly.

aleksandrm 48 minutes ago | parent

I'm pretty sure they already considered it before settling on Go. Allegedly, they chose Go because it was easier to translate to.

Rapzid 37 minutes ago | parent

Up to 8x faster seems kinda of a crazy claim. 8x faster at what?! TS 7.0 is reasonably well optimized and compiles VSCode in well under 10 seconds..

This can type check and compile VSCode in less than a second?

rs_rs_rs_rs_rs 30 minutes ago | parent

Yes, it's in the article.

magicalist 16 minutes ago | parent

Well, no, not exactly. The article says vscode is compiled in 5.28s in typescript 7.1 (nightly), and in 1.73s in tsrs (dev), which is 3x faster.

lemagedurage 13 minutes ago | parent

For VSCode: 4x speedup vs TS 7, 3x vs TS 7.1

Leynos 1 hour ago | parent

So that's three now. This, tsgo-rs, and `bun check`

alexanderson 1 hour ago | parent

They mention in the post they are working with Theo to absorb tsgo-rs into tsrs.

Leynos 1 hour ago | parent

Nice. I missed that. This is good news.

Rapzid 34 minutes ago | parent

Why would they bother merging his vibe slop if theirs is better?

shimman 26 minutes ago | parent

Big tech looks out after their own. That's all there is to it.

tonyhart7 1 hour ago | parent

I thought its TS port of theo

AntonyGarand 1 hour ago | parent

Theo's port is tsc-rs[0] as reference, and is significantly slower and uses more memory than this new version.

[0] https://github.com/pingdotgg/ts-rust

francislavoie 1 hour ago | parent

A new one but they're merging it with Theo's.

retropragma 1 hour ago | parent

please support TSRX (https://github.com/tsrx-org/tsrx)

jdw64 1 hour ago | parent

These days the trend seems to be rewriting everything in Rust.

zeroq 55 minutes ago | parent

I'm staying stainless

jdw64 36 minutes ago | parent

Did you know? Even stainless steel RUSTs in sea wind.

egonschiele 1 hour ago | parent

It's exciting to see the speed gains. I use TypeScript every day on a large codebase, and it is too slow to run locally. I don't love this change though:

> However, frontier AI models can now do large-scale ports almost independently in a matter of days

> I wrote zero code. Not "barely any". Zero

So we are going to move from a carefully handwritten port to an entirely AI-generated port. I know this is the way the industry is headed, I use coding agents a ton. But I still review their output because they often don't make sound architectural decisions. Maybe this is a sign that my way of working is going away. I'm not sure how to justify that kind of time spent when someone can do the same thing in a matter of days with barely any effort.

I am working on my own language now, I've spent most of this year on it. The idea that someone could just replace it in a matter of days is wild. Wonder how the TS team at Microsoft feels about this.

TheSamFischer 1 hour ago | parent

> The idea that someone could just replace it in a matter of days is wild.

They didn’t design a language that millions of human engineers enjoy (?, lol) using. They took an existing codebase and ported it. Yes, the porting part is easier now but only because another project and spec exist.

egonschiele 54 minutes ago | parent

That's fair, I was thinking the same – porting must be simpler, especially if there's already a substantial test suite

FuckButtons 38 minutes ago | parent

While this is true - and I see the same sentiment as i am about to make ad nauseam - it is kind of amazing how far the goal posts have moved in such a short space of time.

TheSamFischer 12 minutes ago | parent

It’s not a goal post. It was literally a fucking benchmark of the very first LLMs.

onlyrealcuzzo 58 minutes ago | parent

If TypeScript has the integration testing framework in place to verify that the compiler actually works (and it should) - then, presumably, you should be able to swap in a Chinese Room black-box and - at least - know that it works.

You do have to be worried that it's possibly installing trojan horses on your computer while compiling code, or any other number of unwanted side effects.

But you can and should be able to have integration testing in place to know that a compiler - at a minimum - actually works.

egonschiele 52 minutes ago | parent

Totally fair. The thing is, though, agents often write code in ways I don't expect, and I don't think any human would write, which makes me think that code may also break in a way that no human expects or would have written a test for.

wannabe44 1 hour ago | parent

Y'all building the same thing.

frangonf 1 hour ago | parent

I use oxc tooling and it's great to see the rust rewrite singularity in action and get to ride the fastest horses, but I would like that they made a branch for 7.2 as experiment to see how it compares. Maybe this ends in a win for Microsoft, they could cut operating expenses by keeping just Anders Hejlsberg in a hammock reciting invariants to claudpilot.

norman784 1 hour ago | parent

I'm tired of all the new tools that comes out every day, but I would say, this is basically the Vite team and if they implement it with Vite+, then I'm all for it, less decisions about tooling to be made, one config file, etc.

nsm 1 hour ago | parent

Obligatory reminder that their needs from a TS compiler are extremely different from a regular web developers iteration cycle. They are trying to run millions of these while saving on costs.

You almost definitely don't need to immediately plan to switch.

cryptonym 47 minutes ago | parent

> This enables new possibilities when combined with agents: You are now able to run a development toolchain end-to-end in a fully sandboxed environment on Cloudflare.

True. Looks like main use-case is AI Agent Sandboxing

sheepscreek 52 minutes ago | parent

Ah took me a while to understand the reason behind this.

It wasn’t “let’s build a faster Rust based Typescript compiler” at all. That was a nice side-effect.

They needed a Typescript compiler that can run on their WASM only sandbox. So the only existing option was to export tsc Go to WASM, but that comes with the full Go runtime.

And to avoid that cost, they experimented with a Rust compiler and turns out it’s even faster than the reference tsc/Go implementation.

nitsky 34 minutes ago | parent

Another reason: type aware listing in oxlint.

anamexis 20 minutes ago | parent

Oxlint already has type-aware linting, integrated with TS7/typescript-go.

nalekberov 50 minutes ago | parent

Oh god, I wish this Rust fetishism would end soon.

DanRosenwasser 34 minutes ago | parent

Hey there, TypeScript team member here. The tsrs project has been extremely interesting to see come together. We've been working with the maintainers to better understand how tsrs is fast and what sorts of optimizations it uses are safe. We even did our own Rust vibe port and what we currently suspect is that a lot of the speed does not just come down to language choice, and some of what is going to make TS 7.1 faster and leaner (see the charts in the blog post) actually comes from optimizations discovered in tsrs.

We think the wasm and oxlint integration makes a lot of sense for Cloudflare's needs, so this investment makes sense. At the same time, we'll be working hard and collaborating to make the official TypeScript toolset faster and even more efficient.

Congrats to the tsrs team on making this official. We're excited and we look forward to continuing on collaboration!

egonschiele 29 minutes ago | parent

Thanks for the response and it is encouraging to hear that there's more to this project than vibe coding! Sounds like some interesting things were found in the process, and I'm all for vibe coding as a way to learn new things.

samuelstros 18 minutes ago | parent

At this point, why invest further in TSGO?

No matter how many optimizations can be ported from tsrs to ts-go, Rust will be more efficient and enable the WASM use case.

The premise of porting the compiler from TS to GO was ease of migration due to Go's garbage collector. That doesn't hold anymore? AI doesn't care how hard or easy a migration is if a test suite exists.

lemagedurage 17 minutes ago | parent

Thanks for the input, glad to hear both parties benefit.

Could you elaborate on what type of optimizations were added to TS 7.1? As in, were they more algorithmic or related to memory management?

afdbcreid 29 minutes ago | parent

It appears they're using a unique memory model (https://github.com/oxc-project/tsrs/blob/main/docs/PORTING.m...) to overcome the challenge that prevented the TypeScript team from choosing Rust to begin with: Rust has no GC and porting from a GC language to it often requires restructure of data.

Essentially, they fake a GC via never-freed arenas for long-living objects. It's interesting that Rust can do that (hopefully soundly)!

zamalek 14 minutes ago | parent

From the file:

>Create with P::new(value). p.get() returns &'static T. [...] unless an explicit recycling site proves them dead

It's unsound, the LLM/human is doing the proving. They've hidden unsafe in an abstraction without removing the unsafeness. Using the arena allocator's lifetime would have been safe and easy (bumpalo recommends this AFAIK).

I'm guessing a sycophantic LLM either found or praised this load-bearing seam.

gzapp 28 minutes ago | parent

Shameless plug of my Typescript C# port. It's a case study with some interesting (perhaps) notes from me in the README about approach, performance, and cost(~$75).

https://github.com/stepwisehq/typescript-dotnet

jscheel 9 minutes ago | parent

I benchmarked tsrs a few weeks ago. I was testing out tsgo, ts-rust, tsrs, and bun for typechecking on our monorepo. tsrs is definitely awesome, it is very memory efficient when bumping up the number of threads. Not as efficient as bun, but it has incremental checks, which bun does not have.