“Simple intent” không có nghĩa là trình biên dịch có khả năng đọc được suy nghĩ của con người. Nó có nghĩa là mã nguồn ở bề mặt nên thể hiện trực tiếp ý định của người viết, còn các chi tiết kỹ thuật có thể suy luận logic một cách đáng tin cậy thì hãy để trình biên dịch tự gánh vác.
Một hàm cộng hai số không cần phải mang theo một bài phát biểu dài dòng về cách quản lý bộ nhớ. Một bộ phân tích cú pháp nhận vào một lát cắt dữ liệu view[u8] không nên buộc người viết phải đánh vần toàn bộ đại số lifetime phức tạp nếu phạm vi mượn tạm đã quá rõ ràng. Một giá trị được chuyển giao quyền sở hữu nên sử dụng một cú pháp trực quan nhất, rồi bộ kiểm tra quyền sở hữu sẽ tự động ngăn chặn mọi hành vi cố tình tái sử dụng nó về sau.
Nhưng suy luận kiểu dữ liệu (inference) chỉ thực sự tốt khi nó không che giấu đi sự thật của máy tính bên dưới. Nếu trình biên dịch tự ý chọn một hành vi có chi phí vận hành đáng kể mà người đọc code không hề nhìn thấy, sự "đơn giản" đã biến tướng thành "bí mật". DUY vì thế chia thế giới thiết kế thành hai phần:
- Các chi tiết có thể tự động suy luận mà không làm thay đổi bản chất của chương trình;
- Các quyết định trực tiếp ảnh hưởng đến quyền sở hữu (ownership), cấp phát bộ nhớ (allocation), I/O, vùng nguy hiểm (unsafe) hoặc đa luồng (concurrency).
Phần thứ nhất nên được compiler tự động xử lý. Phần thứ hai bắt buộc phải xuất hiện tường minh trong kiểu dữ liệu, effect, ranh giới an toàn hoặc chữ ký API.
Đây là một quan điểm thiết kế có phần bảo thủ. Nó từ chối cả hai cực đoan: bắt lập trình viên phải khai báo từng chi tiết nhỏ nhất sát máy tính, hoặc giấu nhẹm đi mọi chi phí vận hành đằng sau một runtime nặng nề. Thay vào đó, DUY tìm kiếm một con đường trung dung: code đọc lên giống như ý định tự nhiên của con người, nhưng vẫn cho phép một kỹ sư hệ thống nhìn vào chữ ký hàm và ước lượng chính xác hành vi thực tế của nó dưới phần cứng.
Tôi muốn một người mới bắt đầu có thể viết chương trình đầu tiên mà không bắt buộc phải đọc trước ba luận văn về lý thuyết kiểu. Nhưng tôi cũng yêu cầu một kỹ sư hệ thống khi mở chữ ký API phải biết ngay hàm này có thể làm gì với bộ nhớ và thế giới bên ngoài. Hai mong muốn ấy không hề mâu thuẫn về mặt triết lý. Chúng chỉ khiến trình biên dịch phải làm việc vất vả hơn mà thôi.
Simple intent là mặt trước của lời hứa. Mặt sau của nó là visible cost.
Bình luận (0)
Đang tải bình luận...