고유성형

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]

참고 항목

참조

  1. ^ Haller, P.; Odersky, M. (2010), "Capabilities for uniqueness and borrowing", ECOOP 2010—Object-Oriented Programming (PDF), pp. 354–378
  2. ^ 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.

외부 링크

프로그래밍 언어의 고유성 타이핑에 대한 논의

고유성 타이핑을 사용한 실험(성능 관점에서)