Powszechnie przyjmuje się, że niektóre rodzaje Java zawiodły w ważnych sprawach. Połączenie symboli wieloznacznych i granic spowodowało powstanie poważnie nieczytelnego kodu.
Jednak gdy patrzę na inne języki, naprawdę nie mogę znaleźć ogólnego systemu typów, z którego programiści są zadowoleni.
Jeśli weźmiemy pod uwagę następujące cele projektowania takiego systemu typów:
- Zawsze tworzy czytelne deklaracje typu
- Łatwy do nauczenia (nie trzeba odkurzać kowariancji, kontrawariancji itp.)
- maksymalizuje liczbę błędów czasu kompilacji
Czy jest jakiś język, który dobrze to zrozumiał? Jeśli google, jedyne, co widzę, to skargi na to, jak system typów zasysa język X. Czy tego rodzaju złożoność jest nieodłącznym elementem typowego pisania? Czy powinniśmy po prostu zrezygnować z próby sprawdzenia bezpieczeństwa typu 100% w czasie kompilacji?
Moje główne pytanie dotyczy tego, który język najlepiej „poprawił” te trzy cele. Zdaję sobie sprawę, że to subiektywne, ale jak dotąd nie mogę nawet znaleźć jednego języka, w którym nie wszyscy programiści zgadzają się, że ogólny system typów jest bałaganem.
Dodatek: jak wspomniano, kombinacja podtypu / dziedziczenia i ogólnych jest tym, co tworzy złożoność, więc naprawdę szukam języka, który łączy oba te elementy i pozwala uniknąć eksplozji złożoności.
Foo<T> where SiameseCat:T
) i że nie ma możliwości posiadania typu ogólnego, na który nie można zamienić Object
. IMHO, .NET skorzystałby na typach agregatów, które były podobne do struktur, ale jeszcze bardziej pozbawione kości. Gdyby KeyValuePair<TKey,TValue>
taki był, to IEnumerable<KeyValuePair<SiameseCat,FordFocus>>
można by rzucić na IEnumerable<KeyValuePair<Animal,Vehicle>>
, ale tylko wtedy, gdy tego typu nie można było spakować.
easy-to-read type declarations
? Trzecie kryterium jest również niejednoznaczne: na przykład mogę przekształcić indeks tablicy poza wyjątkami granic w błędy czasu kompilacji, nie pozwalając na indeksowanie tablic, chyba że będę mógł obliczyć indeks w czasie kompilacji. Również drugie kryterium wyklucza podtypowanie. To niekoniecznie zła rzecz, ale powinieneś zdawać sobie sprawę z tego, o co pytasz.