선형 유형의 프로그래밍 언어의 데이터 구조


15

선형 유형을 지원하는 프로그래밍 언어를 처리한다고 가정합니다 (선형 유형의 용어는 최대 한 번 사용할 수 있습니다). 이를 통해 언어에 문제가되는 방식으로 일부 계산 효과 (예 : 돌연변이, 피연산자의 유형 변경)를 처리 할 수 ​​있습니다. 유형 시스템은 "영원한 진리"에서만 작동합니다.

많은 데이터 구조는 귀납적 유형으로 특성화 될 수 있습니다 (목록과 트리는 표준 예입니다). 믹스에 선형 유도 형을 추가하면 가변 데이터 구조도 처리 할 수 ​​있습니다.

그러나 선형 유형의 프로그래밍 언어에서 공유 및 순환 참조 를 나타내는 데이터 구조를 나타내는 방법은 명확하지 않습니다 (이러한 데이터 구조의 예는 인접 목록 또는 다른 것으로 순환 목록으로 표시되는 DAG 및 기타 그래프입니다). 그렇게 할 수 있습니까? 가능하지 않다면 그러한 데이터 구조를 수용 할 수 있도록 언어를 어떻게 확장해야합니까?

지금까지 찾은 가장 관련성이 높은 예제는 이중 연결 목록입니다. 다른 예가 있습니까?

답변:


20

선형성은 고유 한 상태 저장 표현을 고정하기에 충분한 제약이 아니므로 질문에 대한 답변은 상태 측면에서 선형 논리를 해석하는 방법에 따라 다릅니다. 이것은 일반적으로 양식 을 어떻게 해석해야하는지에 반영됩니다 .!A

의도 한 참조 의미론에서 모든 포인터가 고유 한 값이라고 말하면 (즉, 객체에 대한 단일 참조가 하나만 있음) dag 및 그래프 구조는 표현할 수 없습니다. 같은 객체. 이 경우 는 맵 및 \ epsilon_A :! A \ multimap A 를 원하므로 유형 새 값을 작성 하는 계산 이어야합니다 .!Aδ A : ! ! ! A ϵ A : ! A AAδA:!A!A!AϵA:!AA

그러나 가 공유 를 나타내 기를 원한다고 가정하십시오 . 그런 다음, 및 맵을 사용하여 참조 카운트를 사용하여 객체를 가비지 수집 할 수 있습니다. 이 경우 공유가 있기 때문에 값을 변경하는 것이 안전하다고 가정하기 위해 선형성을 사용할 수 없습니다. 그러나 프로그램에서 모든 메모리 할당이 명시 적이며 힙에주기가 없는지 확인할 수 있습니다.δ A : ! ! ! A ϵ A : ! A A!AδA:!A!A!AϵA:!AA

선형 유형의 대부분의 실제 구현은 이 두 가지 해석 중 어느 것도 사용 하지 않습니다 . 대신, 참조는 자유롭게 복제 가능한 엔티티로 간주되며 선형 적으로 추적하는 것은 실제로 기능 입니다. 기능은 런타임 값이 아닙니다. 그것들은 참조에 접근 할 수있는 권한을 나타 내기위한 순전히 개념적 개체입니다. 아이디어는 권한 전달 스타일로 프로그래밍하는 것이므로 동일한 객체에 대한 참조가 많더라도 상태에 대한 읽기 또는 수정은 액세스 할 수있는 경우에만 발생할 수 있습니다. 기능이 선형이기 때문에 사용자 만 변경할 수 있다는 것을 알고 있습니다.

이자형:α.α:ι.()아르 자형이자형에프(α,)이자형:α,:ι.()아르 자형이자형에프(α,)α()아르 자형이자형에프(α,)에스이자형:α,:ι.()아르 자형이자형에프(α,)α()아르 자형이자형에프(α,)영형와이:α,:ι.아르 자형이자형에프(α,)아르 자형이자형에프(α,)아르 자형이자형에프(α,)

위에서 설명한 API에서 는 범위 , 일부 컴파일 시간 인덱스 도메인 및 범위 유형입니다. 우리는 유형이 에 의해 색인 능력이다 , 및 유형 참조의 유형입니다, 능력에 액세스 . 참조에서 및 를 호출 하려면 기능 가 필요하고 를 호출 하면 공통 참조를 공유하는 새 참조 및 새 기능이 작성됩니다. 그러나ι α c a p ( c ) c r e f ( α , c ) α c g e t s e t c n e w c o p yια()아르 자형이자형에프(α,)α이자형setcnewcopy-참조는 기능에 액세스 할 필요가 없으므로 참조를 보지 않는 한 누구나 참조를 복사 할 수 있습니다.


생각을 자극하는 답변에 감사드립니다. 그래도 관심이 있습니다. 앨리어싱과 공유 사이에 (기술적 인) 차이점이 있습니까? 선형 적으로 (최대 하나의 참조)에서 최대 n 개의 참조로 공유되고 무제한으로 공유되는 시스템이 있습니까?

1
1. 앨리어싱 및 공유는 동의어입니다. 2. 예, Boyland의 소수 허가로 보강 된 역량 스타일 해석 이이를 허용합니다. 이론에 대한 능력 계산법에 대한 Pottier의 최근 연구와 구현을위한 Alural 및 Bierhof의 Plural에 대한 연구를 참조하십시오.
Neel Krishnaswami
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.