Swift, Rust'ın daha kullanışlı hali
(blog.namangoel.com)Rust
- Rust çok sevilen bir dil; hızlıdır ve harika bir topluluğa sahiptir
- Rust, sahiplik kavramını tanıtarak bellek yönetimi sorunlarını çözer
Rc,Arc,Cowgibi yardımcı araçlar sunarak referans sayımı ve "clone-on-write" desteği sağlar- Daha düşük seviyeli işler gerektiğinde
unsafesistemi kullanılarak raw C pointer'larına erişilebilir - Rust; etiketli enum'lar, match ifadeleri, birinci sınıf fonksiyonlar, güçlü bir tip sistemi gibi birçok fonksiyonel dil özelliğine sahiptir
- LLVM tabanlı derleyici kullanır; native kod ve WASM olarak derlenebilir
Swift
- Swift'i de birkaç yıldır kullandım ve Rust öğrenirken Swift ile benzerliklerini fark ettim
- Swift de etiketli enum'lar, match ifadeleri, birinci sınıf fonksiyonlar gibi fonksiyonel dil özelliklerine sahiptir
- Swift varsayılan olarak değer tiplerini kullanır ve "copy-on-write" semantiğine sahiptir
- Daha yüksek performans gerektiğinde sahiplik sistemini seçerek değerleri "move" etmek mümkündür
- Daha düşük seviyeli işler gerektiğinde
unsafesistemi kullanılarak raw C pointer'larına erişilebilir - Swift de LLVM tabanlı derleyici kullanır; native kod ve WASM olarak derlenebilir
Dejavu?
- Swift ve Rust çok benzer bir özellik setine sahiptir
- Büyük fark bakış açısındadır
- Temel bellek modeli dikkate alındığında farklar netleşir
Rust yukarı doğru, Swift aşağı doğru genişler
- Rust, düşük seviyeli bir sistem dili olarak başlar ve daha yüksek seviyeye çıkabilmeniz için araçlar sunar
- Swift, yüksek seviyeli bir dil olarak başlar ve daha düşük seviyeye inebilmeniz için araçlar sunar
- Bellek yönetimi modeli bunun en açık örneğidir
- Swift varsayılan olarak değer tiplerini kullanır ve "copy-on-write" semantiğine sahiptir
- Rust, "moved" ve "borrowed" değerlerle çalışmayı kolaylaştırır; ancak
Cowdeğerlerini kullanmak için ek uğraş gerekir - Swift, "copy-on-write" değerleri kullanmayı kolaylaştırır; buna karşılık ödünç alma ve taşıma kullanılırken ek uğraş gerekir
- Rust varsayılan olarak daha hızlıdır, Swift ise varsayılan olarak daha basit ve daha kolaydır
Swift, Rust'ın fikirlerini C-benzeri sözdiziminin içine gizler
- Swift'in sözdizimi, fonksiyonel dillerin kavramlarını C-benzeri bir sözdiziminin içine gizleyerek geliştiricilerin bunları daha kolay benimsemesini sağlar
- Rust'ın
matchifadesi ile Swift'inswitchifadesinin karşılaştırılması - Swift'in
switchifadesi aslındamatchifadesiyle aynıdır; yalnızca adı ve sözdizimi farklıdır - Swift'te
enum'lara doğrudan metot eklenebilir
Opsiyonel tipler
- Rust'ta
nullyoktur amaNonevardır - Swift'te
nilvardır ama aslındaNoneile aynıdır - Swift,
OptionyerineT?kullanır ve derleyicinilolmadığını kontrol etmeye zorlar - Swift'te opsiyonel tipleri kullanmak kolaydır
Hata işleme
- Rust'ta
try-catchyoktur amaResulttipi vardır - Swift,
try-catchyerinedo-catchkullanır ve fonksiyon çağrısından öncetryyazılması gerekir - Swift'in hata işleme modeli Rust'a benzer, ancak daha tanıdık bir sözdiziminin içine gizlenmiştir
Rust'ın derleyicisi sorunları yakalar, Swift'in derleyicisi ise bazı sorunları çözer
- Rust'ın derleyicisi birçok yaygın sorunu derleme zamanında yakalar ve çözüm önerileri sunar
- Kendi kendine referans veren enum örneği
- Swift, özyinelemeli tipleri belirtmek için
indirectanahtar sözcüğünü kullanır ve geri kalanını derleyici halleder
Swift daha az "saf"tır
- Swift, Objective-C'nin yerini almak için tasarlanmıştır ve mevcut kodla arayüz kurabilmeliydi
- Swift birçok pratik tercih yapmıştır ve Rust'tan daha büyük bir dildir
- Swift, "kademeli ifşa" düşüncesiyle tasarlanmıştır; dili daha fazla öğrendikçe daha çok özellik görünür hale gelir
- Swift'in bazı dil özellikleri:
- classes / inheritance
- async-await
- async-sequences
- actors
- getter ve setter'lar
- lazy properties
- property wrappers
- Result Builders (örn. HTML / SwiftUI)
Kullanışlı olmanın bedeli
- Swift, başlaması ve üretkenliği artırması daha kolay bir dildir
- Sözdizimi daha tanıdıktır ve birçok iş otomatik olarak halledilir
- Swift daha yüksek seviyeli bir dildir ve bu da aynı trade-off'ları beraberinde getirir
- Varsayılan olarak Rust programları Swift programlarından çok daha hızlıdır
- Rust varsayılan olarak hızlıdır ve yavaşlatılabilir; Swift ise varsayılan olarak kolaydır ve hızlandırılabilir
- Her iki dilin de kendine uygun kullanım alanları vardır
- Rust, sistem ve gömülü programlama için daha uygundur
- Swift, UI ve sunucu yazımı için daha uygundur
- Zamanla iki dil arasındaki örtüşmenin daha da büyümesi beklenmektedir
GN⁺ Özeti
- Bu yazı, Swift ile Rust arasındaki benzerlikleri ve farkları karşılaştırmalı olarak açıklar
- Swift, Rust'ın birçok fikrini alıp daha tanıdık bir sözdizimiyle sunar
- İki dilin de kendine özgü güçlü yanları ve kullanım alanları vardır; zamanla aralarındaki örtüşmenin artması beklenmektedir
- Swift ve Rust'ın bellek yönetimi modeli, hata işleme, opsiyonel tipler gibi çeşitli açılardan farklarını anlamaya yardımcı olur
- Benzer özelliklere sahip diğer diller arasında Kotlin ve TypeScript de vardır
1 yorum
Hacker News görüşleri
Rust'ı ilk kez kullananların Rust'ı sevmesinin nedeni, ML ailesinden bir dille ilk kez karşılaşıyor olmaları
Rust, GC'siz otomatik bellek yönetimini ana akıma taşıyan ilk dil
Smalltalk dönemi bitti, artık ML dönemi
Rust'ı iOS Swift uygulamalarına entegre ederken Swift'i daha fazla kullanmak istedim
Rust, bellek yönetimi sorunlarını çözmek için sahiplik kavramını getirdi ama bunu icat etmedi
Rust ve Swift'in ayrı ayrı güçlü yönleri var
Swift'in araçları Rust'tan daha kullanışsız
Rust öğrenmeye çalıştım ama örnekler fazla karmaşık olduğu için zorlandım
Swift'te enum'lara doğrudan metod eklenebiliyor
Swift varsayılan olarak değer tiplerini kullanıyor ve copy-on-write semantiğine sahip
Swift'i öven yazılar okuduğumda, Apple/macOS ekosistemini kullanmayan geliştiricilerin deneyimini hep merak ediyorum
Zig ve Swift'in nokta sözdiziminden hoşlanmayan tek kişinin ben olup olmadığını merak ediyorum
.variantvsType::Variant