tsc-ts - bu TypeScript 7.0.2 versiyasining to'liq porti bo'lib, aslida Go tilida yozilgan tsgo loyihasining TypeScriptga mos keluvchi variantidir. Loyiha Vercel Labs tomonidan GitHubda ochiq manba sifatida e'lon qilingan va npm paketlari orqali o'rnatilishi mumkin.
Kontekst va motivatsiya
TypeScript dasturlash tilining ommalashuvi, katta kod bazalarini yanada xavfsiz va o'qilishi oson qilishga yordam beradi. Biroq, TypeScript kompilyatori JavaScript asosida ishlaydi va ba'zi holatlarda ishga tushirish tezligi cheklovchi omil bo'lishi mumkin. tsgo loyihasi bu muammoni Go tilida native kodga kompilyatsiya qilish orqali hal qilishga intiladi, lekin Go ekotizimi bilan tanish bo'lmagan dasturchilar uchun kirish nuqtasi qiyin bo'lishi mumkin.
npm install -D tsc-ts
npx tsc-ts -p tsconfig.json
tsc-ts arxitekturasi
tsc-ts loyihasi TypeScript kodini o'z ichiga olgan packages/tsc-ts paketida joylashgan. Asosiy komponentlar quyidagilardan iborat:
npm run pack:npm -w tsc-ts # packages/tsc-ts/dist/npm/*.tgz
npm run pack:npm -w tsc-ts -- --check # also install the tarballs and compile a project
- Compiler core –
src/compiler papkasida joylashgan, tsgo 7.0.2 versiyasidan idiomatik TypeScriptga o‘girildi.
- Native executable – har platforma uchun alohida
@tsc-ts/darwin-arm64, @tsc-ts/linux-x64-gnu kabi paketlar orqali taqdim etiladi.
- API server –
--api flagi bilan ishlaydi, tsc --api ga to‘liq mos keladi.
Loyiha GitHubda scriptc (0.3.5) yordamida native bajariluvchi yaratadi, bu esa Windows, macOS va Linuxda bir xil tajriba taqdim etadi.
npm run dev:web
npm run build:web
Texnik tafsilotlar
Port jarayoni har bir kompilyator bosqichini (scanner, parser, binder, module resolution, diagnostics, emit) tsgo bilan bir xil test korpusida solishtirish orqali amalga oshirildi. Natijalar quyidagicha:
npm ci
npm run fetch:upstream # clone tsgo at the pinned commit
npm run build # the Node build of tsc-ts (packages/tsc-ts/dist) and the documentation site
npm run build:oracle # tsgo reference builds in packages/tsgo/dist
- Scanner – tokenlar, qiymatlar, xatolar, JSDoc hamma fayllarda mos keladi.
- Parser va AST – daraxt tuzilishi, diagnostikalar, fayl kodlashuvi bir xil.
- Binder – symbol jadvali, oqim grafigi, nomlarni aniqlash to‘liq mos.
- Module resolution – paket identifikatorlari va traceResolution natijalari bir xil.
- Emit – JavaScript va .d.ts fayllari, 39 ta variantli parametrlar hamma holatda mos.
- Type checker – fayl darajasidagi diagnostikalar bir xil.
Umuman olganda, tsc-ts 12,500 fayldan iborat TypeScript test korpusida 100% moslikni saqlab qolgan.
npm run build -w tsc-ts
node packages/tsc-ts/dist/tsc-ts/src/main.js --api --cwd path/to/project
Native bajariluvchi va scriptc integratsiyasi
npm paketlari @tsc-ts/darwin-arm64, @tsc-ts/linux-x64-gnu kabi platforma‑spesifik bog‘lamlarni o‘z ichiga oladi. Bu bog‘lamlar scriptc hosti orqali linking qilinadi, shuning uchun clang mavjud bo‘lsa, bir necha soniya ichida native .exe yoki .bin fayl yaratiladi. Natijaviy fayl packages/tsc-ts/dist/tsc papkasida joylashadi va TSC_TS_LIB_DIR muhit o‘zgaruvchisi orqali kutubxonalar yo‘nalishini belgilash mumkin.
npm run build:native -w tsc-ts # packages/tsc-ts/dist/tsc
npm run build:native:dev -w tsc-ts # unoptimized, faster to build
TSC_TS_LIB_DIR=upstream/typescript-go/internal/bundled/libs packages/tsc-ts/dist/tsc -p path/to/project
API mosligi va integratsiya imkoniyatlari
tsc-ts --api flagi bilan ishlaganda, standart tsc --api ga to‘liq mos keladi: getCompletionsAtPosition, getJsDocTags, getDocumentationComment, getReferencesToSymbolInFile, getReferencedSymbolsForNode, getSignatureUsages kabi metodlar qo‘llab‑quvvatlanadi. Auto‑import talab qiluvchi completions ham aniq ro‘yxatni qaytaradi. Profiling metodlari (startCPUProfile, stopCPUProfile, saveHeapProfile) hali amalga oshirilmagan, bu esa yuqori darajadagi performans tahlilini cheklaydi.
npm test # compare tsc-ts with tsgo
npm run bench -w tsc-ts # time tsc-ts against tsgo and TypeScript's JavaScript compiler
npm run lint # oxlint
npm run format # oxfmt
Taqqoslash va benchmark natijalari
Benchmark npm run bench -w tsc-ts orqali amalga oshiriladi. Natijalar ko‘rsatadiki, native tsc-ts Go‑asosli tsgo ga nisbatan 5‑10% tezroq ishlaydi, va JavaScript‑asosli original TypeScript kompilyatoriga qaraganda 20‑30% tezlik afzalligi bor. Bu farq asosan native linking va tipik Node.js ishga tushirish overheadi yo‘qligidan kelib chiqadi.
Cheklovlar va ochiq savollar
Hozirgi versiyada profiling API yetishmaydi, shuningdek, Windows‑da @tsc-ts/windows-x64 paketi hali rasmiy ravishda chiqmagan, bu esa Windows foydalanuvchilari uchun qo‘shimcha qurilish bosqichini talab qiladi. Kelajakda scriptc versiyasini yangilash, profiling qo‘llab‑quvvatlash va CI/CD integratsiyasini soddalashtirish rejalashtirilgan.
Foydalanuvchi va sanoatga ta'siri
tsc-ts dasturchilarga TypeScript kodini native darajada kompilyatsiya qilish imkonini beradi, bu esa katta monorepo loyihalarida build vaqtini sezilarli darajada qisqartiradi. Shuningdek, --api mosligi orqali mavjud IDE va scriptc asosidagi avtomatlashtirish vositalari bilan bevosita ishlash mumkin. Natijada, ishlab chiqish jarayoni yanada silliq va resurslar samarali ishlatiladi.
Kelajak yo‘nalishlari
Loyiha hozirda Node.js 24+ va Go 1.26 talab qiladi, lekin scriptc orqali boshqa platformalarga ham kengaytirish rejalashtirilgan. Yangi versiyalar TypeScript 8.x seriyasiga moslashishi, profiling qo‘shimchalari va Windows‑xususiy paketlarni chiqarishi kutilmoqda. Bu esa tsc-ts ni keng jamoatchilik va korporativ muhitda standart kompilyator sifatida qabul qilishga yordam beradi.
Asl manba: github.com