Tôi muốn hiểu rõ hơn về thực tập của ví dụ: Data.Map. Khi tôi chèn một ràng buộc mới vào một Bản đồ, sau đó, vì tính bất biến của dữ liệu tôi lấy lại một cấu trúc dữ liệu mới giống hệt với cấu trúc dữ liệu cũ cộng với ràng buộc mới.Toàn bộ Bản đồ có được sao chép khi chèn một ràng buộc mới không?
Tôi muốn hiểu cách thực hiện điều này. Cuối cùng, trình biên dịch có triển khai thực hiện việc này hay không bằng cách sao chép toàn bộ cấu trúc dữ liệu với ví dụ: hàng triệu ràng buộc? Có thể nói chung rằng cấu trúc/mảng dữ liệu có thể thay đổi (ví dụ: Data.Judy) hoặc ngôn ngữ lập trình bắt buộc hoạt động tốt hơn trong các trường hợp như vậy? Dữ liệu bất biến có lợi thế gì khi nói đến từ điển/kho khóa-giá trị không?
Câu trả lời không thể trả lời! –
Nếu đây là tất cả các con trỏ mỗi khi chênh lệch tốc độ chèn vào [mảng Judy] (http://donsbot.wordpress.com/2009/09/26/very-fast-scalable-mutable-maps-and-hashes -for-haskell /) đến từ đâu? –
@JFritsch: Vâng, nó vẫn phải xây dựng các phần đã sửa đổi của cây. Tuy nhiên, nếu bạn không cần bất kỳ ưu điểm bất biến có lợi thế nào (mô hình lập trình đơn giản hơn nhiều, bạn có thể giữ nhiều phiên bản được sửa đổi xung quanh mà không cần lưu trữ toàn bộ bản sao, vv), sau đó tất nhiên chỉ cần viết trực tiếp vào bộ nhớ sẽ nhanh hơn. Nhưng nó thường không phải là một sự khác biệt lớn như bạn nghĩ. – ehird