2014-10-10 5 views

답변

8

Rust의 소유권 개념은 수증기와 Clean의 고유성과 동일하지 않습니다. 둘 다 정적 검사를 통해 안전성을 제공한다는 점에서 관련이 있지만 둘 다 내부의 참조 번호로 정의됩니다 범위. 주요 차이점은 다음과 같습니다.

  • 고유성은보다 추상적 인 개념입니다. Rust의 lvalues처럼 메모리 위치에 대한 참조가 고유하다고 말하는 것으로 해석 할 수 있지만 극단적이지만 일반적인 예제를 제공하기 위해 유니버스의 모든 개체 상태와 같은 추상 값에도 적용 할 수 있습니다. 그러한 값에 해당하는 포인터는 없으며, 디버거 또는 다른 어떤 곳에서도 열어서 검사 할 수는 없지만 다른 추상 유형과 마찬가지로 인터페이스를 통해 사용할 수 있습니다. 목표는 값 지향 의미 부여를 제공하여 상태 유지 상태에서 일관성을 유지하는 것입니다.

  • 적어도 Mercury에서는 고유성이 하나의 참조 만 있어야한다는 점에서 고유성은 소유권보다 제한된 개념입니다. Rust에서 할 수있는 것처럼, 참고 문헌의 여러 사본을 쓸 수 없다는 조건으로 여러 사본을 공유 할 수 없습니다. 당신은 또한 쓰기를위한 참고서를 빌려줄 수는 없지만, 차용인이 차용을 마친 후에 차후에 그것을 얻을 수 있습니다.

  • Mercury에서 고유 한 것을 선언한다고해서 참조에 대한 쓰기가 보장되는 것은 아니며, 컴파일러가 안전하게 수행 할 수 있는지 확인합니다. 구현이 특정 위치에서 업데이트가 아닌 고유 한 참조의 내용을 복사하는 것은 여전히 ​​유효합니다. 컴파일러는 지정된 최적화 수준에서 적절하다고 판단되면 업데이트를 준비합니다. 또는 추상 유형의 작성자는 사용자가 수동으로 해당 유형과 일치하는 방식으로 추상 유형을 사용해야한다는 지식에서 수동으로 유사한 (또는 때로는 더 나은) 최적화를 수동으로 수행 할 수 있습니다. 반면에 Rust의 소유권은 메모리 모델에보다 직접적으로 연결되어 동작에 대한 더 강력한 보장을 제공합니다.