Rubix là một ngôn ngữ lập trình hệ thống với đuôi file .ix, và điểm gây tò mò nằm ở chỗ compiler của nó được viết hoàn toàn bằng assembly GNU x86-64 (as + ld). Không C, không Python, không LLVM, không WASM, không VM. Mã nguồn .ix được biên dịch thẳng ra executable native, chạy trực tiếp trên silicon.
Vấn đề nó giải quyết khá rõ: nếu bạn muốn một toolchain tối giản, không phụ thuộc libc, không kéo theo runtime cồng kềnh, thì Rubix cho bạn một compiler binary khoảng 42 KB và thời gian compile dưới 1 mili giây. Nó cũng tự nhận diện host OS ngay tại entry của binary (rubix_host_os) và có resolver Windows trong bộ nhớ, đi bộ PEB (gs:[0x60]) bằng assembly thuần để tìm export của kernel32.dll mà không cần bảng import bên ngoài. README nói kiến trúc hướng tới Linux, Windows và macOS, nhưng mới verify trên Linux x86-64. Đọc kỹ chỗ này: “verified on Linux x86-64” là con số thật, phần còn lại là thiết kế.
Vì sao repo này đang được chú ý
1.895 sao sau khoảng 2 ngày tạo (2026-10-19, cập nhật 2026-10-21). Con số đó nói lên sự tò mò của cộng đồng hơn là độ chín của dự án. Viết compiler bằng assembly là thứ hiếm ai làm, vì chi phí bảo trì cao và gần như không có hệ sinh thái. Nhưng chính vì hiếm nên nó tạo được sự chú ý.
Điểm khác biệt so với số đông: các ngôn ngữ mới thường bootstrap bằng C, Rust hoặc Go rồi gọi LLVM. Rubix đi ngược lại hoàn toàn, compiler chia thành các module assembly riêng biệt: lexer.s, parser.s, symtab.s, codegen.s, io.s, strings.s, constants.s, main.s. Parser là recursive descent có xử lý độ ưu tiên kiểu Pratt. Symbol table quản lý scope lồng nhau tới 64 cấp và tính offset stack. Codegen phát ra assembly GNU với .intel_syntax noprefix, kèm quản lý .rodata cho string literal.
Về mặt tính năng ngôn ngữ, danh sách trong README dài hơn tôi kỳ vọng ở một dự án mới: vòng lặp for và while có break, continue, lồng tùy ý; cấp phát heap động (alloc, free) qua sys_mmap trên Linux hoặc VirtualAlloc trên Windows; index mảng động và cú pháp array literal [1, 2, 3]; gọi hàm với số tham số không giới hạn (hơn 6 tham số dùng register của AMD64 ABI cộng stack spill); import module nhiều file (import "lib.ix"); stdlib nhúng gồm File I/O, xử lý chuỗi, toán; phát hiện tràn số nguyên bằng trap phần cứng (jo __rubix_overflow_error); và diagnostic lỗi kiểu Rust với snippet source cùng con trỏ ^.
Cài đặt và chạy thử
README chưa cung cấp lệnh cài đặt cụ thể trong phần rút gọn, nhưng repo có Makefile để build compiler, script rubixc để compile và chạy, cùng test.sh là bộ 14 test kiểm chứng. Quy trình dựa trên as + ld nên bạn cần toolchain GNU assembly trên máy. Các file ví dụ nằm trong examples/:
project 2.0/
├── Makefile # Compiler build automation
├── rubixc # User-friendly compiler & runner script
├── test.sh # Complete 14-test verification suite
├── src/ # 100% Pure x86-64 Assembly Source Code
│ ├── main.s # Entry point (_start), command line parser, file pipeline
│ ├── lexer.s # Tokenizer & scanner
│ ├── parser.s # Recursive-descent parser, operator precedence, loop frames
│ ├── symtab.s # Lexical scope stack, symbol table buffer, stack offsets
│ ├── codegen.s # Instruction emitters, rodata manager, stdlib runtime
│ ├── io.s # Raw kernel file I/O & Rust-style diagnostic error reporting
│ ├── strings.s # String length, compare, copy, integer conversion
│ └── constants.s # Linux syscall numbers, token types, buffer limits
└── examples/ # Test & Demonstration Programs
├── 01_hello.ix
├── 02_arithmetic.ix
├── 03_control_flow.ix
├── 04_functions.ix
├── 05_prime_numbers.ix
├── 06_arrays.ix
├── 07_types_and_logic.ix
├── 08_many_params.ix
├── 09_modules.ix
├── 10_safe_math.ix
├── 11_for_loops.ix
└── 12_stdlib.ix
Cách dùng thực tế theo mô tả trong README: source .ix được chuyển thẳng thành native machine code bởi rubix_compiler, và điều phối qua driver ./rubixc. Bạn build bằng Makefile, chạy test.sh để xem 14 test có pass không, rồi thử các file trong examples/. Có một file large_system_test.ix để stress test với quicksort 200 phần tử và ma trận 4×4.
Ai nên dùng, dùng để làm gì
Đối tượng thật của Rubix hẹp. Nếu bạn làm embedded, firmware, hoặc cần hiểu compiler hoạt động ở mức gần phần cứng nhất, đây là tài liệu đọc rất đáng. Việc một compiler hoàn chỉnh nằm trong vài file assembly dễ đọc hơn nhiều so với việc lần mò trong codebase LLVM hàng triệu dòng.
Với người viết tool CLI cần binary nhỏ, khởi động tức thì, không phụ thuộc libc, ý tưởng của Rubix đúng hướng. Nhưng dùng nó cho production lúc này thì tôi không khuyên. Dự án mới 2 ngày tuổi.
So sánh nhanh
Về triết lý “compiler tự host, không phụ thuộc ngoài”, có thể đặt cạnh các ngôn ngữ như Zig (đang tiến tới bỏ LLVM nhưng vẫn dựa trên C++ để bootstrap) hoặc các dự án assembly thuần như MenuetOS. Điểm khác của Rubix là nhắm vào ngôn ngữ bậc cao có cú pháp quen thuộc (vòng lặp, hàm, mảng, module) chứ không phải HĐH. Tôi không so trực tiếp với Rust hay C vì mục tiêu khác hẳn: Rubix không cố thay thế chúng, nó chỉ chứng minh có thể làm được như vậy bằng assembly.
Ưu điểm và những chỗ cần cân nhắc
Ưu điểm rõ: compiler 42 KB, compile dưới 1ms, không dependency runtime, diagnostic lỗi có snippet và con trỏ ^, license MIT thoáng. Bộ tính năng ngôn ngữ đầy đủ hơn mức một dự án assembly 2 ngày tuổi thường có.
Hạn chế cũng rõ không kém. Thứ nhất, chỉ Linux x86-64 được verify, dù README quảng cáo multi-OS. Phần Windows và macOS là thiết kế, chưa có bằng chứng chạy thật trong dữ liệu tôi có. Thứ hai, viết compiler bằng assembly nghĩa là contributor tiềm năng cực ít, bug fix chậm, refactor đắt. Thứ ba, tài liệu ngoài README gần như chưa có, không thấy spec ngôn ngữ, không thấy hướng dẫn cài đặt chi tiết trong phần rút gọn. Thứ tư, chưa rõ độ ổn định của stdlib nhúng và các tính năng như module import khi scale lên codebase lớn.
Cần lưu ý thêm: số sao 1.895 đến sau 2 ngày rất dễ tạo cảm giác trưởng thành sai. Hãy coi đây là dự án nghiên cứu, không phải toolchain để ship sản phẩm.
Tôi sẽ theo dõi xem phần resolver Windows có thật sự chạy được trên máy Windows thật hay chỉ là code path chưa test. Nếu 6 tháng nữa repo vẫn cập nhật đều và có test pass trên cả 3 OS, lúc đó nó đáng để thử nghiêm túc hơn. Còn hiện tại, đọc source src/codegen.s để hiểu một compiler sinh assembly trông thế nào là giá trị thực tế nhất. Repo ở đây: tek-sys-hub/Rubix-lang.
