Как семантика владения Rust связана с уникальной типизацией, как в "Чистом и ртутном"?

Я заметил, что в Rust перемещение применяется к lvalues, и статически обеспечивается, что перемещенные объекты не используются.

Как эти семантики связаны с уникальной типизацией, как в "Чистом и ртутном"? Это одна и та же концепция? Если нет, чем они отличаются?

1 ответ

Решение

Концепция владения в Rust - это не то же самое, что уникальность в Mercury и Clean, хотя они связаны тем, что оба стремятся обеспечить безопасность посредством статической проверки, и оба они определены с точки зрения количества ссылок в пределах области. Ключевые отличия:

  • Уникальность - более абстрактное понятие. Хотя это можно интерпретировать как высказывание о том, что ссылка на ячейку памяти уникальна, как, например, значения l в Rust, она также может применяться к абстрактным значениям, таким как состояние каждого объекта во вселенной, чтобы дать экстремальный, но типичный пример. Нет указателя, соответствующего такому значению - его нельзя открыть и проверить в отладчике или чем-то подобном - но его можно использовать через интерфейс, как и любой другой абстрактный тип. Цель состоит в том, чтобы дать ценностно-ориентированную семантику, которая остается последовательной в присутствии состояния.

  • По крайней мере в Mercury (я не могу говорить за Чистоту), уникальность является более ограниченным понятием, чем владение, в котором должна быть ровно одна ссылка. Вы не можете поделиться несколькими копиями ссылок при условии, что они не будут записаны, как это может быть сделано в Rust. Вы также не можете одолжить ссылку для написания, но получите ее позже, когда заемщик закончит с ней.

  • Объявление чего-то уникального в Mercury не гарантирует, что будет происходить запись в ссылки, просто то, что компилятор проверит, что это будет безопасно; для реализации все еще допустимо копировать содержимое уникальной ссылки, а не обновлять ее на месте. Компилятор организует обновление на месте, если сочтет это целесообразным на заданном уровне оптимизации. Альтернативно, авторы абстрактных типов могут выполнять аналогичные (или иногда значительно лучшие) оптимизации вручную, будучи уверенными в том, что пользователи будут вынуждены использовать абстрактный тип способом, который им соответствует. С другой стороны, владение в Rust напрямую связано с моделью памяти и дает более сильные гарантии поведения.

Другие вопросы по тегам