Opus 5.5 chuyển trình biên dịch TypeScript sang Rust trong hai tuần

Một dự án trên GitHub mang tên ts-rust đang lan truyền trong giới lập trình viên những ngày gần đây. Dự án này chuyển toàn bộ trình biên dịch TypeScript mà Microsoft đã viết lại bằng Go, cùng với bộ kiểm tra kiểu (type checker) và máy chủ ngôn ngữ (LSP), sang Rust; công cụ dòng lệnh được gọi là tsc-rs. Đơn vị duy trì dự án, pingdotgg, nói thẳng trong phần giới thiệu: toàn bộ mã triển khai do mô hình lớn tạo ra, bản thân họ chưa đọc một dòng nào.

Dự án được cố định vào một phiên bản upstream của microsoft/typescript-go, tương ứng với TypeScript 7.1.0-dev. Theo tài liệu mô tả, 181.711 bài kiểm thử được chuyển từ bản Go đều vượt qua, và trong các dự án thực tế mà tác giả đã thử, tỷ lệ tương thích đạt 100%. Repo dùng giấy phép MIT, đồng thời giữ lại thông báo Apache-2.0 của TypeScript và BSD-3-Clause của thư viện chuẩn Go, hiện có hơn 600 lượt gắn sao.

Hai hướng đi với hai mô hình

Tác giả ban đầu chạy thử với GPT-5.6 Sol và GPT-6 Astra của OpenAI, chi phí API vượt 400.000 USD, tạo ra khoảng 1,3 triệu dòng Rust, nhưng tỷ lệ tương thích dừng ở mức 84%. Sau đó họ chuyển sang Claude Opus 5.5 và làm lại từ đầu, chỉ sau 10 giờ đã có bản v0 chạy được, tổng chi phí trong hai tuần khoảng 24.047 USD.

"I've never read a line of this code."

(Tôi chưa từng đọc một dòng mã nào trong số này.)

Về hiệu năng, tác giả lấy dự án T3 Code của chính mình làm chuẩn: tsc-rs chạy xong việc kiểm tra kiểu trong 7,25 giây, còn bản tsc 7 viết bằng Go mất 16,10 giây, nhanh hơn 2,22 lần. Nếu lấy bản tsc 6 viết bằng JavaScript làm mốc, tsc 7 nhanh hơn 7,1 lần còn tsc-rs nhanh hơn 11,4 lần. Những con số này đều do tác giả tự đo, hiện chưa có bên thứ ba kiểm chứng lại, và cả OpenAI cũng như Anthropic đều chưa công khai bình luận về phép so sánh này.

Đặt cạnh các dự án cùng loại

Việc dùng mô hình lớn để di chuyển mã nguồn quy mô lớn đã có vài ví dụ công khai trong năm nay. GitHub từng công bố dùng Copilot viết lại một runtime của mình thành 830.000 dòng Rust; Mistral dùng agent chuyển 40.000 dòng Fortran 77 sang C++. Điểm chung của các dự án này là đều có sẵn một bộ kiểm thử có độ phủ lớn để làm trọng tài.

ts-rust cũng theo lối này. Bản chuyển sang Go của Microsoft bản chất là một lần viết lại kiểu “sao chép từng file”, và các bài kiểm thử cũng được mang theo, tạo cho mô hình một mục tiêu gần như hoàn toàn rõ ràng: hàng chục nghìn bài kiểm thử, qua là qua. Trong những nhiệm vụ có mục tiêu rõ ràng và phản hồi tức thời như vậy, khoảng cách giữa hai mô hình bị khuếch đại lên rất nhiều. Còn với mã nghiệp vụ có yêu cầu mơ hồ và không có lưới kiểm thử, liệu phép so sánh này còn đúng hay không thì chưa thể nói chắc.

Những hạn chế đã biết

Tài liệu mô tả liệt kê bốn hạn chế: trong monorepo khi cùng một file có thể được truy cập qua nhiều đường dẫn, số file đầu ra có thể nhiều hơn tsc; trong các lần build tăng dần với tsc -b, có thể đọc phải sản phẩm cũ hoặc bị thiếu; trong các phiên chỉnh sửa kéo dài, bộ nhớ tăng chậm, khoảng 20MB sau mỗi 1.000 lần sửa; số phiên bản hiển thị là 7.1.0-dev từ thời điểm chuyển mã, không phải phiên bản trên npm.

Tác giả xác định đây là phiên bản sớm. Với các nhóm muốn thử, cách an toàn hơn là chạy song song tsc-rs và tsc chính thức trong CI rồi so sánh kết quả chẩn đoán; còn việc dùng trực tiếp để thay thế chuỗi build sản phẩm, trong khi chưa có ai rà soát mã, là rủi ro mà mỗi nhóm phải tự cân nhắc.

Nguồn tham khảo: tài liệu mô tả dự án ts-rust, CocoLoop, thảo luận trên Hacker News; tài liệu dự án đã đối chiếu số bài kiểm thử, chi phí API, thời gian và hệ số benchmark của T3 Code.