나는 Rust moving가 lvalues에 적용되었고 moving-from 오브젝트가 사용되지 않는다는 것을 정적으로 강요한다는 것을 알았습니다.Rust의 소유권 의미는 Clean 및 Mercury에서 볼 수있는 고유성 유형화와 어떤 관련이 있습니까?
클린 및 머큐리의 고유성 유형 지정과 관련하여 이러한 의미는 어떻게됩니까? 그들은 같은 개념입니까? 그렇지 않다면 어떻게 다릅니 까?
나는 Rust moving가 lvalues에 적용되었고 moving-from 오브젝트가 사용되지 않는다는 것을 정적으로 강요한다는 것을 알았습니다.Rust의 소유권 의미는 Clean 및 Mercury에서 볼 수있는 고유성 유형화와 어떤 관련이 있습니까?
클린 및 머큐리의 고유성 유형 지정과 관련하여 이러한 의미는 어떻게됩니까? 그들은 같은 개념입니까? 그렇지 않다면 어떻게 다릅니 까?
Rust의 소유권 개념은 수증기와 Clean의 고유성과 동일하지 않습니다. 둘 다 정적 검사를 통해 안전성을 제공한다는 점에서 관련이 있지만 둘 다 내부의 참조 번호로 정의됩니다 범위. 주요 차이점은 다음과 같습니다.
고유성은보다 추상적 인 개념입니다. Rust의 lvalues처럼 메모리 위치에 대한 참조가 고유하다고 말하는 것으로 해석 할 수 있지만 극단적이지만 일반적인 예제를 제공하기 위해 유니버스의 모든 개체 상태와 같은 추상 값에도 적용 할 수 있습니다. 그러한 값에 해당하는 포인터는 없으며, 디버거 또는 다른 어떤 곳에서도 열어서 검사 할 수는 없지만 다른 추상 유형과 마찬가지로 인터페이스를 통해 사용할 수 있습니다. 목표는 값 지향 의미 부여를 제공하여 상태 유지 상태에서 일관성을 유지하는 것입니다.
적어도 Mercury에서는 고유성이 하나의 참조 만 있어야한다는 점에서 고유성은 소유권보다 제한된 개념입니다. Rust에서 할 수있는 것처럼, 참고 문헌의 여러 사본을 쓸 수 없다는 조건으로 여러 사본을 공유 할 수 없습니다. 당신은 또한 쓰기를위한 참고서를 빌려줄 수는 없지만, 차용인이 차용을 마친 후에 차후에 그것을 얻을 수 있습니다.
Mercury에서 고유 한 것을 선언한다고해서 참조에 대한 쓰기가 보장되는 것은 아니며, 컴파일러가 안전하게 수행 할 수 있는지 확인합니다. 구현이 특정 위치에서 업데이트가 아닌 고유 한 참조의 내용을 복사하는 것은 여전히 유효합니다. 컴파일러는 지정된 최적화 수준에서 적절하다고 판단되면 업데이트를 준비합니다. 또는 추상 유형의 작성자는 사용자가 수동으로 해당 유형과 일치하는 방식으로 추상 유형을 사용해야한다는 지식에서 수동으로 유사한 (또는 때로는 더 나은) 최적화를 수동으로 수행 할 수 있습니다. 반면에 Rust의 소유권은 메모리 모델에보다 직접적으로 연결되어 동작에 대한 더 강력한 보장을 제공합니다.