JDK 8 Lambda Uzman Grubu'nun (EG) neden Java programlama diline yeni bir işlev türü eklememeye karar verdiğini anlamaya çalışıyorum.
Posta listesinin üzerinden geçerken işlev türlerinin kaldırılmasıyla ilgili tartışmayı içeren bir konu buldum .
İfadelerin çoğu benim için belirsiz olabilir, belki bağlam eksikliği ve bazı durumlarda tip sistemlerinin uygulanması hakkında sınırlı bilgim nedeniyle.
Ancak, ne anlama geldiğini daha iyi anlamama yardımcı olmak için bu sitede güvenli bir şekilde formüle edebileceğime inandığım birkaç soru var.
Posta listesindeki soruları sorabilirim, ancak konu eski ve tüm kararlar zaten verilmiş, bu yüzden her şeyden önce bu adamların planlarıyla zaten geciktiğini görerek görmezden gelineceğim.
İşlev türlerinin kaldırılmasını desteklemek ve SAM türlerinin kullanımını desteklemek için verdiği cevapta Brian Goetz şöyle diyor:
Bir şey yok. İşlev türlerinin yeniden birleştirilmesinin ne kadar yararlı olacağına dair uzun bir konu vardı. Yeniden birleşme olmadan, işlev türleri taşınır.
Bahsettiği ipliği bulamadım. Şimdi, bir yapısal fonksiyon tipinin kullanılmasının Java çoğunlukla nominal tip sistemde bazı komplikasyonları ima edebileceğini anlayabiliyorum, anlayamadığım parametreli SAM tiplerinin yeniden yapılandırma açısından nasıl farklı olduğudur.
İkisi de aynı yeniden yapılanma sorunlarına maruz kalmıyor mu? İşlev türlerinin yeniden yapılandırma açısından parametreli SAM türlerinden ne kadar farklı olduğunu anlayan var mı?
Başka bir yorumda Goetz diyor ki:
Yazmaya iki temel yaklaşım vardır: nominal ve yapısal. Bir nominal değerin kimliği, ismine dayanır; yapısal tipin kimliği, neyden oluştuğuna ("int, int" veya "int'ten float fonksiyonuna") dayanır. Çoğu dil çoğunlukla nominal veya çoğunlukla yapısal seçer; "kenarların çevresinde" dışında, nominal ve yapısal yazmayı başarıyla karıştıran pek çok dil yoktur. Java neredeyse tamamen nominaldir (birkaç istisna dışında: diziler yapısal bir türdür, ancak altta her zaman nominal bir eleman türü vardır; jeneriklerin de nominal ve yapısal bir karışımı vardır ve bu aslında birçok kaynağın bir parçasıdır. insanların jeneriklerle ilgili şikayetlerinin incelenmesi.) Java'ya yapısal bir tip sistem (fonksiyon tipleri) aşılamak ' s nominal tip sistemi yeni karmaşıklık ve uç durumlar anlamına gelir. İşlev türlerinin yararı buna değer mi?
Tip sistemlerinin uygulanmasında deneyime sahip olanlar. Burada bahsettiği bu karmaşıklıkların veya uç vakaların örneklerini biliyor musunuz?
Dürüst olmak gerekirse, tamamen JVM'ye dayanan Scala gibi bir programlama dilinin, altta yatan platformun yeniden yapılanma problemlerinde bile işlevler ve tuples gibi yapısal türleri desteklediğini düşündüğümde bu iddialarla kafam karışıyor.
Beni yanlış anlamayın, bir işlev türünün SAM türlerinden daha iyi olması gerektiğini söylemiyorum. Sadece bu kararı neden aldıklarını anlamak istiyorum.