Chibil: Trình biên dịch ngôn ngữ C dành cho .NET IL
Chibil là một trình biên dịch ngôn ngữ C được viết lại bằng C#, chuyển đổi mã nguồn sang .NET IL. Dự án đã đủ hoàn thiện để chạy DOOM và tương thích với công cụ liên kết của Visual Studio.

Chibil là một trình biên dịch ngôn ngữ C mới dựa trên chibicc, nhưng được viết lại hoàn toàn bằng ngôn ngữ lập trình C#. Điểm đặc biệt nhất của dự án này là nó cập nhật mã nguồn để hướng tới .NET IL (Intermediate Language), cho phép các chương trình viết bằng C chạy trên môi trường .NET.
Dự án đã hoàn thiện ở mức độ đủ để chạy được tựa game kinh điển DOOM (phiên bản PureDOOM), chứng minh khả năng xử lý logic phức tạp của trình biên dịch này.
Quy trình biên dịch
Chibil tiếp nhận các tệp nguồn C và tạo ra các tệp COFF OBJ. Các tệp OBJ này có tính tương thích nhị phân với các tệp được tạo ra bởi trình biên dịch MSVC ở chế độ /clr. Do đó, người dùng có thể sử dụng công cụ link.exe từ Visual Studio để liên kết các tệp đối tượng này lại với nhau và tạo ra tệp thực thi cuối cùng.
Một điểm thú vị là bạn có thể kết hợp (mix and match) các tệp đối tượng được tạo bởi C++/CLI và Chibil. Trong tương lai, dự án có thể sẽ phát triển trình liên kết (linker) riêng của mình để loại bỏ sự phụ thuộc vào Windows.
Khả năng gỡ lỗi
Quá trình gỡ lỗi trên Chibil hoạt động trơn tru như mong đợi. Các số dòng và biến cục bộ (locals) đều được hiển thị chính xác. Người lập trình có thể bước qua (step through) mã nguồn C ngay trong trình gỡ lỗi của .NET.
Thư viện chuẩn
Hiện tại, Chibil chưa tích hợp thư viện chuẩn C đầy đủ. Thay vào đó, dự án cung cấp một phần nhỏ (stub) của thư viện thời gian chạy (C runtime library) trong thư mục crt. Phần này cung cấp một hàm main có thể chạy được, nhận chuỗi đối số và chuyển tiếp đến hàm main chuẩn với argc và argv. Assembly được tạo ra sẽ được chuyển đổi thành tệp đối tượng COFF bằng tiện ích asm2obj và có thể liên kết với mã C để tạo thành một chương trình khả thi.
Tương tác với mã .NET
Tính năng này vẫn đang trong quá trình phát triển. Mã được tạo ra nằm trong không gian tên toàn cục (global namespace). Nếu bạn muốn sử dụng mã đã biên dịch từ các phần khác (thay vì chỉ chạy tệp EXE), bạn sẽ cần sử dụng cơ chế phản chiếu (reflection) như Module.GetMethod để tìm các phương thức và gọi chúng.
Công cụ hỗ trợ
Dự án cũng đi kèm các công cụ hữu ích, chẳng hạn như tools/coffobjdumper.cs - một công cụ dùng để hiển thị nội dung của tệp OBJ .NET. Đây là công cụ bổ trợ tốt cho ILDASM (của .NET Framework) có thể đổ siêu dữ liệu .NET từ tệp COFF OBJ nhưng không hiển thị thân phương thức, và dumpbin.exe có thể đổ nhiều thứ từ tệp COFF nhưng ít thông tin về siêu dữ liệu .NET.
Bài viết liên quan

Phần mềm
Tấn công chuỗi cung ứng WordPress: Kẻ tấn công mua 30 plugin trên Flippa và cài cửa sau
06 tháng 5, 2026

Công nghệ
CEO Palantir: 10% thế giới "ghét chúng tôi một cách chuyên nghiệp"
05 tháng 5, 2026

Phần mềm
MySQL 9.7: Bản LTS lớn đầu tiên kể từ 8.4 mang tính năng Enterprise xuống phiên bản Community
10 tháng 5, 2026
