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

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

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

Ответы

Ответ 1

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

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

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

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