Cloudflare와 VoidZero, TypeScript 컴파일러를 Rust로 옮긴 tsrs 공개... 최대 8배 빠르고 메모리는 약 70% 적음
- tsrs는 Cloudflare와 VoidZero가 Owner.com의 Max Schwenk과 함께 진행하는 TypeScript 컴파일러의 Rust 포트이며 Oxc 툴체인 안에서 인큐베이팅됨
- 초기 벤치마크에서 tsrs는 같은 타입 체크 워커 수 기준으로 TypeScript 7.0보다 최대 8배 빠르고 메모리를 약 70% 적게 사용함
- TypeScript 7.1 베타는 7.0보다 최대 2.5배 빠르며 일부 최적화가 tsrs에서 TypeScript 쪽으로 업스트림됨
- Go 프로그램을 Wasm으로 컴파일하면 Go의 가비지 컬렉터가 함께 들어가지만 Rust는 Wasm 게스트와 호스트 사이 메모리 상호작용이 단순해서 브라우저나 IoT 기기에서 실행하기 유리함
- tsrs는 포크가 아니며 TypeScript의 언어 설계와 방향은 TypeScript 팀이 계속 결정함
Hacker News opinions
Microsoft가 이 시점에서 TS를 Rust로 포팅하는 걸 진지하게 고려해야 할 듯
내가 들은 얘기로는 Go 포트 때 Microsoft가 Rust도 검토했는데, 기존 코드를 옮기기 쉬워서 Go를 골랐다고 함
벤치마크는 원래 믿을 게 못 됨. 근데 TS 7.0이 VSCode를 10초 안쪽으로 컴파일하는데 1초 안에 type check 된다는 게 진짜면 대단한 거긴 함
Theo 쪽 tsc-rs는 이 버전보다 느리고 메모리도 더 먹는다더라. 지금은 tsrs랑 합치는 중이래
TSRX도 지원해줬으면 좋겠음
나도 TS를 큰 코드베이스에서 매일 쓰는데 로컬에서 너무 느림. 근데 나는 손으로 한 줄도 안 짰다는 게 좀 씁쓸함. 직접 검토 안 하면 아키텍처 결정이 엉망이 되는 경우도 많음
며칠 만에 갈아엎을 수 있는 건 TS 언어를 새로 설계한 게 아니라 기존 코드베이스랑 명세를 옮긴 거라서 가능한 거임
통합 테스트가 탄탄하면 컴파일러를 블랙박스로 바꿔 끼워도 동작은 검증할 수 있음. 다만 설치 과정에서 뭘 심을지는 걱정임
Wasm 샌드박스에서 돌릴 TS 컴파일러가 필요했는데 Go 런타임이 통째로 들어가는 게 싫었던 거임. 그러다 Rust 쪽이 더 빠르게 나온 거고, oxlint 타입 인식 린팅도 이유라더라
팀원이라니 반갑네요. tsrs에서 찾은 최적화가 TS 7.1에 들어갔다는 얘기는 흥미로움. Wasm이랑 oxlint 연동은 Cloudflare 입장에서 말이 되는 투자 같음
그럼 TSGO에 계속 투자할 이유가 있음? Rust가 더 효율적이고 Wasm도 되는데, Go를 고른 이유였던 쉬운 이식은 이제 AI가 해결하는 상황이잖아
어떤 최적화가 TS 7.1에 들어갔는지 궁금함. 알고리즘 쪽이었는지 메모리 관리 쪽이었는지 알려주면 좋겠음
unsafe를 추상화 안에 숨긴 게 문제임. 죽었는지를 사람이나 LLM이 증명해야 하는 구조라서 안전하다고 못 봄. 아레나 라이프타임을 썼으면 안전하게 갈 수 있었을 텐데
그럼 RAM 다 먹는 거 아님?