tsrs, TypeScript보다 8배 빠르다는 말의 조건
Cloudflare가 공개한 tsrs는 TypeScript 7.0보다 최대 8배 빠르다고 한다. 우리 프로젝트에 바꿔 넣으면 지금과 같은 오류를 그대로 잡아낼까?

- Cloudflare가 10월 20일 소개한 tsrs는 TypeScript를 Rust로 옮긴 실험 단계 프로젝트다.
- 최대 8배라는 초기 성능 주장은 TypeScript 7.0과 검사 워커 수를 맞춘 비교다.
- 도입 판단에는 실행 시간 외에 오류 진단과 종료 코드, 반복 실행의 일관성이 필요하다.
비교 대상은 TypeScript 7.0이다
Cloudflare의 발표는 같은 수의 타입 검사 워커를 쓴 초기 벤치마크에서 tsrs가 TypeScript 7.0보다 최대 8배 빠르고 메모리를 약 70% 덜 사용했다고 설명한다. 기본 적응형 설정은 더 많은 메모리를 써 속도를 높일 수 있어 이 비교 조건과 구분해야 한다.
TypeScript 7.1도 같은 날 베타로 나왔다
Microsoft는 10월 20일 TypeScript 7.1 베타를 발표했다. 따라서 7.0 대비 최대 개선 수치를 새 베타와의 차이로 그대로 읽으면 비교 대상이 달라진다.
tsrs 저장소는 TypeScript 7.1에 완전히 부합하는 안정 버전 출시를 목표로 제시한다. Microsoft와 별개의 프로젝트이며, 새 언어 규칙을 정하는 것이 아니라 기존 TypeScript 동작을 맞추려는 포트다. 완전 호환이라는 목표를 이미 모든 프로젝트에서 달성한 결과로 받아들이면 안 된다.
검사가 끝나는 속도만큼 결과가 같은지도 중요하다
호환 문서는 기준이 되는 Go 구현과 진단 내용, 출력 순서, 메시지, 종료 코드가 달라지는 것을 버그로 본다. 같은 소스에서 기존 컴파일러가 잡던 오류를 새 도구도 잡는지가 속도 비교의 전제다.
현재 README는 checker의 처리 순서에 따라 오류가 나타나거나 사라질 수 있는 알려진 문제를 설명한다. 10월 23일 Boshen이 작성한 이슈도 같은 코드를 반복 검사했을 때 결과가 달라지는 문제를 다뤘다. 다만 거기 제시된 특정 실패 빈도는 독립 재현이 끝난 수치가 아니다. 이슈가 닫혔다는 사실만으로 모든 프로그램의 검사 결과가 안정됐다고 볼 수는 없다.
교체 여부는 같은 프로젝트의 결과로 판단한다
공식 벤치마크 문서는 프로젝트 커밋과 설정을 고정하고 컴파일러 버전, 실행 인자, 환경, 개별 측정값을 기록한다. 시간은 초, 최대 메모리는 RSS 바이트로 남기며 서로 다른 프로젝트의 결과를 하나의 평균으로 합치지 않는다.
이를 개발팀의 비교 작업에 적용한다면 다음 항목을 함께 남기는 편이 좋다.
| 항목 | 같이 기록할 조건 |
|---|---|
| 실행 시간·메모리 | 컴파일러 버전, 워커 수, 동일 코드와 설정을 기록한다. |
| 오류 검출 | 메시지 차이와 종료 코드 차이를 따로 비교한다. |
| 반복성 | 같은 입력을 반복했을 때 오류가 달라지는지 본다. |
저장소가 제시하는 시작 명령은 다음과 같다. --noEmit으로 타입 검사부터 비교할 수 있다.
pnpm add -D tsrs
pnpm exec tsrs --noEmit 먼저 기존 검사와 나란히 비교하고, 결과가 일치하는 범위에서 속도 이득을 판단해야 한다. 가장 빠른 벤치마크 한 건보다 자신이 배포하는 코드에서 같은 오류를 찾아내는지가 교체의 기준이다.
자주 묻는 질문
tsrs가 Microsoft의 공식 TypeScript 배포판인가?
아니다. 저장소는 Microsoft에 소속되거나 승인받은 프로젝트가 아니라고 명시한다.
호환 테스트를 통과하면 프로젝트 비교를 생략해도 되는가?
현재 저장소도 모든 프로그램에서 같은 입력에 항상 같은 결과가 나온다고 보장하지 않는다. 같은 입력의 진단과 종료 코드를 비교할 필요가 있다.