선형성은 고유 한 상태 저장 표현을 고정하기에 충분한 제약이 아니므로 질문에 대한 답변은 상태 측면에서 선형 논리를 해석하는 방법에 따라 다릅니다. 이것은 일반적으로 양식 을 어떻게 해석해야하는지에 반영됩니다 .! ㅏ
의도 한 참조 의미론에서 모든 포인터가 고유 한 값이라고 말하면 (즉, 객체에 대한 단일 참조가 하나만 있음) dag 및 그래프 구조는 표현할 수 없습니다. 같은 객체. 이 경우 는 맵 및 \ epsilon_A :! A \ multimap A 를 원하므로 유형 새 값을 작성 하는 계산 이어야합니다 .! ㅏδ A : ! ⊸ ! ⊗ ! A ϵ A : ! A ⊸ Aㅏδㅏ: ! ⊸ ! ⊗ ! ㅏϵㅏ: ! A ⊸ A
그러나 가 공유 를 나타내 기를 원한다고 가정하십시오 . 그런 다음, 및 맵을 사용하여 참조 카운트를 사용하여 객체를 가비지 수집 할 수 있습니다. 이 경우 공유가 있기 때문에 값을 변경하는 것이 안전하다고 가정하기 위해 선형성을 사용할 수 없습니다. 그러나 프로그램에서 모든 메모리 할당이 명시 적이며 힙에주기가 없는지 확인할 수 있습니다.δ A : ! ⊸ ! ⊗ ! A ϵ A : ! A ⊸ A! ㅏδㅏ: ! ⊸ ! ⊗ ! ㅏϵㅏ: ! A ⊸ A
선형 유형의 대부분의 실제 구현은 이 두 가지 해석 중 어느 것도 사용 하지 않습니다 . 대신, 참조는 자유롭게 복제 가능한 엔티티로 간주되며 선형 적으로 추적하는 것은 실제로 기능 입니다. 기능은 런타임 값이 아닙니다. 그것들은 참조에 접근 할 수있는 권한을 나타 내기위한 순전히 개념적 개체입니다. 아이디어는 권한 전달 스타일로 프로그래밍하는 것이므로 동일한 객체에 대한 참조가 많더라도 상태에 대한 읽기 또는 수정은 액세스 할 수있는 경우에만 발생할 수 있습니다. 기능이 선형이기 때문에 사용자 만 변경할 수 있다는 것을 알고 있습니다.
N E wg의 전자 ts e tc o p y::::∀ α .α ⊸ ∃ c : ι . c a p ( c ) ⊗ r e f( α , c )∀ α , c : ι .c a p (c)⊗ r e f( α , c ) ⊸ α ⊗ c a p ( c ) ⊗ r e f( α , c )∀ α , c : ι .c a p (c)⊗ r e f(α,c)⊗α⊸cap(c)⊗ref(α,c)∀α,c:ι.ref(α,c)⊸ref(α,c)⊗ref(α,c)
위에서 설명한 API에서 는 범위 , 일부 컴파일 시간 인덱스 도메인 및 범위 유형입니다. 우리는 유형이 에 의해 색인 능력이다 , 및 유형 참조의 유형입니다, 능력에 액세스 . 참조에서 및 를 호출 하려면 기능 가 필요하고 를 호출 하면 공통 참조를 공유하는 새 참조 및 새 기능이 작성됩니다. 그러나ι α c a p ( c ) c r e f ( α , c ) α c g e t s e t c n e w c o p ycιαcap(c)cref(α,c)αcgetsetcnewcopy-참조는 기능에 액세스 할 필요가 없으므로 참조를 보지 않는 한 누구나 참조를 복사 할 수 있습니다.