Tập 09: Deterministic memory

Bộ thu gom rác (Garbage Collector - GC) là một trong những phát minh vĩ đại nhất của ngành khoa học máy tính. Vì thế, quyết định không sử dụng tracing GC làm nền tảng mặc định cho DUY không phải là một phán xét mang tính định kiến; nó đơn giản là một lựa chọn bắt buộc về mặt phạm vi ứng dụng.

DUY được định hướng để có thể biên dịch chạy native, chạy độc lập freestanding không cần hệ điều hành, chạy trên mạch nhúng bare-metal và thậm chí làm nhân hệ điều hành. Ở những miền đất ấy, thời điểm giải phóng bộ nhớ, đỉnh bộ nhớ sử dụng (memory peak) và chi phí gián đoạn của runtime không thể phó mặc hoàn toàn cho một cơ chế nền chạy ngầm khó dự đoán. Nhưng nếu quay lại thời kỳ cấp phát thủ công bằng mallocfree khắp nơi, chúng ta chỉ đang đổi một loại phức tạp lấy một loại tai nạn rò rỉ bộ nhớ quen thuộc.

Hướng đi của DUY dựa trên sự kết hợp chặt chẽ của ba khái niệm quản lý bộ nhớ:

owned  -> Ai chịu trách nhiệm giải phóng vùng nhớ này? (Quyền sở hữu)
view   -> Ai được phép nhìn hoặc truy cập tạm thời vào vùng nhớ này? (Mượn tạm)
region -> Nhóm các giá trị nào cùng chia sẻ chung một vòng đời thực thi? (Vùng nhớ chung)

owned biến quyền sở hữu bộ nhớ trở thành một dữ kiện tĩnh mà trình biên dịch có thể theo dõi và tự động chèn lệnh giải phóng ngay khi chủ sở hữu hết vòng đời. view cho phép các hàm khác đọc ghi dữ liệu mà không cần giả vờ nhận quyền sở hữu để tránh chi phí sao chép dữ liệu. region lại cực kỳ phù hợp cho các vòng đời tự nhiên của chương trình: toàn bộ các node AST được tạo ra trong một lượt phân tích cú pháp, toàn bộ dữ liệu tạm của một request HTTP, hay toàn bộ vật thể trong một khung hình (frame) của engine game. Thay vì quản lý và giải phóng từng đối tượng nhỏ nhặt, chúng ta cấp phát toàn bộ chúng trong một vùng nhớ (Arena) và giải phóng toàn bộ vùng nhớ đó một lần duy nhất khi giai đoạn xử lý kết thúc.

Mục tiêu của DUY không phải là loại bỏ hoàn toàn suy nghĩ về bộ nhớ ra khỏi đầu lập trình viên. Mục tiêu thực tế hơn là biến suy nghĩ ấy từ một kỷ luật truyền miệng dễ quên thành các ngữ nghĩa tĩnh có thể kiểm tra tự động bởi trình biên dịch.


Bình luận (0)

Đang tải bình luận...