tsc-ts: Trình biên dịch TypeScript 7.0.2 được viết lại hoàn toàn bằng TypeScript

Công nghệ17 tháng 10, 2026·4 phút đọc

Vercel Labs công bố tsc-ts, một cổng thử nghiệm của trình biên dịch TypeScript 7.0.2 (tsgo) được viết lại bằng TypeScript thuần và biên dịch sang mã máy thông qua scriptc. Dự án đạt kết quả khớp hoàn toàn với bản gốc trên bộ kiểm thử khoảng 12.500 tệp của TypeScript và hỗ trợ cả giao diện dòng lệnh lẫn máy chủ --api.

tsc-ts: Trình biên dịch TypeScript 7.0.2 được viết lại hoàn toàn bằng TypeScript

tsc-ts: Khi TypeScript tự viết lại chính mình

Vercel Labs vừa giới thiệu tsc-ts, một dự án thử nghiệm đưa toàn bộ trình biên dịch TypeScript 7.0.2 (hay còn gọi là tsgo) về với chính ngôn ngữ TypeScript. Thay vì dùng mã Go như bản gốc, tsc-ts được viết lại bằng TypeScript thuần rồi biên dịch sang mã máy qua công cụ scriptc. Đáng chú ý, bản viết lại này đạt kết quả khớp hoàn toàn với tsgo trên gần như toàn bộ bộ kiểm thử của TypeScript.

Điều gì khiến tsc-ts khác biệt?

Trong nhiều năm, trình biên dịch TypeScript chính thức được viết bằng TypeScript và chạy trên Node.js. Đến phiên bản 7.0, Microsoft chuyển sang tsgo — một bản viết lại bằng Go nhằm tăng tốc đáng kể. tsc-ts đi theo hướng ngược lại: giữ nguyên ngôn ngữ nguồn là TypeScript nhưng vẫn tạo ra mã máy gốc.

  • Viết bằng TypeScript: mã nguồn trình biên dịch nằm trong packages/tsc-ts/src/compiler, được chuyển từ tsgo 7.0.2 sang TypeScript thuần.
  • Biên dịch sang mã máy: nhờ scriptc, phần mã TypeScript được dịch thành tệp thực thi gốc cho từng nền tảng.
  • Phân phối qua npm: gói tsc-ts gọi một tệp thực thi gốc thông qua các phụ thuộc tùy chọn theo nền tảng như @tsc-ts/darwin-arm64 hay @tsc-ts/linux-x64-gnu.

Cài đặt rất quen thuộc với lập trình viên TypeScript:

npm install -D tsc-ts
npx tsc-ts -p tsconfig.json

Độ chính xác đáng nể

Điểm gây ấn tượng nhất của dự án là mức độ trung thực so với bản gốc. Nhóm phát triển đã đối chiếu từng thành phần của trình biên dịch với tsgo trên bộ kiểm thử của TypeScript, khoảng 12.500 tệp và 17.000 đơn vị kiểm thử sau khi tách các ca nhiều tệp.

Theo bảng so sánh trong tài liệu dự án, hầu hết các thành phần đều đạt trạng thái khớp toàn bộ:

  • Scanner: token, giá trị, lỗi, quét lại và JSDoc — tất cả tệp đều khớp.
  • Parser và AST: cây cú pháp, chẩn đoán, mã hóa tệp nguồn qua API — khớp toàn bộ.
  • Binder: biểu tượng, bảng, đồ thị luồng, phân giải tên — khớp toàn bộ.
  • Phân giải module: kết quả, mã định danh gói, --traceResolution — khớp toàn bộ.
  • Type checker: chẩn đoán theo từng tệp — khớp toàn bộ.
  • Phát sinh JavaScript và khai báo: tệp đầu ra, 39 bộ tùy chọn, .d.ts và .d.ts.map — khớp toàn bộ.

Những phần như --build, --incremental, --watch hay danh mục chẩn đoán với 13 bản dịch cũng cho kết quả tương đương bản gốc.

Máy chủ API tương thích với tsc --api

Ngoài giao diện dòng lệnh, tsc-ts còn có chế độ --api, phục vụ đúng giao diện API của TypeScript 7.0.2 qua stdin và stdout. Nhờ đó, các công cụ đang điều khiển tsc --api — ví dụ chính scriptc — có thể chuyển sang dùng tsc-ts mà không cần sửa đổi.

Máy chủ này hỗ trợ các phương thức dịch vụ ngôn ngữ:

  • getCompletionsAtPosition
  • getJsDocTags
  • getDocumentationComment
  • getReferencesToSymbolInFile
  • getReferencedSymbolsForNode
  • getSignatureUsages

Tương tự tsc --api, các gợi ý cần tự động import sẽ được báo là "cần tự động import". Các phương thức profiling như startCPUProfile, stopCPUProfile và saveHeapProfile hiện chưa được hỗ trợ.

Yêu cầu hệ thống và quy trình build

Dự án yêu cầu Node.js 24 trở lên, Go 1.26 và một máy chủ scriptc chạy trên macOS, Linux hoặc Windows với clang để liên kết. Quy trình build gồm các bước:

  1. npm ci để cài phụ thuộc.
  2. npm run fetch:upstream để sao chép tsgo tại đúng commit được ghim.
  3. npm run build để tạo bản build Node và trang tài liệu.
  4. npm run build:oracle để tạo bản tham chiếu tsgo phục vụ kiểm thử.

Đáng lưu ý, package.json ghim cứng scriptc 0.3.5 cùng gói @scriptc/threads; bất kỳ phiên bản nào khác đều khiến build thất bại.

Ý nghĩa với cộng đồng lập trình viên

Với các nhà phát triển Việt Nam đang làm việc với TypeScript, dự án này mang tính tò mò kỹ thuật nhiều hơn là công cụ sản xuất ngay lập tức. Tuy vậy, nó mở ra một hướng đi thú vị: giữ trải nghiệm viết và đóng góp bằng TypeScript, nhưng vẫn có được tốc độ của mã máy gốc. Nếu scriptc tiếp tục hoàn thiện, mô hình "viết bằng TypeScript, chạy như C" có thể trở thành lựa chọn hấp dẫn cho nhiều công cụ phát triển khác.

Dự án phát hành theo giấy phép Apache-2.0, kèm tệp THIRD_PARTY_NOTICES.md ghi nhận các thành phần bên thứ ba.

tsc-ts không nhằm thay thế tsgo, mà là một thử nghiệm chứng minh rằng toàn bộ trình biên dịch TypeScript có thể được diễn đạt lại bằng chính TypeScript mà vẫn giữ nguyên hành vi.

Bạn có thể theo dõi mã nguồn và tài liệu chi tiết tại kho GitHub của vercel-labs/tsc-ts.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗