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 ─────────┘Cách nó được cưỡng chế
Phần tiêu đề “Cách nó được cưỡng chế”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.
Snapshot hiện tại
Phần tiêu đề “Snapshot hiện tại”| 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 |
Hai lần ignition độc lập
Phần tiêu đề “Hai lần ignition độc lập”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.
Không Python trên đường sống
Phần tiêu đề “Không Python trên đường sống”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.