Bỏ qua để đến nội dung

Luật bootstrap

Trình biên dịch được viết bằng Halis. Điều đó có nghĩa nó phải biên dịch được chính nó — và, điều mấu chốt, nó phải cho ra đúng kết quả đó mọi lần. Đó là luật bootstrap.

snapshot/hlc.c ── cc ──► bin/hlc ── compiles ──► src/hlc.hls
(committed seed) (native) │
▲ │
└────────── must re-derive byte for byte ─────────┘

snapshot/hlc.c chính là output của trình biên dịch, được commit trong cây và content-address bằng snapshot/MANIFEST.json. make bootstrap biên dịch snapshot C đã commit bằng trình biên dịch C của hệ thống, rồi bắt trình biên dịch Halis vừa dựng phải tái dựng snapshot đó byte for byte. Một snapshot cũ hoặc bị sửa tay sẽ làm build fail ngay lập tức — không có cách nào “sửa” nó bằng cách sửa file, vì manifest đã ghim digest.

Trường Giá trị
Phiên bản {bootstrap.version}
Số dòng 43.610
Số byte 3.075.424
SHA-256 {bootstrap.sha256}
Closure digest {bootstrap.closureDigest}
Số file trong closure 20

make snapshot-chain đi xa hơn: nó chạy toàn bộ bootstrap thành hai lần ignition độc lập, so từng bước byte for byte — mỗi vòng so với snapshot, vòng này so với vòng kia — rồi in ra chain digest.

CC2=clang chứng minh một compiler khác ở slot đầu vẫn ra cùng byte. Đó mới là bài kiểm tra thật: điểm cố định không phụ thuộc vào việc C compiler nào đang được cài.

Interpreter dưới tools/hlinterp/ chỉ là công cụ phòng thí nghiệm cho bộ test vi sai. Không đường build, release hay snapshot nào đọc nó. Đây là một ràng buộc có chủ đích, không phải tai nạn của cách làm.