Tập cuối cùng của Part 1 đưa chúng ta đến với đỉnh núi của Phase T hiện tại: Generics V0 và các thuộc tính hệ thống (Sprint 140-145).
Generics cho phép viết code tái sử dụng cực kỳ mạnh mẽ, như định nghĩa một List[T] dùng chung cho mọi kiểu dữ liệu. Nhưng quyền lực luôn đi kèm hạn mức.
Nếu ngôn ngữ không kiểm soát, generics monomorphization (quá trình nhân bản code cho từng kiểu cụ thể ở compile time) có thể làm phình to kích thước file nhị phân đầu ra (binary bloat) và kéo dài thời gian biên dịch vô tận.
Chúng tôi áp dụng các quy tắc nghiêm ngặt:
- Định nghĩa giới hạn kích thước code (code-size budget).
- Phân giải generic parameter có ràng buộc (trait constraints) và kiểm tra visibility ở ranh giới module.
- Tích hợp constant evaluation cho struct & enum để tính toán giá trị tĩnh ngay compile time.
- Đưa vào hệ thống attributes V0 với các thẻ hệ thống @extern, @repr, @inline để kiểm soát ABI chặt chẽ.
Tôi nhớ khoảnh khắc viết chương trình generic list đầu tiên bằng DUY native và biên dịch thành công qua LLVM. Khi kiểm tra kích thước file binary đầu ra và thấy nó chỉ vỏn vẹn vài chục KB nhờ thuật toán loại bỏ trùng lặp mã (deduplication) hoạt động chính xác, tôi mỉm cười hài lòng. Quyền lực đã được thuần hóa bởi hạn mức.
DUY đã đi được một chặng đường rất dài. Từ một câu hỏi điên rồ ở Tập 1, qua bao lần đỏ test và đập bỏ ảo tưởng, nay trình biên dịch native đã có thể tự đứng vững trên đôi chân của mình, sẵn sàng gánh vác những thử thách lớn hơn ở Part 2. Chúng tôi dừng snapshot Part 1 tại đây. Đỉnh núi tiếp theo vẫn còn mờ trong sương, nhưng con đường dưới chân đã rõ.

Bình luận (0)
Đang tải bình luận...