3월 11일, 타입스크립트 (이하 TS) 애호가로써 기뻐할 수 밖에 없는 소식이 들려왔다.
Anders Hejlsberg가 직접 MS가 무려 10배 이상의 성능 향상을 보이는 Typescript 7을 발표한 것이다.
https://devblogs.microsoft.com/typescript/typescript-native-port/
A 10x Faster TypeScript - TypeScript
Embarking on a native port of the existing TypeScript compiler and toolset to achieve a 10x performance speed-up.
devblogs.microsoft.com
속도 성능의 범위
이 소식이 개발자들에게만 희소식인 것이, 속도 개선은 현재로썬 에디터 부팅 속도가 최대 10배 빨라진 것이다.
위 아티클의 영상에서 Anders가 직접 새로운 컴파일러가 VS Code 코드를 기존 대비 10배 빠른 5.76초만에 컴파일하는 것을 보여준다.
너무 멋있다.. 😭
현재 컴파일러 및 Language Server Provider (LSP) 작업이 80% 정도 진행되었으며 아래의 리포에서 받아 바로 빌드해볼 수 있다고 한다.
https://github.com/microsoft/typescript-go?tab=readme-ov-file
영상의 마지막에 Javascript 컴파일러의 성능 향상 작업을 예고하고 있는데 이게 된다면 브라우저에서의 경험 또한 최적화될 수 있어 보인다.
속도 향상의 본질
어떻게 속도 향상을 이루어 냈을까?
핵심은 Go 언어를 사용한 TS 네이티브 컴파일러 구현에 있다.
기존의 TS 컴파일러는 TS로 구현이 되어 있었고 런타임에 자바스크립트로 변환되기에 저수준 최적화를 적용할 수 없었다.
따라서 TS 컴파일러의 구현을 Go 언어로 다시 구현한 것이다.
Anders와 팀은 여러 언어의 플랫폼 호환성을 프로토타입을 통해 테스트 해보고 Go 언어를 골랐다고 한다.
Go가 동시성 처리가 매우 쉽고 정적 타입, 가비지 컬렉션을 지원하는 큰 장점이 있지만,
어찌보면 업계 라이벌이라 할 수 있는 구글이 개발한 Go 언어를 선택한 것이었기에 그 결정 자체가 매우 과감했다.
그리고 그 결정은 다중 쓰레드 활용과 네이티브 바이너리를 통한 속도 향상으로 돌아왔다.
구현 방식
TS에서 Go로의 이동하는 방식을 '코딩' 대신 '포팅'이라는 표현을 사용했다.
위의 영상에서 Anders가 TS에서 각 파일별 함수를 한 줄 한 줄 그대로 Go 언어로 옮겨온 것을 보여준다.
구현 방식도 간결하고 그저 TSC 커멘드라인 코드를 Go로만 컴파일했을 뿐인데 이런 향상을 가져왔다는 것이 너무 아름다웠다.
TS에 관심이 조금이라도 있는 사람이라면 위 아티클에 포함되어 있는 영상 보기를 추천한다. (아래에 넣음)
https://www.youtube.com/watch?v=pNlq-EVld70
Anders 아조씨에 반해서 영상 덕질하고 있는 그냥 아조씨는 그럼 이만..
조사 중에 Rust 대신 Go를 선택하게 된 이유를 알게 되서 추가
- TypeScript는 10년 이상 사용된 제품으로, 기존 코드베이스와의 호환성이 필수적이었기 때문에 그대로 포팅할 필요가 있었음.
- Rust는 강력한 메모리 관리 기능을 제공하지만, 자동 가비지 컬렉션이 없고, Go 언어는 자동 가비지 컬렉션을 제공하기에 TypeScript의 기존 메모리 관리 방식과 맞았음.
- 특히 TypeScript 컴파일러는 순환 참조 구조를 많이 사용하지만, Rust에서는 이를 지원하지 않으며 Go는 순환 데이터 구조를 가질 수 있는 기능을 제공함.
'IT 교양' 카테고리의 다른 글
ChatGPT의 Tutor me로 무료 개인 과외 받기 (0) | 2025.03.12 |
---|---|
Domain-Driven Design: 도메인 주도 설계 (0) | 2025.02.21 |
eBook은 어떻게 동작할까? (1) | 2025.01.22 |
Actor Model에 대하여 (1) | 2025.01.07 |
OpenAPI 생성 코드 변경에 무관한, BASE_PATH 주입 (Angular) (3) | 2025.01.04 |