Không có gì đơn điệu của người Viking có nghĩa là gì trong bối cảnh có thể thay đổi


8

Tôi đang đọc Ngôn ngữ lập trình Rust và tìm thấy đoạn văn sau:

Hãy nhớ rằng viết vào một cấu trúc không phải là một hoạt động nguyên tử và nhiều chức năng như vec.push()có thể phân bổ lại bên trong và gây ra hành vi không an toàn, do đó, ngay cả sự đơn điệu có thể không đủ để biện minh UnsafeCell

Nó chỉ xuất hiện từ đâu trong cuốn sách và tôi đã có một khoảng thời gian khó khăn trên mạng để cố gắng tìm ra ý nghĩa chính xác của nó trong bối cảnh này. Quá nhiều thông tin là về khái niệm "đơn điệu" của các hàm toán học, điều mà tôi đã biết nhưng dường như không hữu ích lắm.

Tôi dường như chỉ tìm thấy bài viết này nói về nó.

Bây giờ, ngoài việc tôn trọng sự bình đẳng theo cách rõ ràng, tôi cũng bao gồm quy định rằng một chương trình chức năng phải tôn trọng sự đơn điệu của các quan sát. Ý của tôi là gì? Nó phải là một khi bạn đã quan sát một cái gì đó tại một thời điểm, thì điều đó sẽ không còn rõ ràng trong tương lai. Điều này tương tự với tính chất đơn điệu trong ngữ nghĩa Kripke hoặc Beth.

Tuy nhiên điều này cũng khá trừu tượng và tôi cũng không chắc nó cũng nói về điều tương tự.

Câu trả lời:


5

Tác giả dường như đang sử dụng cùng một khái niệm (chung) về "tính đơn điệu" như trong toán học thuần túy.

Sử dụng ví dụ về a vector, nếu kích thước của một số trường hợp cụ thể vectorlà đơn điệu, thì có vẻ hợp lý khi giả định rằng vị trí bộ nhớ của bất kỳ pushphần tử ed nào trước đó sẽ không được sửa đổi và do đó an toàn khi thay đổi trực tiếp giá trị của phần tử đó mà không phải đồng bộ hóa với các hoạt động vectortiếp theo của push.

Giả định này có vẻ hợp lý vì nhiều lý do tương tự tại sao có vẻ hợp lý khi cho rằng vị trí bộ nhớ của một phần tử trước đó được đẩy lên ngăn xếp (không phải hình tròn, dựa trên mảng, không bị ràng buộc) có kích thước tăng nghiêm ngặt sẽ không bị ảnh hưởng bởi tương lai pushhoạt động. Điều này trái ngược với một ngăn xếp mà cả hai pushvà các pophoạt động đang được gọi, và do đó, vị trí bộ nhớ của phần tử được đẩy trước đó có thể bị "loại bỏ" bởi một popthao tác và do đó có thể được gán lại một lần nữa (tức là đã sửa đổi) pushhoạt động tiếp theo .

Quan điểm của tác giả là giả định này là không chính xác, vì ngay cả trong cấu trúc dữ liệu có kích thước tăng nghiêm ngặt, các lần chèn trong tương lai có thể ảnh hưởng đến các phần tử được chèn trước đó bằng cách kích hoạt phân bổ nội bộ của một loại nào đó khác với hiệu ứng "logic" của phần chèn .


ĐỒNG Ý. Có vẻ như tôi đã vượt qua nó. Có vẻ như đó không phải là một số công cụ lý thuyết PL sâu sắc. Đoán cách nó đột nhiên được trình bày trong văn bản mà không có nhiều bối cảnh cọ xát tôi sai cách haha.
xji
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.