28P by neo 4일전 | ★ favorite | 댓글 23개
  • Microsoft가 컴파일러와 도구의 네이티브 포팅을 통해 Typescript 성능 10배 향상 발표
  • 에디터 시작 시간 대폭 향상, 빌드 타임 10배 단축, 메모리 사용량을 대폭 줄임
  • 2025년 중반까지 tsc 미리 보기 버전을 출시하고, 2025년 말에 완전한 프로젝트 빌드 및 랭귀지 서비스 제공 예정

TypeScript 성능 개선 배경

  • TypeScript의 핵심 가치는 뛰어난 개발자 경험임
  • 코드베이스가 커질수록 TypeScript의 가치가 높아지지만, 대규모 프로젝트에서는 성능 문제 발생
    • 긴 로드 및 검사 시간 문제 발생
    • 빠른 에디터 시작 시간 vs 전체 코드베이스 분석 간의 균형 필요
  • AI 기반 기능은 빠르고 정확한 의미 정보 제공 필요
  • 명령줄 빌드를 통한 코드베이스 상태 검증 요구 증가

네이티브 포트 진행 계획

  • TypeScript 컴파일러와 도구의 네이티브 포트 작업 시작
  • 성능 개선 목표:
    • 에디터 시작 시간 대폭 단축
    • 빌드 시간 최대 10배 단축
    • 메모리 사용량 감소
  • 2025년 중반: 명령줄 타입 검사 가능한 tsc 미리보기 버전 출시 예정
  • 2025년 말: 완전한 프로젝트 빌드 및 언어 서비스 제공 예정

코드 실행 및 테스트

  • TypeScript Go 코드 저장소에서 코드 빌드 및 실행 가능
  • 저장소에서 tsc 및 언어 서버 빌드 및 실행 지침 제공
  • 새로운 기능에 대한 정기 업데이트 예정

얼마나 빨라졌나?

  • 현재 TypeScript 프로젝트의 빌드 시간을 여러 인기 코드베이스에서 테스트한 결과 다음과 같은 성능 향상이 나타남:
    • VS Code 프로젝트는 약 150만 줄의 코드에서 기존 77.8초에서 7.5초로 약 10.4배 빨라짐
    • Playwright 프로젝트는 약 35만 줄의 코드에서 기존 11.1초에서 1.1초로 약 10.1배 개선
    • TypeORM 프로젝트는 약 27만 줄의 코드에서 기존 17.5초에서 1.3초로 약 13.5배 개선
    • date-fns 프로젝트는 약 10만 줄의 코드에서 기존 6.5초에서 0.7초로 약 9.5배 개선
    • tRPC 프로젝트는 약 1만 8천 줄의 코드에서 기존 5.5초에서 0.6초로 약 9.1배 개선
    • rxjs 프로젝트는 약 2천 줄의 코드에서 기존 1.1초에서 0.1초로 약 11배 개선
  • 아직 기능이 완전하지 않지만, 대부분의 코드베이스에서 10배 이상의 성능 개선 예상
  • 빠른 타입 검사와 코드 탐색 가능해짐
  • AI 도구 통합 및 고급 리팩토링 지원 가능

에디터 성능 개선

  • 에디터 로드 및 응답 속도 개선
  • Visual Studio Code 코드베이스 기준 로드 시간:
    • 현재: 9.6초 → 네이티브 버전: 1.2초 (약 8배 개선)
  • 메모리 사용량도 약 50% 감소
  • 언어 서비스 작업 (자동 완성, 빠른 정보 보기, 정의로 이동 등) 성능 향상 예상
  • 언어 서버 프로토콜(LSP) 기반으로 이전 작업 진행 중

버전 로드맵

  • TypeScript 5.8 출시 완료, TypeScript 5.9 곧 출시 예정
  • JS 기반 TypeScript 코드베이스는 6.x 버전으로 계속 개발 진행
  • 네이티브 코드베이스가 안정화되면 TypeScript 7.0으로 출시 예정
    • TypeScript 6 → JS 기반 버전
    • TypeScript 7 → 네이티브 기반 버전
  • TypeScript 7 출시 후에도 6.x 버전은 일정 기간 유지 예정

다음 단계

  • 성능, 컴파일러 API, LSP 등에 대한 추가 정보 공개 예정
  • GitHub FAQ에서 자주 묻는 질문 확인 가능
  • 2025년 3월 13일 TypeScript 커뮤니티 Discord에서 AMA 진행 예정 (PDT 오전 10시 | UTC 오후 5시)

반가운 소식입니다! 신기하게 MS의 타입스크립트 언어는 예상과 달리 정말 의외의(?) 선택들을 많이 하는 것 같습니다. MS 입장에서는 거의 첫번째 오픈소스 프로젝트인데다 JS를 대체하려고 했던 구글의 Dart와 달리 JS를 보완하려고 했던 선택도 참 현명하게 느껴졌고, 이번 네이티브 포팅 언어도 자사 언어도 많고 할텐데 구글의 Go를 선택한 점도 놀랍습니다.

왜 Go 인가란 논의 스레드 재미있네요.

https://github.com/microsoft/typescript-go/discussions/411

고민해야할 것들도 많고...

그러게요 닷넷 개발자분들 심정도 근데 이해가 됩니다...

닷넷 러스트 개발자들이 화가 많이낫네요

C# 언어에 대한 개발이 멈춘건 아니지만 C#을 이용한 프레임워크들이 방치되는 느낌이 너무 많아요

닷넷은 이해가 가는데 러스트는 go 와 같은 위치라고 생각돠네요 아무래도 기존 만들어진 js 관련 go 프로젝트와 라이브러리도 결정에 영향을 미쳤을것 같숩니다

어느 순간부터 TS에 손이 덜 가기 시작했었는데 이런 소식을 보니 또 솔깃하네요?

개인적으로 ts 가 어떤 경우는 유형이 매우 복잡해저서... 거의 포기하다시피 하는 경우(그냥 any로 써버림)가 있는데, 언어에 대해 이해가 부족해서 이겠죠? 상황에 따라 진짜 빨간줄 없애려고 시간낭비 많이 합니다.

ts 에서 진짜 불가피한 경우를 제외하고 any 를 남발하게 되면 vanilla 를 쓰는것과 다름없죠..ㅎ

논란이 꽤 핫한지 Anders Hejlsberg가 직접 코멘트를 남겼네요

https://github.com/microsoft/typescript-go/…

타입스크립트로 컴파일해서 결과물이 바로 바이너리로 나왔으면 하는 1인

프론트는 문외한이라.. swc 와는 다른건가요?

SWC는 바벨처럼 호환 가능한 자바스크립트 코드를 생성하고, 번들링하는 것 까지가 초점이고, 이건 타입스크립트 코드를 자바스크립트로 변환하거나 오류를 체크하는 게 초점입니다.

TypeScript 코드가 더 이상 TypeScript로 작성되지 않으면, 팀이 TypeScript를 직접 사용하지 않게 되어 장기적으로 개발 경험에 영향을 미칠 수 있음

개밥을 먹는다고 하죠. 자신이 만든 것을 직접사용하는. 그런데 언어의 경우는 조금 고민이 되는군요.

개인적인 생각으로 ts의 기반인 js의 runtime들이 (e.g. spidermonkey, v8) 대부분 c++로 짜여져있고 js로 구현한 런타임이 없으며,
js -> js 컴파일또한 pure js를 쓰면 너무 느려 esbuild니 뭐니 다 넘어가는걸 보면,
ts에서도 굳이 개밥먹기를 고집해야하나 싶긴 합니다

나중에는 기존 typescript 코드베이스에 대한 관리가 소홀해지지 않을까 걱정이네요

어라 이미 deno 쪽에서 Rust 기반 툴체인을 만든게 있을텐데... 갑자기 Go 인가요?

그건 Node같은 런타임을 말씀하시는 것 같고, 여기서 말하는 건 TS 언어 자체의 컴파일러 입니다.

아, 글을 좀 더 읽어보니 에디터가 빨라지고 그런 이야기가 있어서 헷갈렸던 것 같네요.

  • tsc 가 10배 빨라짐. 즉, ts -> js 트랜스파일링 시간이 매우 줄어듬.
  • VSCode 같은 ts 로 개발된 큰 프로젝트를 로드할 때 속도가 매우 빨라짐. 즉, ts 의 구문 검사 등 tsc 의 기능을 공유하는 로직이 빨라졌다는 의미.
  • VSCode 가 동작하는 속도가 빨라졌다는 것은 아님
    이런 내용이었군요.

재귀로 구성된 제너릭 타입을 사용할 때, 느려져서 차선책을 사용한 경험이 있습니다. 10배라면 이런 부분도 개선할 수 있을지 기대되네요.

너무 기대됩니다.

Hacker News 의견
  • TypeScript 팀의 Daniel Rosenwasser가 발표 소식을 전하며, 팀 리더 Ryan Cavanaugh와 함께 질문에 답변할 준비가 되어 있음
    • Discord AMA에서 더 많은 정보를 얻을 수 있음
  • 빠른 개발 도구는 훌륭하며, TypeScript 팀이 항상 개발 경험에 깊이 고민하는 점이 기쁨
    • TypeScript 코드가 더 이상 TypeScript로 작성되지 않으면, 팀이 TypeScript를 직접 사용하지 않게 되어 장기적으로 개발 경험에 영향을 미칠 수 있음
    • Flow가 OCaml로 작성되어 실패한 사례를 언급하며, 팀의 생각이 궁금함
  • 이전에 Rust로 빠른 tsc를 시도한 사례로 두 프로젝트를 언급함
    • stc: 중단됨
    • ezno: 활발히 개발 중이며, tsc와 1:1 대응을 목표로 하지 않음
  • 프로젝트가 유연한 스크립팅 언어로 시작하지만, 결국 더 네이티브한 표현이 승리하는 경우가 많음
    • 낮은 수준의 표현으로 시작하는 것이 더 나을 수도 있다고 생각함
    • JS 런타임을 서버에서 사용하는 기본 가정을 재고하게 됨
    • 스크립팅 언어의 장점이 점점 줄어들고 있음
  • 잠시 만우절인 줄 알았음
  • Go를 선택한 것이 좋음
    • Rust 대신 Go를 선택한 것이 인상적임
    • AOT 컴파일된 .NET을 선택하지 않은 것이 아쉬움
  • 새로운 코드베이스를 기존과 최대한 호환되게 유지하는 것이 중요함
    • Go의 문법이 TypeScript 코드베이스와 유사하여 포팅이 용이함
  • Golang과 TypeScript의 문법적 유사성에 놀람
    • Golang에서 sum types를 사용하기 어려웠던 경험을 공유함
  • Daniel과 Anders가 네이티브 포트에 대해 심도 있는 논의를 한 팟캐스트를 소개함
  • 대규모 TypeScript 파일을 리팩토링하는 과정에서 성능 문제가 발생함
    • TypeScript로의 코드베이스 전환이 팀에 큰 도움이 되었지만, 성능 문제는 여전히 존재함
  • PHP를 사용하다가 4년 전부터 TypeScript를 사용하기 시작함
    • TypeScript의 타입 시스템이 유용하며, 컴파일 속도가 빠름
    • Microsoft의 팬은 아니지만, TypeScript는 잘 만들어진 언어라고 생각함