Giả sử bạn có một số ngôn ngữ lập trình với quản lý bộ nhớ thủ công. Ngôn ngữ này cần có những tính năng gì để có thể triển khai bộ sưu tập rác chính xác như một thư viện chứ không phải là cấu trúc ngôn ngữ cơ bản?
Theo một GC chính xác, ý tôi là một trong đó chỉ các con trỏ tới heap được chuyển qua để xác định biến nào là hoặc không tồn tại.
Một số cân nhắc bổ sung:
- C và C ++ có trình thu gom rác Boehm, nhưng tôi không tính điều này vì nó không phải là một GC chính xác. Trình thu thập Boehm giả định rằng mọi thứ trên ngăn xếp có thể là một con trỏ, hoàn toàn dựa trên các yêu cầu căn chỉnh bộ nhớ, là một con trỏ. Ví dụ, bất kỳ số nguyên
k
nào(k % 4) == 0
nhìn ở mức bit như con trỏ, vì các con trỏ phải được căn chỉnh 4 byte. - magpie biến đổi mã C hiện có để sử dụng trình thu gom rác chính xác. Mã C được tạo ra có rất nhiều sơ khai để thu gom rác, tức là công cụ để đăng ký bất kỳ con trỏ ngăn xếp nào vào đống với bộ thu. Tôi không tính điều này bởi vì không ai có thể mong đợi viết mã theo cách đó; đó là mục tiêu biên dịch cho các ngôn ngữ khác.
Tôi tưởng tượng rằng một ngôn ngữ như vậy sẽ cần phải có:
- Macro hoặc một số hình thức siêu lập trình, để đóng gói tất cả các mã bổ sung cần thiết để thực hiện những việc như đăng ký gốc GC.
- Một số cơ chế phản chiếu cho phép bạn kiểm tra các cấu trúc hoặc công đoàn; bạn cần xác định thành viên nào là con trỏ.
- Một số cơ chế phản chiếu cho phép bạn kiểm tra bố cục khung ngăn xếp. Điều này nghe có vẻ khó hơn 2.
Tôi hy vọng điều này không quá mơ hồ hoặc dựa trên ý kiến nhưng tôi đã tự hỏi về nó trong một thời gian.