Doğal olarak, bu soruyu soracak en iyi kişi biz değil , JCP Yürütme Komitesi'ndeki birisidir . Ancak bu, bazı boş spekülasyonlara katılmamı engellemez.
Her "neden bu özellik uygulanmadı" sorusunun cevabı her zaman faydaların maliyetleri aşmamasıdır.
Eric Lippert (C # ekibinin eski üyesi), bir ürünün bir özelliğe sahip olması için bu özelliğin olması gerektiğini söylüyor:
- ilk etapta düşündüm
- İstenen
- tasarlanmış
- belirtildi
- uygulanan
- test edilmiş
- belgeli
- müşterilere sevk
Başka bir deyişle, herhangi bir yeni programlama dili özelliğinin gerçekleştirilebilmesi için gerçekleşmesi gereken birçok önemli şey olmalıdır. Maliyetler düşündüğünüzden daha büyük.
C # ekibinde, her yeni özellik talebi eksi 100 puanla başlar. Daha sonra ekip faydaları ve maliyetleri değerlendirir, faydalara puan ekler ve maliyetlere puan çıkarır. Skor sıfırın üzerine çıkmazsa, önerilen özellik özetle atılır. Başka bir deyişle, yeni özellik zorlayıcı bir fayda sağlamalıdır.
Ancak Elvis Operatörü C # 'a yaptı. Peki neden Java'ya dönüştürmedi?
Görünen benzerliklerine rağmen, Java ve C # çok farklı dil felsefelerine sahiptir. Bu, Java kurumsal programlarının büyük, yapısal mimari koleksiyonları olma eğilimi ile kanıtlanmıştır. Kısalık ve dil ifadesi tören sunağı ve kodlama kolaylığı üzerinde feda edilir. Geliştirme ekibindeki herkesin tanıyabildiği tanınmış yazılım mimari kalıpları dil kolaylıklarına göre tercih edilir.
Bu Reddit değişimini düşünün :
Elvis operatörü 7'den beri her Java sürümü için önerilmiştir ve her seferinde reddedilmiştir. Farklı diller, "saf" dan "pragmatik" e kadar spektrum boyunca farklı noktalara düşer ve Elvis operatörünü uygulayan diller, spektrumun pragmatik ucuna doğru Java'dan daha fazla olma eğilimindedir.
Bir çeşit yüksek dağıtılmış, yüksek eşzamanlı arka uç işleme sistemi yazan 15+ yıllık Java uzmanlarından oluşan bir ekibiniz varsa, muhtemelen büyük ölçüde mimari titizlik istersiniz.
Ancak, yarısı Visual Basic'ten geçirilmiş bir orta ila orta seviyeli ekibiniz varsa ve çoğunlukla CRUD işlemlerini yapan bir ASP.NET web uygulaması yazıyorsanız ... o zaman bir grup tasarlamak aşırıya kaçabilir arasında AbstractFactoryFactory
soyut away Eğer sütunları kullanması gerektiğini boktan eski veritabanında null olduğu üzerinde hiçbir kontrole sahip olması için sınıflar.
Dil felsefesindeki bu derin farklılıklar sadece dillerin kullanım şekline değil, aynı zamanda dil tasarım sürecinin kendisinin nasıl gerçekleştirildiğine de uzanır. C # hayırsever bir diktatör dilidir. C # 'a yeni bir özellik kazandırmak için sadece bir kişiyi ikna etmeniz yeterlidir : Anders Hejlsberg .
Java daha tutucu bir yaklaşım benimser. Java'ya yeni bir özellik kazandırmak için Oracle, IBM, HP, Fujitsu ve Red Hat gibi büyük satıcılardan oluşan bir konsorsiyumdan fikir birliği alması gerekir. Açıkçası, bu süreç daha yavaş olacak ve yeni dil özellikleri için daha yüksek bir çubuk sunacaktır.
"Neden x özelliği uygulanmadı ..." sorusu her zaman dolaylı olarak "... eğer açıkçası iyi bir fikirse?" Burada yeterince gösterdiğim gibi, seçim asla bu kadar basit değildir.