Microsoft TypeScript 7.0 хувилбарыг зарлалаа: Go хэлээр шинэчлэн бичсэн компилятор ба 10 дахин хурдан Build
Microsoft компани TypeScript програмчлалын хэлний түүхэнд хамгийн том үсрэлт болох TypeScript 7.0 хувилбарыг албан ёсоор танилцууллаа. Энэхүү хувилбарын хамгийн гол техникийн шинэчлэл нь компилятор (tsc) болон Type Checker-ийг анхнаас нь Go хэлээр дахин бичиж (Go Native Compiler / Project Corsa), Build ба Type Check хийх хурдыг 8-аас 12 дахин хурдасгасан явдал юм.
Сая сая мөр код бүхий томоохон кодын сан (Monorepo), CI/CD дамжлага болон IDE редактор дээр хөгжүүлэгчдийн туулдаг байсан саатлыг эрс бууруулсан энэ шинэчлэл нь орчин үеийн веб ба enterprise програм хангамжийн хөгжүүлэлтэд томоохон эргэлт авчирч байна.
TypeScript-ийн шинэ эрин үе: Яагаад Go хэлээр дахин бичих болов?
Өмнөх TypeScript (TS 5.x болон 6.x) хувилбаруудад компилятор болон хэлний сервис нь JavaScript/TypeScript дээр өөрөө бичигдсэн бөгөөд Node.js ажиллах орчин дээр ажилладаг байв. Анх хөгжүүлэгчдэд суралцахад хялбар байсан ч төслийн цар хэмжээ томрох тусам JavaScript-ийн single-threaded хязгаарлалт, Garbage Collection (GC)-ийн саатал, санах ойн зарцуулалт нь томоохон саад болж эхэлсэн.
Хөгжүүлэгч IDE (VS Code, WebStorm) дээр кодоо өөрчлөөд хадгалахад Type Checker алдааг олж харуулах хүртэл хэдэн секунд хүлээх, эсвэл Pull Request бүр дээр CI/CD pipeline tsc --noEmit тушаалыг ажиллуулахад 10-15 минут хүлээх нь багийн бүтээмжийг багасгаж, зардлыг нэмэгдүүлдэг байв. Энэхүү хүндрэлийг шийдвэрлэхийн тулд Microsoft-ийн инженерүүд компиляторыг Native хэл рүү хөрвүүлэх томоохон төслийг хэрэгжүүлж, ийнхүү TypeScript 7.0 болгон албан ёсоор релиз хийлээ.
Реалист Benchmark ба гүйцэтгэлийн үр дүнгүүд
Microsoft болон Slack, Vanta, TypeORM зэрэг томоохон технологийн багуудын туршилтын үр дүн шинэ компиляторын хурдыг бодит байдал дээр баталж байна:
- VS Code кодын сан (1.3 сая мөр код, ~8,000 файл): TypeScript 6.0 хувилбар дээр full build хийхэд 125.7 секунд зарцуулдаг байсан бол TypeScript 7.0 дээр 10.6 секунд болж 11.9 дахин хурдассан. Мөн санах ойн (RAM) хэрэглээ 18%-иар буурсан байна.
- Language Server Protocol (LSP) ба Редактор: VS Code дээр алдаатай файл нээж Type Check хийх хугацаа өмнө нь 17.5 секунд байсан бол одоо 1.3 секундээс бага хугацаанд гүйцэтгэгдэж байна.
- Slack инженерүүдийн CI/CD дамжлага: Slack-ийн томоохон TypeScript төсөл дээр CI type-checking хугацаа 7.5 минутаас 1.25 минут болж багасжээ.
- Өөр бусад Open-Source төслүүд: TypeORM төсөл дээр build хийх хугацаа 17.5 секундээс 1.3 секунд (13.5x хурдан), Playwright дээр 11.1 секундээс 1.1 секунд (10.1x хурдан) болж тус тус эрс буурчээ.
Архитектурын шийдэл: Яагаад Rust биш, Go хэлийг сонгосон бэ?
Энэхүү шинэчлэл зарлагдахад коммьюнитигийн дунд "SWC, Biome, Turbopack шиг яагаад Rust хэлийг сонгоогүй юм бэ?" гэдэг асуулт хамгийн их яригдсан. Microsoft-ийн TypeScript багийн ахлах архитектор Андерс Хейлсберг (Anders Hejlsberg) болон Райан Кавана (Ryan Cavanaugh) нар дараах техникийн үндэслэлүүдийг өгсөн юм:
- Port vs Rewrite: Төслийн зорилго бол Type System-ийн алгоритм, логикийг анхнаас нь шинээр зохиох (rewrite) биш, харин одоо байгаа сая сая кодын сантай 100% нийцтэй хуучин компиляторыг Native хэл рүү яг таг хөрвүүлэх (faithful port) явдал байв.
- Санах ойн загвар ба GC: Rust хэлийн strict ownership, lifetime болон borrow checker бодлого нь одоо байгаа TypeScript-ийн компиляторын дотоод санах ойн дата бүтэц, Lazy Evaluation болон Pointer Reference-ийн сүлжээг бүхэлд нь өөрчлөхийг шаардах байв. Харин Go хэлийн struct, pointer болон Garbage Collector загвар нь JavaScript-ийн архитектуртай маш ойр байсан тул логикийн зөрчил үүсгэлгүйгээр найдвартай хөрвүүлэх боломж олгожээ.
- Олон тредийн зэрэгцээ ажиллагаа (Parallelism): Go хэлийн Goroutine болон shared-memory multi-threading шийдэл нь Type Checking ажиллагааны даалгавруудыг олон процессорын цөмд хуваан зэрэгцээ ажиллуулах архитектурыг хялбархан нэвтрүүлэх боломжийг олгосон.
Хөгжүүлэгчид болон CI/CD системд гарах гол өөрчлөлтүүд
TypeScript 7.0 руу шилжихэд програм хөгжүүлэгчдийн анхаарах ёстой цөөнгүй онцлог өөрчлөлтүүд бий:
- Бинар цуглуулга:
tscкоманд нь одоо Node.js дээр ажилладаг JS скрипт биш, шууд Go бинар executable хэлбэрээр сууна (npm install -D typescript). - Parallelism тохиргоо: Олон цөмт CPU ашиглахын тулд компиляторт
--checkersболон--buildersтугуудыг шинээр нэмж өгсөн. Мөн нөөц бололцоо хязгаарлагдмал контейнер орчинд зориулж--singleThreadedтугаар ганц тредээр ажиллуулах боломжтой. - Programmatic Compiler API-ийн шилжилт: Node.js орчноос
import ts from 'typescript'гэж дуудаж AST (Abstract Syntax Tree) болон Compiler API-ийг програмчлалаар ашигладаг байсан зарим хэрэгслүүд (Babel/Vite plugin-ууд) TypeScript 7.0 дээр шууд ажиллахгүй. Энэхүү API шаардлагатай сангуудад зориулж хуучин JS компиляторыг@typescript/typescript6нэртэй багц болгон түр хадгалж байгаа аж.
TypeScript 7.0 руу хэрхэн шилжих вэ?
Төслөө TypeScript 7.0 руу шинэчлэхийн тулд багц удирдагч дээрээ шинэ хувилбарыг суулгана:
npm install -D typescript@latest
Тохиргооны хувьд tsconfig.json файл дээр зарим хуучин тохиргоонууд (жишээ нь baseUrl-ийг автоматаар унших зарим онцлогууд) шинэчлэгдсэн тул сануулга мэдээллүүдийг шалгах хэрэгтэй. Таны бичсэн кодоос боловсруулагдан гарах Runtime JavaScript код ямар ч өөрчлөлтгүй бөгөөд зөвхөн хөгжүүлэлтийн болон Build хийх шатны Static Type Check дунджаар 10 дахин хурдасч байгаа юм.
TypeScript 7.0 нь хөгжүүлэгчдийн өдөр тутмын Feedback Loop-ийг эрс багасгаж, веб програм хангамжийн бүтээмжийг шинэ шатанд гаргасан томоохон үйл явдал болж байна.
Эх сурвалж: Microsoft Tech Blog, InfoQ, JetBrains Annotated News
Сэтгэгдэл
Ачаалж байна...