고유성형
Uniqueness type유형 시스템 |
---|
일반개념 |
주요 카테고리 |
부분류 |
컴퓨팅에서, 독특한 유형은 객체가 단일 스레드 방식으로 사용됨을 보증하며, 기껏해야 단일 참조를 한다.값이 고유한 유형을 갖는 경우, 적용된 함수를 최적화하여 개체 코드의 인플레이스 값을 업데이트할 수 있다.이러한 인플레이스 업데이트는 참조 투명성을 유지하면서 기능 언어의 효율성을 향상시킨다.기능적 프로그래밍과 명령적 프로그래밍을 통합하는 데에도 고유한 유형을 사용할 수 있다.
소개
고유성 타이핑은 예를 사용하여 가장 잘 설명된다.함수를 고려하다readLine
지정된 파일에서 다음 줄의 텍스트를 읽음:
함수 readLine(File f)은 문자열 라인 = doImperativeReadLineCall(f) 끝단인 문자열 리턴 라인을 반환함
지금doImperativeReadLineSystemCall
파일에서 현재 위치를 변경하는 부작용이 있는 OS 레벨 시스템 호출을 사용하여 파일에서 다음 줄을 읽는다.그러나 이는 참조 투명성을 위반하는 것으로, 동일한 인수로 여러 번 호출하면 파일의 현재 위치가 이동될 때마다 매번 다른 결과가 반환되기 때문이다.이것은 차례로 만들어진다.readLine
참조 투명성을 침해하다. 왜냐하면 그것이 부르기 때문이다.doImperativeReadLineSystemCall
.
그러나 고유성 타이핑을 사용하여 의 새로운 버전을 구성할 수 있다.readLine
참조적으로 투명하지 않은 기능 위에 구축되었음에도 불구하고 참조적으로 투명함:
readLine2(Unique File f) return (unique File, String) return (differentF, line) 여기서 String line = doImperativeReadLineSystemCall(f) 파일 differentF = newFileFromingFile(f) end
그unique
선언에 따르면f
그것은 독특하다. 즉f
의 호출자가 다시 언급할 수 없다.readLine2
다음에readLine2
반품, 그리고 이 제한은 형식 시스템에 의해 시행된다.그리고 그 이후로readLine2
돌아오지 않다f
그 자체보다는 새롭고 다른 파일 객체differentF
, 이것은 그것이 불가능하다는 것을 의미한다.readLine2
로 부름을 받다f
따라서 참조 투명성을 유지하면서 부작용이 발생할 수 있다.
프로그래밍 언어
고유성 유형은 Clean, Mercury, SAC, Idris와 같은 기능 프로그래밍 언어로 구현된다.그들은 때때로 모나드 대신 기능 언어로 I/O 작업을 하는 데 사용된다.
스칼라 프로그래밍 언어에 대한 컴파일러 확장자가 개발되었는데, 스칼라 프로그래밍 언어는 주석을 사용하여 배우들 사이에 메시지가 전달되는 맥락에서 고유성을 다룬다.[1]
선형 입력에 대한 관계
고유 형식은 선형 형식과 매우 유사하여, 용어가 서로 교환하여 사용되는 경우가 많지만, 사실 구별이 있다: 실제 선형 타이핑을 통해 비선형 값을 선형 형태로 타이캐스트할 수 있고, 그에 대한 여러 참조를 여전히 유지할 수 있다.고유성은 값에 대한 다른 참조가 없음을 보증하는 반면, 선형성은 값에 대한 참조가 더 이상 이루어질 수 없음을 보장한다.[2]
참고 항목
참조
- ^ Haller, P.; Odersky, M. (2010), "Capabilities for uniqueness and borrowing", ECOOP 2010—Object-Oriented Programming (PDF), pp. 354–378
- ^ Wadler, Philip (17–19 June 1991). Is there a use for linear logic?. ACM SIGPLAN symposium on partial evaluation and semantics-based program manipulation (PEPM '91). pp. 255–273. CiteSeerX 10.1.1.26.4202. doi:10.1145/115865.115894. ISBN 0-89791-433-3.
외부 링크
![]() | 이 기사의 외부 링크 사용은 위키피디아의 정책이나 지침을 따르지 않을 수 있다. 많거나 한 적절한 를 로 하여 이 하십시오.(2013년 2월) (이 메시지를 하는 방법 및 |
프로그래밍 언어의 고유성 타이핑에 대한 논의
- Lively Linear Lisp - '마, 쓰레기 없어!'
- 선형논리와 순열 스택--첫번째가 될 것
- 기능 데이터 구조를 위한 지연 및 고정 포인터로 기준 카운트 업데이트 최소화
- '한 번 사용' 변수 및 선형 개체 - 스토리지 관리, 반사 및 다중 스레딩