- Rust ve Swift, güçlü tip sistemi ile fonksiyonel dillerin özelliklerini paylaşır ve LLVM tabanlı derleyiciler sayesinde yerel koda ve WASM'e derlenebilir
- Rust, düşük seviyeli bir sistem dili olarak başlayıp üst seviye özellikler sunarken, Swift üst seviye bir dil olarak başlayıp düşük seviyeli erişime izin verir
- Swift, varsayılan olarak değer tipleri ve Copy-on-Write kullanır; Rust'ın sahiplik modeline benzer kavramları daha basit bir sözdizimiyle uygular
- Opsiyonel tipler, hata işleme, özyinelemeli enum'lar gibi alanlarda Swift, Rust'ın kavramlarını C ailesine tanıdık gelen bir sözdizimiyle sararak geliştiriciye daha yüksek kullanım kolaylığı sunar
- Swift, çapraz platform bir dil olarak gelişiyor ve Windows, Linux, gömülü sistem ortamlarında da kullanılabildiği için Rust'a alternatif olarak öne çıkıyor
Rust ve Swift'in benzerlikleri ve farkları
- Her iki dil de fonksiyonel dillerin özelliklerini (etiketli enum'lar, match/switch ifadeleri, generics, birinci sınıf fonksiyonlar) içerir
- Rust,
Rc, Arc, Cow aracılığıyla referans sayımı ve kopyalama denetimi sunar
- Swift ise varsayılan olarak değer tipleri ve Copy-on-Write kullanır; gerektiğinde sahipliği taşıma (move) ve unsafe pointer erişimi de destekler
- Her iki dil de LLVM tabanlı derleyiciler kullanır; bu sayede yerel koda ve WASM'e derlenebilir
Bellek modeli: Rust yukarıdan aşağıya, Swift aşağıdan yukarıya
- Rust, düşük seviyeli bir sistem dili olarak başlayıp üst seviye özellikler sunar
- Swift, üst seviye bir dil olarak başlayıp gerektiğinde düşük seviyeli erişime izin verir
- Swift'in varsayılan bellek modeli Copy-on-Write değer tipleridir ve Rust'ın
Cow<> yapısına benzer
- Rust varsayılan olarak hızlıdır, ancak kullanım sırasında
Cow<> ile açıkça ilgilenmek gerekir
- Swift varsayılan olarak daha basittir ve kopyalama yerine taşıma seçilebilir
Swift'in sözdizimsel yaklaşımı: Rust kavramlarını C tarzında gizlemek
- Swift'in
switch ifadesi, fiilen Rust'ın match ifadesiyle aynı işi yapar
- Desen eşleştirmeyi destekler ve
fallthrough yoktur
- Swift'in
enum yapısı doğrudan metotlar içerebilir, bu da Rust'a kıyasla daha nesne yönelimli bir kullanım sağlar
- Opsiyonel tip (
T?), Rust'taki Option<T> ile aynı kavramdır; nil, None karşılığıdır
- Swift'te
if let val sözdizimiyle güvenli biçimde açılabilir
- Hata işleme, Rust'ın
Result tipine benzer; Swift'in do-catch ve try yapıları bunu alışıldık sözdizimiyle saran aynı yapıdır
Derleyici davranışındaki farklar
- Rust derleyicisi sorun tespiti ve uyarılara odaklanır; örneğin özyinelemeli enum tanımında
Box<> kullanımını zorunlu kılar
- Swift, özyinelemeli enum'ları yalnızca
indirect anahtar sözcüğüyle işler ve derleyici iç pointer yönetimini otomatikleştirir
- Swift'te Rust'a göre daha fazla otomatikleştirilmiş işlem vardır; geliştiricinin bellek yapısını doğrudan ele alması daha az gerekir
Swift'in pratikliği ve dilin genişleyebilirliği
- Swift, Objective-C'nin yerine geçmek amacıyla tasarlandığı için daha büyük ve pratik bir dildir
- Sınıflar/kalıtım, async-await, actors, lazy özellikler, property wrappers, Result Builders gibi pek çok özellik yerleşik gelir
- “Aşamalı açığa çıkarma (progressive disclosure)” tasarımı sayesinde, öğrenme ilerledikçe daha fazla özellik görünür olur
Kullanım kolaylığı ve performans dengesi
- Swift, başlaması kolay ve üretkenliği yüksek bir dildir; Rust ise varsayılan olarak hızlı bir dildir
- Rust'ta “hız varsayılandır”, Swift'te ise “kolaylık varsayılandır”
- Rust, sistemler, gömülü yazılım, derleyiciler ve tarayıcı motorları için uygundur
- Swift, UI, sunucu tarafı ve işletim sisteminin bazı bileşenleri için uygundur; iki dilin kullanım alanları giderek daha çok örtüşmektedir
Swift'in çapraz platforma genişlemesi
- Swift artık yalnızca Apple'a özel bir dil değil
- Windows: The Browser Company, Arc tarayıcısında kod paylaşımı için kullanıyor
- Linux: Apple, Swift on Server'ı destekliyor ve konferanslara sponsor oluyor
- Embedded Swift: Panic Playdate gibi küçük cihazlarda kullanılıyor
- Swift'in resmi blogu Windows, Embedded, Linux(Gnome), Playdate projelerini tanıtıyor
- Swift, VSCode eklentisi, LSP'nin açık kaynak hale gelmesi gibi adımlarla Xcode dışındaki ortamlarda da geliştirme deneyimini iyileştiriyor
Swift'in sınırlamaları ve mevcut konumu
- Derleme süresi, Rust'ta olduğu gibi yavaştır
- Özellik şişmesi (feature creep) nedeniyle dil büyümüştür ve bazı sözdizimleri alışılmadık gelebilir
- Paket ekosistemi, Rust'a kıyasla daha olgunlaşmamıştır
- Buna rağmen Swift, halihazırda ABI kararlılığı, otomatik referans sayımı (ARC), sahiplik seçme özellikleri ve Linux uyumlu paketler ile donatılmış bir çapraz platform dilidir
- Swift, Rust'a göre daha kullanışlı bir alternatif olarak konumlanıyor; beklenen bir gelecek değil, bugünün seçeneği olarak varlığını sürdürüyor
1 yorum
Hacker News görüşleri
Genel olarak katılıyorum ama ayrıntılarda sorunun özü ortaya çıkıyor
Xcode, büyük projelerde paket yenileme ya da çoklu target işleme sırasında sık sık donan hantal bir IDE. Düzeltmeye çalışsanız bile binary patch yapmak mümkün değil
Build sistemi tarafında Cargo, SPM'den çok daha kolay kullanılıyor. Macro sistemi hâlâ harici kod üretimine dayanıyor
Linter ve formatter var ama kaliteleri düşük. Swift'te çok sayıda performans uçurumu var ve type inference iki yönlü olduğu için karmaşık ifadelerde yavaşlıyor. Özellikle SwiftUI gibi başlıca kullanım senaryolarında sorun oluyor
importlar modül bazında bağlı olduğu için tek bir dosyayı değiştirseniz bile tüm modülü yeniden derlemek gerekiyor. Class ve struct ayrımı da ObjC uyumluluğu yüzünden tuhaf duruyorSonuç olarak Swift, Rust'tan daha kolay bir dil olabilir ama araç zincirinin olgunlaşmamışlığı yüzünden pratikte öyle hissettirmiyor
Swift'in yarı otomatik bellek modeli, Rust ya da Go'ya göre yönetmesi çok daha zor hissettiriyor
swiftCLI kullanmak da gayet yeterli. Linux ve Windows'ta da iyi çalışıyorRust'ta ağaç yapısını enum ile ifade ederken
Boxgerektiği söylenmiş ama aslındaVeczaten heap referansı sağladığı için buna gerek yokRust'ta enum, struct, union, hatta primitive type'ların bile method'u olabilir. Mesela
'F'.to_digit(16)gibi bir çağrı yapılabilirHatta raw pointer'lara bile method eklenebilir. Bence bu, Rust'ın modern tasarım anlayışını gösteriyor
VecileBoxfarkını karıştırmak kolay.Vec, derleme zamanında boyutu sabit olan bir handle'dır;Boxise unsized type'larla çalışırken gerekirBoxolmadan da gayet çalışıyorVec<T>zaten heap verisini işaret eden sabit boyutlu bir handle olduğu içinBoxgerekmiyorSwift harika bir dil ama server-side tarafta ikna edici değil
Ekosistemi küçük ve Go ya da Rust'a kıyasla kayda değer bir kazanımı yok. VSCode desteği de zayıf, Xcode kullanmak da istemiyorum
Sunucu geliştirme alanı zaten Python, TypeScript, Go ve Rust tarafından kapılmış durumda. Apple'ın kapalı ekosistemi de ayrıca yük oluyor
Diğer dillere göre IDE kalitesinin daha iyi olduğunu düşünüyorum, ama sistem programlama için Rust daha uygun
Swift artık çapraz platform bir dil deniyor ama Linux'ta hâlâ Apple merkezli bir ekosistem gibi
Dokümantasyon, eğitimler ve kütüphanelerin çoğu macOS temel alınarak yazılmış. Gerçekten Apple cihazı olmadan Swift kullanan var mı merak ediyorum
WebSocket istemcisi geliştirirken yaşadıklarımı blog yazısında toparladım
2023 sürümü / 2025 sürümü
Android desteği ilginç ama Kotlin'in yeterli olduğunu düşünüyorum
Ben şahsen Windows'u da destekleyecek şekilde kütüphaneler yönetiyorum. Mükemmel değil ama giderek iyileşiyor
Swift'teki
switchaslında fiilen bir match ifadesi. Sadece sözdizimi farklı, yaptığı şey pattern matchingswitchsözdizimini koruyup geliştirici kafa karışıklığını azaltma stratejisi gibi görünüyorTanıdık sözdizimi üzerinden yeni anlamlar getirerek kademeli geçişi teşvik ediyor
Bu yaklaşım, bir dilin ne kadar güçlü görüşlere sahip bir tasarım izlemesi gerektiğine dair ilginç bir tartışmaya kapı açıyor
Rust'ın özü zero-cost abstraction. Swift bu ilkeye uymuyor
Rust'taki birçok özellik bu kurala bağlı kalmak için tasarlandı ve ownership modeli bunun en tipik örneği
Öğrenme eğrisi var ama geliştirme verimliliğini artırıyor
Arc tarayıcısının Windows için Swift kullandığı söylenmişti ama geliştirmenin durdurulmasının ardından ilgili çalışmalar da iptal edilmiş gibi görünüyor
Rust'ı tercih etme nedenim, büyük şirket bağımlılığı olmaması. Apple'ın bir gün Swift'i bırakabileceğini düşünüyorum
Vikipedi maddesinde de bu belirtiliyor
Rust'ın reference counting özelliklerini kullanarak Swift'e geçmeden de benzer rahatlık elde edebilirsiniz
Rcile değişmez paylaşımlı referanslar, interior mutability ile de runtime kontrolüne dayalı değişiklikler uygulanabilirRc dokümanı, interior mutability dokümanı
Swift ve Rust ile Linux için analiz araçları ve compiler geliştirdim
Swift'te ARC sayesinde bellek yönetimi rahat, Rust ise daha fazla düşünmeyi gerektiriyor ama tooling kalitesi çok daha iyi
Clippy ve LSP desteği harika, Swift'te ise kutudan çıktığı hâliyle birçok özellik geliyor
Yine de Rust topluluğu daha büyük olduğu için insan bulmak daha kolay; Swift'in de C++ yerine geçebilecek bir dil olarak potansiyeli olduğunu düşünüyorum