Aslında Java'yı hatta daha da geri gidersek COBOL'u tarif etmişsiniz

. Java çok eski bir dil ve bu tarihinin getirdiği bir sürü farklı standart farklı kütüphane farklı altyapı sunucuları vs. var. Bunların hepsini bilen bir Java geliştiricisi yoktur herhalde şu an piyasada fakat Java ile geliştirilmiş tonla proje var ve bunları bilen eleman lazım. Özetle öğrenilmesi çok zor ama talebi çok olan bir dil ve ekosistem varsa şu an bu Java olabilir. C# zaten bunun temize çekilmiş hali. Tabi o da artık yılların getirdiği yük ile karmaşık bir hale geldi ama Microsoft bu süreci Oracle'dan çok daha iyi yönetiyor.
COBOL ise çok daha kötü bir durumda. İlk programlama dillerinden ve finans ve iş sektörü için geliştirilmiş. O kadar eski bir dil ki şu anki dillere hiç ama hiç benzemiyor. Tabi bilgisayarlar ilk çıktığında bu sistemle geliştirilmiş ve hala faal durumda olan COBOL sistemler var. Şimdi bunları geliştirecek adam arıyorlar ama yok tabii ki

. Maaşlar tavana vurmuş durumda.
Sıfırdan bir dil geliştirilecekse sahip olması gereken teknik gereksinimler aslında belli ama soru bunla mı ilgili bilmiyorum. Öncelikle dahili async desteği olmalı. Yani tek işlekte girdi çıktı bağımlılığı çok verimli bir şekilde yönetebilmeli. Bunu ana akım dillerde ilk JavaScript yapabildi. Teknik anlamda çok kötü bir dil olmasına rağmen async desteği ve güzel paket yönetimi sayesinde şu an en popüler diller arasında. ES6'e kadar async kullanımı kafayı yeme sebebiydi söz dizimi çok karışıktı JavaScript'te. Ona rağmen bu kadar tuttu. Çünkü webte bunu destekleyen başka bir ana akım dil yoktu. Bugün golang bunu çok daha düzgün ve çok daha verimli bir şekilde yapıyor. Söz dizimi de çok daha basit ama topu bir kere JavaScript'e kaptırdı gibi duruyor.
Diğer bir nokta bellek yönetimi. Bu aslında çok daha karmaşık bir konu çünkü idealde bellek yönetiminin programcı tarafında düşünülüp ince ayarına kadar programcı tarafından yönetilmesi gerekiyor. Fakat pratikte bu mümkün değil çünkü bayağı angarya bir iş ve hatalı bir bellek yönetimi kodu yazıldığında hatanın nerede yapıldığını tespit etmek inanılmaz zor. C ve C++'da bellek yönetimi tamamen programcıya bırakılmış durumda. Bu nedenle bu diller ana akım olarak çok karşımızı çıkmıyor

. Modern C++ Smart Pointers ile bunu çözmeye çalışıyor ama aslında bu hafifte olsa bir yerde dile bir runtime yerleştirme anlamına geliyor. Yani kodun nasıl çalıştığı üzerindeki kontrolü biraz kaybediyoruz, dile bırakıyoruz. Bu yola girdik mi GoLang daha mantıklı bir tercih gibi duruyor. Rust bambaşka bir mantık izliyor. Bayağı dilin dayattığı şekilde çok kuralcı şekilde kodumuzu yazıyoruz. Bellek sızıntısı falan da olmuyor. Sıfırdan bir dil yazılsa nasıl olmalı diyeceksek karar vermek zor. GO ya da Rust'ın yolu tercih edilecek gibi duruyor ama hangisi ideal tartışılır. Rust'un modelinin daha "doğru" olduğunu kabul etmekle birlikte bence insanları programlamadan soğutmama adına GO'nun modeli tercih edilip taviz verilebilir

. Bu bellek yönetimi konusu Java ve C#'ın kritik sistemlerde tercih edilmemesinin de sebebi. Çünkü otomatik bellek yönetimindeki çöp toplayıcı sistemler devreye girdiğinde çok kısa süre de olsa sistem yanıt vermez hale geliyor. Bu kritik sistemlerde kabul edilebilir görülmüyor. Farklı geliştirmeler var. Hiç bellek sızıntısı yapmadan da bu dillerde kod yazmak mümkün elbette, yeni çöp toplayıcılar bu anlık donmaları çok daha hissedilmez hale de getiriyor ama burada dillerin ve çalışma ortamlarının yamalı bohçaya döndüğünü kabul etmek gerekir.
Özetle genel amaçla programlama dili yazılacaksa async ve bellek yönetimini iyi halletmesi ve kolay sade bir söz dizimine sahip olması bence en temel gereksinim. Bunun dışında paket yöneticisi, interaktif Shell'i falan olsa tadından yenmez ama bunlar sonradan da eklenebilecek şeyler.