Java 제네릭이 몇 가지 중요한 방식으로 실패한 것으로 일반적으로 인정됩니다. 와일드 카드와 바운드의 조합으로 인해 읽을 수없는 코드가 생겼습니다.
그러나 다른 언어를 볼 때 프로그래머가 만족하는 일반적인 유형 시스템을 찾지 못하는 것 같습니다.
이러한 유형 시스템의 설계 목표로 다음을 고려하면 :
- 항상 읽기 쉬운 타입 선언을 생성합니다
- 배우기 쉬움 (공분산, 반 분산 등을 정리할 필요가 없음)
- 컴파일 타임 오류 수를 최대화
제대로 된 언어가 있습니까? 내가 구글이라면, 내가 보는 유일한 것은 타입 시스템이 언어 X를 어떻게 빨아들이는지에 대한 불만이다. 이런 종류의 복잡성은 일반적인 타이핑에 내재되어 있는가? 컴파일 타임에 타입 안전을 100 % 검증하려고 포기해야합니까?
저의 주요 질문은이 세 가지 목표와 관련하여 가장 잘 맞는 언어입니다. 나는 그것이 주관적이라는 것을 알고 있지만, 지금까지 프로그래머가 일반 타입 시스템이 엉망이라는 데 동의하지 않는 언어를 찾을 수는 없습니다.
부록 : 언급 한 바와 같이, 서브 타이핑 / 상속과 제네릭의 조합이 복잡성을 만드는 것이므로, 저는 둘 다를 결합하고 복잡성의 폭발을 피하는 언어를 찾고 있습니다.
Foo<T> where SiameseCat:T
제네릭 유형을 가질 가능성이 없다는 것입니다 . IMHO, .NET은 구조와 비슷하지만 더 뼈가 큰 집계 유형의 이점을 누릴 수 있습니다. 경우 이러한 유형했다, 다음은 에 캐스팅 될 수 있지만, 유형 박스 할 수없는 경우에만 가능합니다. Object
KeyValuePair<TKey,TValue>
IEnumerable<KeyValuePair<SiameseCat,FordFocus>>
IEnumerable<KeyValuePair<Animal,Vehicle>>
easy-to-read type declarations
? 세 번째 기준도 모호합니다. 예를 들어, 컴파일 타임에 인덱스를 계산할 수 없다면 배열 인덱스를 허용하지 않으면 배열 인덱스를 범위 예외에서 컴파일 타임 오류로 바꿀 수 있습니다. 또한 두 번째 기준은 하위 유형을 배제합니다. 반드시 나쁜 것은 아니지만 요청한 내용을 알고 있어야합니다.