mozilla ekibinin başını çektiği derlenen bir programlama dilidir.
rust, güvenlik anlamında kendisine benzer olarak derlenen go ve c dillerinin arasında yer alır. go dilinde kod derlenir ancak derlenen binary içerisine aynı zamanda bir garbage collector gömülür. yani go'da yazarken belleği pek düşünmezsiniz. bu kimi zaman memory leak ya da latency spikes gibi bellek sorunlarına yol açar. öte yandan c ve c++ dillerinde bellekle ilgili kontrol tamamen sizin elinizdedir. bir verinin ne zaman oluşturulacağı, ne büyüklükte olacağı, (işletim sistemi veya eski tür konsol oyunları gibi doğrudan işlemci üzerinde çalışan programlarda) bellekte nereye yazılacağı, ne zaman bellekten düşüleceği gibi her tür kontrol sizdedir. tabi büyük güç, büyük sorumluluk getirir. dolayısıyla c ve c++ gibi dillerde yazılımcının verinin yaşamdöngüsünü* iyi takip etmesi gerekir, bu yine memory leak sorununa sebep olabilir.
rust'ta durum biraz daha farklı. bu ikisinin arasında bir yol buluyor. rust'ta veriler, dilin sözdizimi* içerisinde bir yaşamdöngüsüne sahip. bir fonksiyonun başında stack memory'de bir veri mi oluşturdunuz? bu veri o fonksiyonun sonunda düşer (daha doğrusu düşebilir diyelim, bir veri bir scope'tan diğerine taşınabilir). dolayısıyla rust'ın bellek yönetimine öngörülebilir bellek yönetimi* denilebilir.
--------
her şey güzel görünse de bu girdinin yazıldığı tarihte rust aşağıdaki birtakım sorunları barındırıyor.
## üçüncü parti ekosistem pek iyi değil ##
burada kaliteden bahsetmiyorum. aralarında clap, rocket, tokio gibi çok çok iyi projeler de var. ancak rust görece yeni bir dil olduğu ve öğrenme konusunda büyük bir eşiği olduğu için ekosistem sıkıntılı. kimi projelere bakıyorsun, en son 2 sene önce push almış.
bir diğer sorun ise yine bu eşikten dolayı belirli alanlarda belirli üçüncü parti çözümlerin yeterli topluluk oluşturamaması. demek istediğim şu:
bugün rust'ta rocket var web için mesela, ama ondan önce iron vardı. örneğin iron, rocket'tan sonra topluluğunu kaybetti sayılır. ondan önce de actix vardı. yani yarın ne olacağı bilinmez. bakarsın yarın falanca başka bir çözüm çıkar web için, rocket update almamaya başlar. aynısı piston'a oldu, şimdi amethyst diye bir şey dönüyor (bkz: oyun motorları).
keza bunu zaten rust'a özgü birtakım "are we ... yet?' web sitelerinden görebiliyoruz.
herhangi bir alan için "henüz şuna hazır mıyız?" gibi platformlar var. henüz pek çok alana tam anlamıyla (production olarak) hazır değil rust. hala yolu var. hele ki öğrenme eşiğini ele alınca, bunun daha da uzun süreceği aşikar.
## dinamik kod çalıştırma ##
çeşitli çözümler var ancak bunlar yukarıdaki anlattığıma kurban gitmiş durumdalar. rust, statik bağımlılıklar konusunda iyi, ancak iş dinamiğe geldiği zaman hiç de konforlu değil.
bir program yazmak isteseniz ve plugin sistemi oluşturmak isteseniz ve bu plugin sisteminin programatik olması gerekse baya çaba göstermeniz gerekecektir.
## öğrenme eşiği ##
aslında yukarıda az buçuk bahsettim. rust'ın bellek yönetim paradigması, bugüne kadarki pek çok dilden çok çok farklı. bellek yönetimi, dilin içerisine yedirilmiş. bu sebeple manuel değil de deterministik* bir bellek yönetimi mevcut. ancak bu, öğrenme aşamanızda sizi çıldırtabiliyor.
rust'ın sahiplik ve ödünç alma gibi çeşitli kuralları var ve programı yazarken "hep bu çerçeve içerisinde" düşünmeye zorluyor sizi. yanlış anlamayın, anladıktan sonra paradigma aslında çok tutarlı gelmeye başlıyor. ancak öğrenene kadar canınız çıkıyor. bu sebeple stackoverflow anketlerinde senelerdir en çok sevilen dil olmasına rağmen istediği kitleyi elde edemiyor. insanlar bu dile gidip geliyorlar. geliyorlar, çünkü bellek yönetimi konusunda vaadettikleri ve c ve c++ gibi karmaşık yapıya sahip olmaması çekici farktörleri. gidiyorlar, çünkü yine bu bellek yönetimini öğrenmek fazlasıyla bir zihinsel çaba gerektiriyor.
bu sebepten dolayı düşük seviye sistem programlama dillerine dalmak isteyen insanlar zaten içinde gc* olan go'ya yöneliyor, çünkü belleği düşünmek zorunda olmuyorsun.
## test ##
rust size test için çok basit bir temel sunuyor. temel testler ikiye ayrılıyor:
i. birim testleri*: rust'ta aynı modül içerisinde yer alan alt modüller şeklinde yazılıyor.
ii. entegrasyon testleri*: projenin temelinde ayrı bir "tests" dizini altında yer alıyor.
bunun bazı sıkıntıları var.
aynı modül içerisine alt modül olarak birim testi yazmak kodu "çok uzun" ve navigasyonu zor hale getiriyor. testten test ettiğin birime dönmek için ctrl+f tanrılarından ya da "bookmark" gibi bir eklentiden faydalanmak (ki manuel olarak kodu işaretlemeyi gerektiriyor) gerekiyor.
entegrasyon testlerinde istenmeyen bazı davranışlar mevcut olabiliyor.
ayrıca test ile ilgili bazı büyük sıkıntılar da var. örneğin standart testlerde mocking yok. üçüncü parti bir çözüm bulsanız da dilin çok sıkı olan doğası gereği gereksiz bir verbosity'ye sebep olabiliyorsunuz. ayrıca xunit tarzı* veya fixture temelli bir test ortamı yok. ama bunları karşılayan üçüncü parti çözümler mevcut tabi.
kısacası rust'ta test yazmak bir kabusa dönüşebiliyor.
tamamıyla online odaklı bir survival oyunu. bunu diğer bir ton oyundan farklı yapan ne? neden bu kadar eğlenceli? diye düşünürken yapımcısının bloguna denk gelmiş, en minik konularda bile ne kadar uzun bir düşünce süreci geçirdiklerini görünce şok olmuştum. kesinlikle oyun geliştirmek üzerine yepyeni bir felsefe edindim. bu yüzden benim için yeri farklı bir oyundur.