Java jeneriklerinin bazı önemli yollarla başarısız olduğu yaygın olarak kabul edilmektedir. Joker karakterlerin ve sınırların birleşimi bazı ciddi olarak okunamayan kodlara yol açtı.
Ancak, diğer dillere baktığımda, programcıların mutlu olduğu genel bir tip sistem bulamıyorum.
Aşağıdakileri böyle bir sistemin tasarım hedefleri olarak kabul edersek:
- Her zaman kolay okunur tip bildirimleri üretir
- Öğrenmesi kolay (kovaryans, kontravaryans vb.
- derleme zamanı hatalarının sayısını maksimuma çıkarır
Doğru olan bir dil var mı? Google’a gidersem, gördüğüm tek şey, tür sisteminin X dilinde nasıl berbat olduğuyla ilgili şikayetlerdir. Derleme zamanında% 100 tip güvenliği doğrulamaya çalışmaktan vazgeçmeli miyiz?
Asıl sorum, bu üç amaç için en iyi "doğru olanı" yapan dildir. Bunun öznel olduğunu fark ettim, ancak şu ana kadar programcıların genel tip sisteminin bir karışıklık olduğu konusunda hemfikir olmadığı bir dili bile bulamıyorum.
Zeyilname: belirtildiği gibi, alt türleme / kalıtım ve jeneriklerin birleşimi karmaşıklığı yaratan şeydir, bu yüzden gerçekten her ikisini birleştiren ve karmaşıklığın patlamasını önleyen bir dil arıyorum.
Foo<T> where SiameseCat:T
) uygulamanın bir yolu olmadığı ve dönüştürülemeyen bir jenerik tipe sahip olma ihtimalinin olmadığıObject
. IMHO, .NET, yapılara benzeyen, ancak daha fazla çıplak kemikli agrega türlerinden faydalanabilir. Eğer KeyValuePair<TKey,TValue>
böyle bir tip olsaydı , o zaman bir karakter IEnumerable<KeyValuePair<SiameseCat,FordFocus>>
seçilebildi IEnumerable<KeyValuePair<Animal,Vehicle>>
, ancak yalnızca tip kutulanamadıysa.
easy-to-read type declarations
? Üçüncü kriterler de belirsizdir: örneğin, dizini endeksini sınır istisnalarının dışında derleme zamanı hatalarına dönüştürebilirim, dizini derleme zamanında hesaplayamadığım sürece dizileri indekslemenize izin vermeyebilirim. Ayrıca, ikinci ölçüt alt yazmayı dışlar. Bu mutlaka kötü bir şey değil ama ne sorduğunun farkında olmalısın.