Nim Dili

    Merhaba son zamanlarda yeni programlama dili arayışına geçmiştim. Python(embedded), Rust, Go, D, D2, C#, F# dillerini denedim. Fakat saf şekilde gcc istediğim gibi dahil edebileceğim, python gibi kolay programlanabilir Bir ortam bulamadım. Ben gömülü sistem yazılımı yazan biri olarak C/C++ dilleriyle senelerce uğraştım. Ben sadece bu kütüphaneleri kolayca entegre edebileceğim daha kolay yazılımı olan gömülü sistemlerde çalışabileceğim yeni bir dil arıyordum.

    Python dili neden yemedi? En başında taşınabilirlik geliyor. Maalesef Python diline C/C++/JS entegre etmek bazen dünyanın en zor işi gibi geliyor. Uzun zaman bu dil ile uğraştım ve Python programcılarının birçoğunun derdi gömülü sistemler. Nuitka, Firmata ve Micropython gibi birkaç çalışma var ama tüm kütüphaneleri taşımak için yeterli değil. Taşıma işlemini gerçekleştirseniz bile Python ve kullanılan kütüphanelerin toplam büyüklüğü gömülü sistemler için oldukça büyük kalıyor. Gömülü sistemlerde gerekli paketleri derlenmeyebiliyor. Ayrıca Matlab/Simulink varken veri analizi ve tasarım için başka bir şeye ihtiyacım pek kalmıyor.

    Go dili desteği oldukça iyi. IDE ve hazır kaliteli kütüphane bulmada sıkıntı yaşamadım fakat bazen ne oldu da böyle birden yavaşladı dediğim oluyor. Üretilen yürütülebilir dosya boyu oldukça fazla. Kodlama içinde c++ diline göre daha rahat değilim. C/C++/JS dillerini rahatça kullanamıyorum. Go2 dilinin geldiğine dair duyurular var ama denemediğim için birşey diyemeyeceğim.

    Rust dili Go diline göre bence çok daha iyi. daha küçük yürütülebilir dosya üretiyor, RFC paternine uygun tıpkı f# gibi ve llvm desteklediği hemen hemen her yere uygulama çıkartabiliyorum. Fakat İyi IDE bulmada biraz sıkıntı yaşadım. C/JS kütüphanelerini olduğu gibi dahil edemiyorsunuz. LLVM ile derlenmemiş kütüphaneleri kullanamıyorsunuz. Bazen Rust dilinin derleme hızına sinir olduğum oldu. C/C++ varsayılan olarak optimizasyon yapmaz ve internetteki karşılaştırmalarda c++ dilinin özelliklerini sonuna kadar kullanmadıklaını fark ettim. Bu şekilde rust ve go ile bir karşılaştırmaya gidildiğinde sonuçlar oldukça değişiyor. Hele derleyinin avantajlarını kullanabileceğim bir ortam istiyorum.

    D ve D2 dili tam da C/C++ kütüphanelerini direkt olarak dahil edebileceğim bir dil. Fakat derleyiciler arasında uyumsuzluk var ve Modern c++ ile bu dile ihtiyacım kalmıyor.

    C# 7.2 veriyonuyla beni oldukça büyüledi fakat .net assembly taşıması kolay bir yapı değil. .net core da hala gelişme aşamasında. LLIC ile llvm derleyicisi daha bitmediği için bence üzerine düşmeye değmez geliyor. Tabi sadece bilgisayar programı yazacaksanız mükemmel bir dil. Tabiki VISUAL STUDIO büyük etken. Yazımı oldukça kolay ve nuget gibi bir aracı ve .net gibi bir framework var. Fakat mono unix ve linux benzeri sistemlerde sergilediği berbat performans ve uyumluluk sorunu uğraşmaya değmez dedirtti.

    F# 4.1 Microsoft firmasının silahı. Ocaml dilinin .net versiyonu RFC paterni uygulanıyor. otomatik CUDA ve OPENCL derleyicisi var. Bence haskellden çok daha iyi bir fonksiyoel programlama dili. C# kodlarını ve .net kütüphanelerini direkt ekleyebiliyorsunuz. Matlab ve Python gibi birkaç satırla harikalar yapabiliyorsunuz. Adeta tez yazarları için yapılmış. Fakat programlama mantığı çok farklı C# kullanırken yaptığınız gibi döngüler kullanırsanız oldukça yavaş çalışan birşey elde ediyorsunuz. Yinelemeli fonksiyonlara bayılıyor bu dil. Durduk yerde gözünüzün önünde dünyanın en hızlı dili olabilirken bir adım daha attığınızda ne yaptımda böyle yavaşladı dediğim anlar oldu. Nuget ile istediğin kütüphaneyi dahil et ve veri analizine başla. F# sitesinden bakmanızı tavsiye ederim. Ayrıca FABLE diye bir javascript derleyicisi var. Her ne kadar gömülü sistemlere göre uygun olmasa da Üzerine uğraşmaya değer buluyorum. Maalesef C# dili için söylediklerim burada da geçerli.

    Ben de daha deneysel de olsa birşeyler yapabildiğini gördüğüm yeni ortamı gördüm. Nim diline hoşgeldin demenizi istiyorum. Eski Türkçede küçük manasına gelen nim gerçekten çok küçük bir dil. C/C++/ObjC vs JavaScript dillerine derlenebiliyor ve direkt dahil edilebiliyor. GC yani garbage collector özelliği isteğe bağlı olarak derlenirken ekleniyor. Standart kütüphane içinde sisteme bağlı kütüphaneler derleme seçeneğine göre dahil ediliyor. QT gibi tamamen "NATIVE Cross Platform" bir dil. Qt alt yapısı var. Şimdiden arduino alt yapısı hazır sayılır. Arraymancer kütüphanesi yeni yeni olgunlaşmakta ve gördüğüm kadarıyla şu anda tüm populer makine öğrenimi kütüphanelerinden CPU üzerinde hızlı fakat gpu alt yapısı eksik. Bence şu anda IDE ve debugger desteği diğer ortamlara nazaran oldukça zayıf sayılır. Şuan da Visual Studuio Code, Aporia ve QTCreator Plugin Qt tarafından sağlanıor ve yeteri kadar iyi. Piyasadaki birçok c/c++ derleyicilerini kullanabiliyorum. emscripten destekliyor. c2nim ve nimgen araçları c/c++ dillerini dahil etmeyi kolaylaştırıyor. Javascript kütüphanelerini dahil edip c/c++/objc  diline derlenebiliyor mu bilmiyorum fakat nectarjs wasm derlemesinden sonra wasm c diline derledikten sonra dahil edilebilir yada qml gibi JS motoruyla dahil edilebilir yada herşey wasm ve javascript diline derlenebilir. Şuanda bu dili öğrenmeye başladım. Hadi hayırlısı.

    İleride F# ve Nim dilleri ile ilgili yazılar yazmayı düşünüyorum.

Yorumlar

Popüler Yayınlar