탑타입
Top type수학적 논리학이나 컴퓨터학에서 일부 유형 이론과 유형 체계는 일반적으로 상단이나 기호 ⊤으로 표기되는 상위 유형을 포함한다.톱타입은 때때로 유니버설타입이라고도 부르기도 하며, 관심유형계통의 다른 모든 타입이 그것의 하위타입이며, 대부분의 경우 그것은 타이프 시스템의 가능한 모든 물체를 포함하고 있다.다른 모든 타입이 슈퍼타입이고 그 타입이 아예 멤버가 없는 경우가 많은 바텀타입, 즉 유니버설 서브타입과는 대조적이다.
프로그래밍 언어 지원
몇몇 타입의 프로그래밍 언어는 상위 타입에 대한 명시적인 지원을 제공한다.
정적인 유형 언어에서는 상위 유형을 논의할 때 종종 혼동되는 두 가지 개념이 있다.
- 런타임 클래스 계층 구조(흔히 객체 지향 프로그래밍에 관련됨) 또는 유형 계층의 맨 위에 있는 범용 기본 클래스 또는 기타 항목. 이(런타임) 유형을 사용하여 개체를 생성할 수 있거나, 이를 지원하는 언어로 프로그래밍 방식으로 유형 계층 구조를 검토할 때 찾을 수 있는 경우가 많다.
- 동적 타이핑과 유사한 모든 값(또는 개체 포인터 값과 같은 부분 집합)을 지정할 수 있는 코드에서 (비교 시간) 정적 유형
첫 번째 개념은 종종 두 번째 개념, 즉 보편적 기본 클래스가 존재한다면 이 클래스의 객체를 가리킬 수 있는 변수 또한 어떤 클래스의 객체를 가리킬 수 있다.단, 위의 두 번째 측면에서 여러 언어의 유형이 있다(예:void *C++로,id목표-C에서interface {}Go)에서는 변수가 개체 값을 수용할 수 있지만 유형 시스템에서 객체가 가질 수 있는 실제 실행 시간 유형을 반영하지 않는 정적 유형으로, 첫 번째 측면에서 상위 유형은 아니다.
동적으로 타이핑된 언어에서는 두 번째 개념이 존재하지 않기 때문에(어쨌든 어떤 값이라도 어떤 변수에 할당될 수 있다), 첫 번째(클래스 계층)만 논의된다.이 기사는 톱타입에 대해 논의할 때 첫 번째 개념에 머무르려고 하지만, 두 번째 개념이 중요한 언어에서도 언급하고 있다.
| 이름 | 언어들 |
|---|---|
Object | Smalltalk, JavaScript, Ruby(1.9.2 이전)[1] 및 기타 몇 가지. |
java.lang.Object | Java. 흔히 패키지 접두사 없이 다음과 같이 작성된다.Object. 또한 원시 유형의 슈퍼타입은 아니지만, 자바 1.5 이후 자동 복싱은 원시 값의 암묵적 또는 명시적 유형 변환을 허용한다.Object예)((Object)42).toString() |
System.Object[2] | C#, Visual Basic.NET 및 기타 .NET Framework 언어 |
std::any | C++ 17 이후 |
object | 버전 2.2의 유형/클래스 통일[3] 이후 Python(새 스타일 개체만 해당, 2.x의 이전 스타일 개체에는 기본 클래스로서의 이 기능이 없음) |
TObject | 객체 파스칼 |
t | Lisp, Common Lisp과 같은 많은 방언들 |
Any? | 코틀린[4] |
Any | 스칼라,[5] 스위프트,[6] 줄리아[7] |
ANY | 에펠[8] |
UNIVERSAL | 펄 5 |
Variant | Visual Basic 버전 6까지 |
interface{} | 가다 |
BasicObject | 루비(버전 1.9.2 이상) |
any그리고unknown[9] | TypeScript(사용 포함)unknown버전[10] 3.0에서 소개됨) |
mixed | PHP(8.0 버전 기준) |
다음과 같은 객체 지향 언어에는 범용 베이스 클래스가 없다.
- C++. 보이드 타입에 대한 포인터는 보이드 타입 자체가 유니버설 타입이 아니라 유닛 타입임에도 불구하고 어떤 비기능 포인터를 받아들일 수 있다.C++17 이후 표준 라이브러리는 최상위 유형을 제공한다.
std::any. - 목표-C.클래스에 대한 부모 클래스를 지정하지 않음으로써 새로운 기본 클래스를 만들 수 있지만 이는 매우 이례적이다.
Object원래 목표-C 실행 시간에서 기본 클래스로 사용된다.OpenStep 및 코코아 목표-C 라이브러리에서는NSObject보편적으로 보편적인 기본 등급이다.개체에 대한 포인터의 상위 유형은id. - Swift. 클래스의 부모 클래스를 지정하지 않음으로써 새로운 기본 클래스를 만들 수 있다.프로토콜
Any어떤 타입이든 받아들일 수 있다.
다른 언어
객체지향적이지 않은 언어는 보통 보편적인 슈퍼타입, 또는 하위타입의 다형성 지원이 없다.
하스켈은 의도적으로 서브타이핑이 부족하지만 파라메트릭 다형성을 포함한 몇 가지 다른 형태의 다형성을 가지고 있다.가장 일반적인 유형 클래스 매개 변수는 제한되지 않은 매개 변수임a(유형 클래스 제약 없음).러스트에서,<T: ?Sized>가장 일반적인 매개 변수(<T>그것이 암시하는 바는 아니다.Sized기본적으로 특성(temperature by default).
상위형은 파라메트릭 다형성이 없는 언어에서는 더욱 그러하듯이 일반형으로 사용된다.예를 들어 Java 5에서 제네릭을 도입하기 전에 Java 라이브러리의 수집 클래스(Java 어레이 제외)에서 유형의 참조를 보유했다.Object. 이러한 방법으로 어떤 비내성적인 타입도 컬렉션에 삽입할 수 있다.탑 타입은 알 수 없는 타입의 객체를 고정하는 데도 자주 사용된다.
최상위 유형은 정전기 없이 입력된 언어의 암시적 유형으로도 볼 수 있다.런타임 타이핑이 있는 언어는 종종 런타임에 객체에 대한 보다 구체적인 유형을 발견할 수 있도록 다운캐스트(또는 유형 세분화)를 제공한다.C++의 경우, 다음에서void *언어 실행 시간에 의해 실패한 다운캐스트가 감지되는 안전한 방법으로 수행될 수 없다.
구조유형체계가 있는 언어에서는 빈 구조가 상위유형의 역할을 한다.예를 들어 OCaml의 객체는 구조적으로 입력된다. 빈 객체 유형(메서드가 없는 객체 유형)< >는 객체 유형의 최상위 유형이다.OCAML 물체는 이 형식에 따라 명시적으로 상향 조정될 수 있지만, 결과는 아무 소용이 없다.Go는 구조 입력도 사용하며, 모든 유형은 빈 인터페이스를 구현한다.interface {}는 방법은 없지만, 더 구체적인 유형으로 되돌아갈 수도 있다.
논리적으로
상단의 개념은 또한 명제 미적분학에서도 발견되는데, 이는 가능한 모든 해석에서 사실인 공식에 해당한다.술어 미적분에서도 비슷한 의미를 갖는다.설명 논리학에서 top은 모든 개념의 집합을 가리키는 데 사용된다.이것은 직관적으로 프로그래밍 언어에서 탑 타입을 사용하는 것과 같다.예를 들어, 다양한 설명 로직을 지원하는 웹 온톨로지 언어(OWL)에서 top은 클래스에 해당한다.owl:Thing모든 클래스가 의 하위 클래스인 경우owl:Thing. (하단 유형 또는 빈 집합은owl:Nothing).
참고 항목
메모들
- ^ "Class: BasicObject (Ruby 1.9.2)". Retrieved April 7, 2014.
- ^ System.Object
- ^ 파이톤형/클래스 통일
- ^ Matilla, Hugo (2019-02-27). "Kotlin basics: types. Any, Unit and Nothing". Medium. Retrieved September 16, 2019.
- ^ "An Overview of the Scala Programming Language" (PDF). 2006. Retrieved April 7, 2014.
- ^ "Types — The Swift Programming Language (Swift 5.3)". docs.swift.org. Retrieved November 2, 2020.
- ^ "Types · The Julia Language". Retrieved May 15, 2021.
- ^ "Standard ECMA-367. Eiffel: Analysis, Design and Programming Language" (PDF). 2006. Retrieved March 10, 2016.
- ^ https://2ality.com/2020/06/any-unknown-typescript.html
- ^ https://mariusschulz.com/blog/the-unknown-type-in-typescript