C gibi hızlı, python gibi kolay ve java gibi taşınabilir

    İnsanlar C/C++ dilleri kadar hızlı, java gibi taşınabilir, python gibi kolay programlama ortamları arayışına geçti. Bu sebeple yeni programlama dilleri yükseliyor yada vm altıda çalışan dillere native çalışma desteği getiriliyor. Misal Kotlin, Scala

    Bu programlama dillerinin bir çoğu fonksiyonel bir yaklaşıma sahip. Çoğumuz C/C++ hızlı ve hemen hemen her yerde kullanabiliyoruz diyerek birçok özellikten fedakârlık ediyoruz. Korkusuzca çoklu çekirdekleri kullanmak, paket yöneticileri, proje yöneticileri, işlemciler ve işletim sistemleri arasında hatta web üzerinde gerçekten makine kodu üreterek gerçek taşınabilirlik, Uğraşmadan ve performanstan ödün vermeden GC"garbage collector" dahil etmek. Özellikle oyun yapımcıları c/c++ dilini dilini render performansı erişilmez olduğu için kullanıyor fakat gc olayı c/c++ dili için oldukça karışıktır. RAII olarak anılır ve programcı gc olayını kendisi halletmek zorundadır. GC otomatik kullanan Java/.Net/Python ortamları da performanstan ödün verir.
 
    Çözüm LLVM ve türevleri. LLVM şimdiden dünyadaki hemen hemen tüm işlemciler için asm çözümü üretti. Hatta kod dönüştürme işlemleri artık llvm ir ast ile halledilmektedir. LLVM alt yapısı derleyiciden bağımsız optimizasyonlar uygulayabilir. LLVM alt yapısına kendi programlama dilinizi üretebilirsiniz. Clang C/C++ dili için LLVM derleyicisidir. Clang analizi oldukça iyidir.

    Bu yüzden sürekli değişiklikler yaşamaktadır bu yüzden nim vs rust vs go vs d vs kotlin vs ... diye aratırsanız eski veriyonların karşılaştırmalarını görürsünüz.
    
    Benim diğer favori ortamım ise NIM dili. Eski adı Nimrod olarak geçer. Nim dilini daha çok macro programlama aracı gibi kullanıyorum. Nim yaklaşımı oldukça farklıdır. Yazımın en üstünde saydığım c gibi hızlı, python gibi kolay ve java gibi taşınabilir formuna uyan sanırım ender dillerden biri. C/C++ gibi statik tipli ve fonksiyonel bir yaklaşımı vardır. Kendisi zaten var olan alt yapıları kullanmayı tercih etmektedir. LLVM alt yapısına zorlamaz, sadece C/C++/ObjC/JS dillerine çevirir yani taşınabilirlik derdimiz yok. Çalışma zamanı dahil etmek programcının tercihine bırakılır. Nım derlenirken ağır şekilde optimize edilir. Rust aksine derleme hızı oldukça yüksek ve derlenen dosyanın boyutu oldukça küçüktür. C++ meta programlaması gibi düşünebilirsiniz ama C++ olduğu gibi dosya boyutunu arttırmıyor. Şu andaki sürümü 0.18 olması sizi yanıltmasın, C alt yapısı oldukça iyi çalışıyor. import makrosu, c2gen ve nimgen  c alt yapısını kullanmayı oldukça kolaylaştırıyor. Bu dili kullanırken biraz C/C++ dillerinden haberdar olmasını tavsiye ederim. Ana kütüphanesi dışında kütüphane sayısı diğer dillere göre azdır. Ide desteği diğerlerine nazaran azdır ama vscode ve qtcreator yeterince iyi desteği vardır. Hata ayıklama desteği ise c alt yapısının hata ayıklayıcı tarafından sağlanmaktadır yani gcc ile derliyorsanız gdb kullanılır. GC isteğe bağlı olarak eklenir. GC kullanımı için 4 farklı alternatif verir.

    Rust yeni sistem programlama dili olup LLVM alt yapısını kullanır.diğer LLVM dillerinden farklı olarak çok daha derin optimizasyonlar uygulandığından teoride GCC göre daha hızlı çalışabilir. C dilinin yerine geçebilecek bir potansiyeli var. D ve GO dillerinin aksine çok daha basit yazılışı ve optimize olmuş bir yapısı vardır. Optimizasyon yapılırken derleme hızı oldukça yavaşlıyor, beni sıkan kötü özelliğidir. Bilinenin aksine son güncellemeyle simd alt yapısı eklenmiştir. Tam anlamıyla performanstan ödün vermeden, data race olmadan güvenli parallel programlama için geliştirilmiştir. FFI(Foreign function interface) yeteri kadar iyidir fakat c/c++ dilleri için llvm desteklediği sürece dahil edilebilir. Yani gcc veya icc ile uyumlu değildir. Bu durum birçok uyumluk sorunu beraberinde getiriyor ama çalışma düzeninizi llvm alt yapısına göre düzenlerseniz sorun yaşayacağınızı zannetmiyorum.

    Diğer bir dil ise D FFI oldukça iyi ama derleyiciler arasında karışıklık var ve RUST gibi taşınabilir değildir.

    Crystal dili de gelmek ama windows alt yapısı yok. Bazen en hızlı dil gibi olsa da hala kullanılabilir değil.

    Dünyadaki Trendler: https://trends.google.com/trends/explore?q=%2Fm%2F09gbxjr,%2Fm%2F01kbt7,%2Fm%2F0dsbpg6,%2Fm%2F0jgqg,%2Fm%2F0j3djl7

    Ayrıca programlama dillerinin araçları ne kadar hızlı hesaplar ve ne kadar az hafıza tüketirse o kadar az enerji harcar diyebiliriz. Tabloda ilk sıradakiler nerdeyse hiç değişmiyor.
https://sites.google.com/view/energy-efficiency-languages/results

Bir takım performas karşılaştırmaları: https://github.com/kostya/benchmarks
Başka bir programcının değerlendirmeleri: https://sdevprog.blogspot.com/2018/04/overview-of-efficient-programming.html

Yorumlar

Popüler Yayınlar