Neden Rust Programlama Dili?

Neden Rust Programlama Dili?
Zaten asıl sorun "C" dilindeki kütüphaneler. Sebil gibi ve her yere uyuyor. Her ortam için FFI uyumlandırması çok maaliyetli.

Yeni c++11,14,17,20,23,... özellikleri gelsede bu özelliklerin platformlar arasında standart olmaması çok kötü. Android ndk bile GCC son versiyonu, ios llvm son versiyonu kullanmıyor.
Kütüphaneler değişir de dilin yapısı içeriği değişir mi?
Modern C++ anlatmıştım. Eğer izlediyseniz büyük ihtimal masaüstü üzerinde uygulamaya başlamışsınızdır. Fakat x86 ve x64 dışına çıktığınızda derleyicilerin versiyonu birkaç ayda bir değilde birkaç yılda bir güncelleniyor. Hatta elektronikte çok sık kullanılan mips son güncellemesi birkaç sene önce, c++14 versiyonunda takılmış durumda. C++17 -> C99/11 ve C++11/14 çeviren bir araç yok. LLVM 4.0 versiyonundan sonra desteklememeye başladı. Bu durum kodları TAŞINAMAZ hale getirebiliyor. Taban standart lazım fakat c++ ile işimiz zor.
Aynı sorun diğer meşur programlama dillerinde de var.
Kotlin çıkma ve yaygınlaşma sebebi budur. Java 11 bytecode masaüstünde harika çalışıyor ama Android gelince 8. versiyon bile tam desteklenmemiş.
Python aracı, bağlayıcı bir katmandır aslında. Python2 bytecode çakıldık kaldık. Bazı dönüştürücüler var ama tam çalışmıyor. Python2 native eklentileri otomatik olarak Python3 native eklentileri haline getirmek imkansız gibi.

Rust ve GoLang ve C99 tek çare kalıyor. GoLang hızlı ama yeterince değil, C99 ile uğrasanabilene aşk olsun. Rust, GoLang optimize edilmiş versiyonu gibi geliyor. Fazladan Rust msvc arayüzü de getiriyor. Yani visual studio gelmemesi için bir sebep yok.

Traits yapısı kötü görünebilir ama bir sebebi var. Fonksiyon aşırı yüklemesi desteklemiyor. Her tip için özelleştirilmiş fonksiyon yazılırsa derleyicisi gerekirse fonksiyon çağrılarını azaltarak hızı azaltabilir.

Rust, c++ superset bir yapısı var. C/C++ Tüm araçlarını kullanıyor. Tek eleştirdiğim yanı ise desteği hâlâ zayıf ve rocket framework çok şey vaat ediyor ama üzerinde yeteri kadar durmuyorlar.

Optimizasyon kavramı kafa karıştırmasın. Ne kadar az iş yaparsa o kadar hız için optimize olmuş demektir. FCC ve Intel derleyicisi hunharca kodları gereksiz diye artıklarından hızlıdır.
Ayrıca LLVM derleyicisinin üç temel davranışı vardır. İnlining, unrolling, pattern matching
İnlining: fonksiyon gövdelerine ve değerlerine referans koymak yerine değerleri önceden kopyalar. Böylece program erişim için sadece bir kez uğraşmış olur.
Unrolling: döngü ifadelerinde yapılan sayı arttırma, karşılaştırma vb. İşlemlerden kurtulmak üzere döngüyü derlerken açar. Hatta Rust ileriye götürerek döngünün sonucunu sabit bir sayı olarak kaydedebilir. Çoğunlukla hız kazandırır.
Pattern matching: Rust içindeki karar ifadesi olarak bahsetmiyorum. Bilimsel programlarda llvm ve clang çokça kullanılmasının nedeni iteratif matematik işlemlerini formüllerini otomatik tahmin edip değiştirmesidir. Misal Fibonacci serisini döngü ile yazmakta Fibonacci serisi olduğunu anlar, formülünü bulur ve kullanır.
Async optimizasyon: Tek eksiği ve üzerinde uğraşılan konu ise async fonksiyonda senkronize etmeye çalışırken gereksiz senkronizasyonları seçemiyor. Umarım Rust içine async-await-senkron kelimelerini alır.
Java burada büyük fark yaratıyor. Java içinde bu yapıları varsayılan olarak barındırıyor.

Yorumlar

Popüler Yayınlar