일등 시민

First-class citizen

프로그래밍 언어 설계에서 특정 프로그래밍 언어의 퍼스트 클래스 시티즌(타입, 객체, 엔티티 또는 도 포함)은 다른 엔티티가 일반적으로 사용할 수 있는 모든 작업을 지원하는 엔티티입니다.이러한 연산에는 일반적으로 인수로 전달되고 함수에서 반환되며 [1]변수에 할당되는 작업이 포함됩니다.

역사

1등급과 2등급 물체의 개념은 1960년대에 [2][3]크리스토퍼 스트레이시에 의해 도입되었다.그는 실제로 이 용어를 엄격하게 정의하지는 않았지만, ALGOL의 실수와 절차를 대조했다.

퍼스트 클래스 및 세컨드 클래스 오브젝트ALGOL에서는 실수는 식에 나타나거나 변수에 할당되어 프로시저 콜에서 어느 쪽인가 실제 파라미터로 표시될 수 있습니다.한편 프로시저는 다른 프로시저 호출에 연산자(가장 일반적인 경우) 또는 실제 파라미터 중 하나로만 표시될 수 있습니다.절차를 포함하거나 결과가 절차인 다른 표현은 없습니다.따라서 ALGOL에서의 절차는 2등급 시민입니다.항상 직접 나타나야 하며 변수나 식(포멀 파라미터의 경우 제외)으로 나타낼 수 없습니다.[4]

로빈 포플스톤은 다음과 같은 정의를 내렸다.모든 품목에는 일정한 기본권이 있습니다.

  1. 모든 항목이 함수의 실제 매개 변수가 될 수 있습니다.
  2. 모든 아이템을 함수의 결과로 반환할 수 있습니다.
  3. 모든 품목이 할당문의 주제가 될 수 있습니다.
  4. 모든 항목이 [5]동일한지 테스트할 수 있습니다.

1990년대에 라파엘[6] 핑클은 2등급과 3등급 값의 정의를 제안했지만, 이러한 정의는 널리 [7][better source needed]채택되지 않았다.

정수나 부동 소수점 수 등 가장 단순한 스칼라 데이터 유형은 거의 항상 퍼스트 클래스입니다.

많은 오래된 언어에서 배열과 문자열은 퍼스트 클래스가 아닙니다.즉, 오브젝트로 할당하거나 서브루틴에 파라미터로 전달할 수 없습니다.예를 들어 Fortran IV와 C는 어레이 할당을 지원하지 않으며, 파라미터로 전달되면 첫 번째 요소의 위치만 실제로 전달되고 크기는 손실됩니다.C는 어레이 포인터의 할당을 지원하는 것처럼 보이지만, 실제로는 어레이의 첫 번째 요소에 대한 포인터일 뿐이며 어레이의 크기를 가지지 않습니다.

대부분의 언어에서 데이터 유형은 퍼스트 클래스 개체가 아니지만 일부 객체 지향 언어에서는 클래스가 퍼스트 클래스 개체이며 메타클래스의 인스턴스입니다.

1등급 개체는 고사하고 개체로 연속성과 GOTO 레이블을 지원하는 언어는 거의 없습니다.

개념. 묘사 언어들
일급 함수 폐쇄익명 기능 Dart, Scheme, ML, Haskell, F#, Kotlin, Scala, Swift, Perl, PHP, Python, Raku, JavaScript, Delphi, Rust
제1종 제어 속행 스킴, ML, F#
일등형 종속형 Coq, 이드리스, 아그다
일급 데이터형 범용 해스켈, C++11
제1종 다형 추정 다형
일급 메시지 다이내믹 메시지(호출 콜) Smalltalk,[8] Objective-C[8]
일등석 메타클래스 Smalltalk, Objective-C, Ruby, Python, Delphi
일급 교정쇄 프루프루프 오브젝트[9] Coq, 아그

기능들

많은 프로그래밍 언어가 함수 값 전달 및 반환을 지원하며, 이는 인수에 적용할 수 있습니다.이것이 함수값을 퍼스트 클래스라고 부르기에 충분한지 여부는 논쟁의 여지가 있다.

일부 저자는 런타임에 새로운 함수를 만들어 '퍼스트 클래스'[citation needed]라고 부를 수 있도록 요구합니다.이 정의에 따르면 C의 함수는 1등급 객체가 아니라 2등급 객체라고 불리기도 합니다.는 함수 포인터를 통해 상기의 대부분 방식으로 조작할 수 있기 때문입니다.

Smalltalk에서 함수(메서드)는 Smalltalk 클래스와 마찬가지로 퍼스트 클래스 객체입니다.Smalltalk 연산자(+, - 등)는 메서드이기 때문에 퍼스트 클래스 오브젝트이기도 합니다.

반사

Java PHP와 같은 일부 언어에는 일반적인 개체와 같은 방식으로 접근하거나 조작할 수 없는 경우에도 내부 구현 구조에 액세스할 수 있는 명시적 반사 서브시스템이 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Scott, Michael (2006). Programming Language Pragmatics. San Francisco, CA: Morgan Kaufmann Publishers. p. 140. ISBN 9780126339512.
  2. ^ Rod Burstall, "Christopher Stracey - 프로그래밍 언어에 대하여", 고차심볼릭 연산 13:52 (2000)
  3. ^ Harold Abelson과 Gerald Jay Sussman, 컴퓨터 프로그램의 구조와 해석, 제2판, 섹션 1.3.4 각주 64 웨이백 머신에서 2015-03-09 아카이브
  4. ^ Christopher Stracey, "프로그래밍 언어의 기본 개념" 고차 심볼릭 계산 13:11 (2000); 2000년에 출판되었지만, 이것은 Stracey가 1967년 8월에 행한 강의에서 나온 메모입니다.
  5. ^ R. J. 포플스톤:POP-2의 설계 철학 (D)미치:1968년 에든버러 대학 출판부 기계 인텔리전스 3,
  6. ^ Finkel, R. Advanced Programming Language Design, 페이지 73
  7. ^ Norman Ramsey. "About first-,second- and third-class value". stackoverflow.com. Retrieved 14 September 2013.
  8. ^ a b Paritosh Shroff, Scott F.Smith. 일치 함수가 있는 퍼스트 클래스 메시지에 대한 유형 추론
  9. ^ Bove, Ana; Dybjer, Peter (2009). "Dependent Types at Work" (PDF). Language Engineering and Rigorous Software Development. Lecture Notes in Computer Science. 5520: 57–99. doi:10.1007/978-3-642-03153-3_2. ISBN 978-3-642-03152-6. Archived (PDF) from the original on April 2, 2014. Retrieved 8 June 2015. (아카이브도 완료)