Tập 92: Native compiler full path — Vòng lặp bootstrap hoàn chỉnh
Trạng thái sự thật: Chưa xảy ra — Kế hoạch Phase U (Sprint 156-162).
Khi đã có binary duyc độc lập, chúng tôi sẽ thực hiện bootstrap ceremony thực sự:
1. Stage 1: Dùng duyc (được sinh ra từ JS compiler cũ) để biên dịch toàn bộ mã nguồn của compiler viết bằng DUY (compiler/native/). Kết quả thu được là binary duyc_stage1.
2. Stage 2: Dùng duyc_stage1 để tự biên dịch lại chính mã nguồn compiler đó một lần nữa. Kết quả thu được là duyc_stage2.
3. Stage 3: Dùng duyc_stage2 để tự biên dịch lại chính mã nguồn compiler. Kết quả thu được là duyc_stage3.
4. Fixed-point verify: Chứng minh bằng mã băm SHA-256 rằng duyc_stage2 and duyc_stage3 giống nhau hoàn toàn tới từng byte.
Đây là đỉnh cao của sự tự trị. Khi fixed-point hash trùng khớp, JavaScript chính thức bị đẩy lùi về vai trò của một tài liệu lịch sử. Thách thức lớn nhất trong giai đoạn này là đảm bảo backend native LLVM của DUY sinh mã nguồn tối ưu tương đương với clang. Nếu có bất kỳ sự sai lệch nào trong cách xử lý cấu trúc dữ liệu phức tạp (như generics monomorphization) giữa Stage 2 và Stage 3, vòng lặp bootstrap sẽ đổ vỡ ngay lập tức do lỗi suy thoái sinh mã qua các thế hệ.
Tôi đã chuẩn bị tinh thần cho việc phải liên tục so sánh hàng vạn dòng mã máy assembly giữa Stage 2 và Stage 3 để truy tìm nguyên nhân của sự trôi mã nguồn (compiler drift) nếu có. Chỉ cần một hàm tối ưu hóa biến tạm của native compiler hoạt động không deterministic, fixed-point sẽ không bao giờ khớp. Lễ bootstrap full path này sẽ là bài test tối cao cho tính ổn định của DUY.
Bình luận (0)
Đang tải bình luận...