Trước hết, tôi muốn biết ai đang sử dụng Ada những ngày này. Tôi thực sự thích ngôn ngữ, và thậm chí còn có một thư viện GUI cho Linux/Ada, nhưng tôi đã không nghe bất cứ điều gì về hoạt động phát triển Ada trong nhiều năm. Nhờ vào các kết nối quân sự, tôi thực sự không chắc liệu lịch sử cổ đại hay thành công vang dội đến mức tất cả các đề cập đến việc sử dụng nó đều được phân loại.
Tôi nghĩ có một vài lý do không có GC trong Ada. Đầu tiên, và quan trọng nhất, nó ngày trở lại một kỷ nguyên mà hầu hết các ngôn ngữ biên dịch được sử dụng chủ yếu là ngăn xếp hoặc bộ nhớ tĩnh, hoặc trong một vài trường hợp, phân bổ heap rõ ràng/miễn phí. GC như một triết lý chung thực sự chỉ mất khoảng năm 1990 hoặc lâu hơn, khi OOP, các thuật toán và bộ xử lý quản lý bộ nhớ được cải thiện đủ mạnh để phụ tùng các chu kỳ chạy tất cả đều tự hoạt động. Điều đơn giản biên dịch Ada có thể làm cho một máy tính lớn IBM 4331 vào năm 1989 đơn giản là tàn nhẫn. Bây giờ tôi có một chiếc điện thoại di động có thể hoạt động tốt hơn CPU của máy.
Một lý do khác là có những người nghĩ rằng thiết kế chương trình nghiêm ngặt bao gồm kiểm soát chính xác tài nguyên bộ nhớ, và không nên có bất kỳ sự khoan dung nào khi cho phép các đối tượng động bị nổi. Đáng buồn thay, quá nhiều người đã bị rò rỉ bộ nhớ khi bộ nhớ động ngày càng trở nên thống trị hơn. Ngoài ra, giống như "hiệu quả" của ngôn ngữ lắp ráp trên các ngôn ngữ cấp cao và "hiệu quả" của JDBC thô trên các hệ thống ORM, "hiệu quả" của quản lý bộ nhớ thủ công có xu hướng đảo ngược khi nó tăng lên (tôi đã thấy các tiêu chuẩn ORM nơi tương đương JDBC chỉ bằng một nửa hiệu quả). Counter-online, tôi biết, nhưng những hệ thống này ngày càng tốt hơn ở việc tối ưu hóa toàn cầu các ứng dụng lớn, cộng với chúng có thể làm cho việc tối ưu hóa lại triệt để theo những thay đổi nhỏ bề ngoài. tải.
Tôi sợ rằng tôi sẽ phải khác với những người nói rằng hệ thống thời gian thực không thể đủ khả năng cho bộ nhớ GC. GC không còn là thứ bị đóng băng toàn bộ hệ thống sau mỗi vài phút. Chúng tôi có nhiều cách thông minh hơn để đòi lại bộ nhớ những ngày này.
Nguồn
2009-11-12 00:08:27
Câu hỏi hơi sai khi được nêu, vì một số * do * có GC và đó là tùy chọn có sẵn cho bất kỳ trình biên dịch trình biên dịch nào. Tôi chắc chắn hy vọng mọi người tìm kiếm trên Ada không đi qua câu hỏi này và nghĩ rằng Ada ngăn GC. –
Nó không phải là một ngôn ngữ lập trình mục đích chung. Nó được thiết kế và chỉ định cho các dự án DoD của Mỹ mà thôi. Khu vực rất khác biệt. – EJP