Crustc: Trình Biên Dịch Rust 'Biến Hình' Thành 46 Triệu Dòng Mã C 🤯
crustc: một dự án đầy tham vọng đã dịch toàn bộ trình biên dịch Rust (rustc 1.98.0-nightly từ ngày 16/06/2026) thành một codebase C khổng lồ, lên tới 46 triệu dòng mã. Dự án này không chỉ đơn thuần là một bản dịch, mà còn là minh chứng mạnh mẽ cho khả năng của cilly – một chuỗi công cụ biên dịch Rust sang C mới mẻ và đầy hứa hẹn. ✨
---
`crustc` và `cilly`: Mục Tiêu Đột Phá Là Gì? 🤔
crustc đóng vai trò là bản demo và 'nhá hàng' cho cilly, một chuỗi công cụ biên dịch Rust-sang-C mới được phát triển trong suốt ba năm (và là nỗ lực thứ 14 của tác giả!).
* cilly là một thư viện Rust để tạo mã C và một backend trình biên dịch Rust (plugin) giúp biên dịch Rust sang C cho bất kỳ nền tảng mục tiêu nào. * Mục tiêu cốt lõi: Hỗ trợ Rust trên các phần cứng cũ hoặc ít phổ biến, những nơi thiếu hỗ trợ LLVM/GCC và chỉ có trình biên dịch C. Đây là một bước tiến quan trọng để mở rộng tầm với của Rust. 🌍
---
Những Điểm Đột Phá Chính của `cilly` 🚀
cilly mang đến nhiều tính năng độc đáo, giải quyết các thách thức kỹ thuật phức tạp:
1. Tạo Mã C Thích Ứng (Witness Programs) 🧩
Thay vì giả định các chi tiết nền tảng, cilly tạo ra các chương trình "witness" nhỏ để truy vấn trình biên dịch C và nền tảng đích về các tính năng được hỗ trợ, bố cục kiểu dữ liệu, căn chỉnh, mã hóa ký tự và định dạng số nguyên.
c /* This compiles if and only if our C compiler supports _Thread_local. */ _Thread_local int KEYWORD_TLS_SUPPORTED ; c /* This will pass in some C compilers. */ assert ( sizeof ( float ) == sizeof ( double ));
* Tập trung vào ANSI C: Chuỗi công cụ này tránh giả định các tính năng nằm ngoài chuẩn ANSI C, thực hiện các cách giải quyết cho các tiêu chuẩn C hiện đại (như strict aliasing). * Tính đặc thù của nền tảng: Do khả năng thích ứng với mục tiêu, mã C được tạo ra là đặc thù cho từng trình biên dịch (ví dụ: mã C cho ARM64 không thể chạy trên RISC-V, nhưng cilly có thể nhắm mục tiêu RISC-V một cách cụ thể).
2. Minh Bạch Mạng (Network Transparency) 🌐
cilly có thể giao tiếp với các trình biên dịch C qua TCP (và có thể cả UART). Điều này giải quyết "nghịch lý bootstrap" cho các nền tảng thiếu trình biên dịch chéo C:
* Bạn chạy một máy chủ C nhỏ trên hệ điều hành đích (ví dụ: Plan 9). * Bạn chạy rustc trên máy chủ (ví dụ: Linux) và để cilly biên dịch qua mạng. * Minh họa thực tế: Tác giả đã biên dịch thành công các chương trình Rust cho máy ảo x86 Plan 9 từ một máy chủ ARM64 Linux, chứng tỏ khả năng linh hoạt vượt trội của cilly.
3. Tự Động Tạo Makefile 🏗️
cilly có thể nhúng các đánh dấu vào các tệp đối tượng và lưu Trình biểu diễn trung gian (IR) vào bộ nhớ đệm. Sau đó, nó có thể tách các hàm và biến toàn cục theo vị trí định nghĩa để tạo một thư mục với các Makefile, cho phép người dùng xây dựng dự án Rust chỉ bằng trình biên dịch C và make tiêu chuẩn.
---
Chi Tiết Kỹ Thuật và Hạn Chế ⚠️
* Khả năng tương thích ABI: Chủ yếu tương thích với mã rustc gốc. Tuy nhiên, trên một số nền tảng như ARM64, rustc sử dụng quy ước thanh ghi con trỏ trả về struct (sret) mà các trình biên dịch C gốc không tái tạo cho các struct nhỏ (<16 byte), gây ra một số sai lệch nhỏ về ABI. * Các giả định tối thiểu: Chỉ có một vài giả định cơ bản, chẳng hạn như CHAR_BIT == 8 và việc chuyển đổi qua lại con trỏ thành số nguyên hoạt động: (void*)(uintptr_t)(ptr).
---
Cách Tái Tạo & Xây Dựng (Demo) 🛠️
Kho lưu trữ demo chứa mã C được nhắm mục tiêu cho ARM64 Linux.
* Yêu cầu: Linux ARM64 (Ubuntu, Kernel 6.17), GCC 13.3.0, LLD 18.1.3 và thư viện LLVM đi kèm với Rust nightly-2026-06-16. * Tốc độ biên dịch: Không cần tối ưu hóa là khuyến nghị cao. Quá trình này mất khoảng 13 phút CPU (chỉ khoảng 1 phút 18 giây thời gian thực trên máy 20 luồng), một con số ấn tượng cho 46 triệu dòng mã! Tuy nhiên, việc bật tối ưu hóa không được khuyến nghị cho bản demo vì trình biên dịch có thể bị treo hoặc gặp sự cố trên các tệp Rust quá lớn. ⏳
---
Tình Trạng Dự Án và Các Lỗi Đã Biết 🐞
* Lỗi đường dẫn: crustc có thể gặp sự cố do vấn đề chuẩn hóa đường dẫn nếu chạy trực tiếp trong thư mục build của nó (gốc repo). Nó hoạt động tốt khi được thực thi từ các thư mục khác. * Trạng thái phát hành cilly: Chuỗi công cụ cilly đầy đủ chưa được công khai vì tác giả hiện đang giải quyết các lỗi nhỏ. Tuy nhiên, bản demo này đã cung cấp một cái nhìn toàn diện về khả năng của trình biên dịch. Kalera News sẽ tiếp tục theo dõi sát sao sự phát triển của cilly khi nó chuẩn bị ra mắt công chúng. 📰