Tập 56: IR verify và LLVM subset

Có được IR, trước khi đẩy xuống backend, chúng tôi phải port cả bộ gác cổng Verifier sang DUY. Sprint 86 và 87 là giai đoạn khóa van an toàn cho compiler mới.

Chúng tôi viết ir_verify_subset.duy dựa trên spec invariants. Verifier mới chạy trên cấu trúc IR vừa sinh ra, kiểm tra xem có biến nào dùng trước khi định nghĩa, hoặc có block nào kết thúc sai quy tắc hay không. Sau khi verifier xanh, backend LLVM subset (llvm_subset.duy) sẽ dịch IR đó sang LLVM IR thô.

Mốc demo của Sprint 87 là: compiler viết bằng DUY dịch chương trình hello-world sang LLVM IR, gọi clang link ra file object, và chạy ra chữ 42 trên terminal.

hello.duy -> [ DUY Compiler (Native) ] -> LLVM IR -> Object -> Run -> stdout: 42

Tôi ngồi nhìn chằm chằm vào con số 42 hiện ra trên màn hình. Đó không phải là một chương trình phức tạp, nhưng con số đó được sinh ra bởi một trình biên dịch chạy bằng mã máy của chính nó, không cần Node.js gánh vác ở runtime nữa. Cảm giác lúc đó giống như bạn chứng kiến một đứa trẻ bước những bước đi độc lập đầu tiên mà không cần người nâng đỡ. Mắt xích tự trị đầu tiên đã khép vòng thành công.


Bình luận (0)

Đang tải bình luận...