Python ve Rustlang

Python ve Rustlang

Rustlang

Bir süredir python benzeri, beni sistem programlama tarafında rahat ettirebilecek, geliştirdiğim programları derleyebileceğim yeni nesil bir dil arıyordum. Kısa bir süre önce Rustlang’ı keşfettim.

Rustlang Mozilla Vakfı tarafından açık kaynak olarak geliştirilen, syntax açısından rahat, güvenliğe ve hıza önem veren bir sistem programlama dilidir.

Bâzen melez dil olarakta çağrılır. Birçok dilin iyi yanlarını kendinde toplayıp eksik özelliklerinide düzeltmiştir.

Basit Bir Örnek

Rust ve Python arasındaki benzerlikleri daha iyi anlamak açısından örnek vermek gerekirse,

Python;


def bolunebilirmi(arg: int, arg1: int) -> bool:
    if arg1 == 0:
        return False
        
    return arg % arg1 == 0

if __name__ == '__main__':
    print("{}".format(bolunebilirmi(6, 3))) # -> True
    print("{}".format(bolunebilirmi(5, 2))) # -> False

Rustlang;


fn bolunebilirmi(arg: u32, arg1: u32) -> bool {
    if arg1 == 0 {
        return false;
    }
    arg % arg1 == 0
}

fn main() {
    println!("{}", bolunebilirmi(6, 3)); // -> True
    println!("{}", bolunebilirmi(5, 2)); // -> False
}

Not: Semilcon ve Curl Braces rustta kullanılıyor ve pythonla eş zamanlı olarak yazmak isterseniz bâzen karıştırabiliyorsunuz, bu konuda biraz dikkatli olmanın faydası var 🙂

İki örneğede bakarsak Function declare etme olayı neredeyse aynı.
Function declare ederken aldığım argümanlar için type vermek iki taraftada aynı.
Rustta bu bir zorunluluk iken pythonda “type hints” (PEP484) olarak geçen bu feature opsiyonel.

Rusttaki conditional statements ile pythondakiler aynı, iki tarafta genel durum karşılaştırması yaptıkları kısımda parantez kullanılmasına gerek duymuyor.

Rustta fonksiyonlarda eğer koşula göre bir return olmayacaksa (yani tek return olup fonksiyonun son satırında belirtilecekse) “return” keywordü kullanmanıza gerek kalmaz, fakat eğer buradaki gibi “eğer 0 ise false döndür, eğer bu statement dışındaysa tam bölünüp bölünmediği bilgisini gönder” iki farklı durumda iki farklı return edilecek veri varsa en son olan haricindekilerde “return” en sonda ise direk expression kullanılır.

Rustta pythondaki “if __name__ == ‘__main__'” benzeri bir yapı vardır. Bu yapı program direkt olarak (modül olarak import edilmediyse, direk yorumlanıp / derlendiyse) execute edildiyse bu kısmı çalıştır anlamına gelir.

Fonksiyon çağırma şekilleri aynıdır, ikiside “func(*args)” şeklinde çağırırlar.

Rustta print fonksiyonunun yapısı ile pythondaki benzerdir.

String formattingi print haricinde yapmak isterseniz pythondaki “format()” methoduna benzer “format!()” methodu vardır.

Development ve Deployment Süreci

Rustlang geliştirirken en çok ihtiyaç olacak şeylerin başında editör desteği geliyor.
Ben kendi editörüm için (vim) Rustlang’ın github organizasyonunda yayınladığı “rust.vim” adlı vim plugininden yararlandım. Kendi içerisinde syntax checker, rustfmt yardımı ile code formatterı gibi özellikler barındırıyor. Şuana kadar editör tarafında bir eksiklik hissetmedim.

Editörden sonra paketlere hızlıca ulaşmamızı sağlayan bir yapıya ihtiyaç duyuyoruz, “PyPI” ve “Pip” benzeri.
Burada da  “crates.io” adlı resmi paket registry servisi ve “cargo” adlı resmi paket yöneticisi devreye giriyor. Toml formatında tutulan cargo configide genel olarak projelerde bulunuyor.

Deployment tarafındada birkaç 3rd party uygulama kullanarak sunucunuza rahatça rust web uygulamalarını deploy edebiliyorsunuz.
Ben distelli + bitbucket + bitbucketCI ile rahat bir interface üzerinden, kodumu pushladığım her an eğer kod testleri başarı ile geçip master’a merge olmuşsa distelli üzerinden sunucuya otomatik olarak kurdurabiliyorum.

 

Sorular kısmından konu ile ilgili soruları sorabilirsiniz

About Batuhan Osman Taskaya

Upcoming systemadmin, Python/Django developer. github.com/BTaskaya

View all posts by Batuhan Osman Taskaya →

2 Comments on “Python ve Rustlang”

    1. Notta belirttiğim gibi semilcon ve curly braces biraz sorun çıkarabiliyor ama zamanla alışıyorsunuz. Onun dışında ownership ve type’larıda tam anlamı ile öğrendiğinizde syntax yapısını kavrıyorsunuz. Aslında temele inersek (buradaki örnekteki gibi) python ile syntax’ı çok benzer 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir