4 puan yazan GN⁺ 2024-09-07 | 1 yorum | WhatsApp'ta paylaş

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, Cow gibi yardımcı araçlar sunarak referans sayımı ve "clone-on-write" desteği sağlar
  • Daha düşük seviyeli işler gerektiğinde unsafe sistemi 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 unsafe sistemi 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 Cow değ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
Reklam

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 match ifadesi ile Swift'in switch ifadesinin karşılaştırılması
  • Swift'in switch ifadesi aslında match ifadesiyle aynıdır; yalnızca adı ve sözdizimi farklıdır
  • Swift'te enum'lara doğrudan metot eklenebilir

Opsiyonel tipler

  • Rust'ta null yoktur ama None vardır
  • Swift'te nil vardır ama aslında None ile aynıdır
  • Swift, Option yerine T? kullanır ve derleyici nil olmadığını kontrol etmeye zorlar
  • Swift'te opsiyonel tipleri kullanmak kolaydır

Hata işleme

  • Rust'ta try-catch yoktur ama Result tipi vardır
  • Swift, try-catch yerine do-catch kullanır ve fonksiyon çağrısından önce try yazı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 indirect anahtar 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)
    Reklam

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

 
GN⁺ 2024-09-07
Hacker News görüşleri
  • Rust'ı ilk kez kullananların Rust'ı sevmesinin nedeni, ML ailesinden bir dille ilk kez karşılaşıyor olmaları

    • Rust, Unix hacker'larına tanıdık gelen bir topluluk sunuyor
  • Rust, GC'siz otomatik bellek yönetimini ana akıma taşıyan ilk dil

    • Swift, OCaml, Scala gibi alternatifler de var
  • Smalltalk dönemi bitti, artık ML dönemi

    • 2000'lerdeki diller Smalltalk'tan türedi
    • Yeni diller ML ailesinden
    • Scala öğrenirsen Rust veya Swift'i de kolayca öğrenebilirsin
  • Rust'ı iOS Swift uygulamalarına entegre ederken Swift'i daha fazla kullanmak istedim

    • Swift çapraz platform kullanılabilir, ama esas olarak Apple platformlarını hedefliyor
    • Rust'ın çeşitli paket sistemleri var
    • Swift paketleri çoğu zaman OS API'lerine bağımlı olduğu için Linux veya WASM'de çalışmıyor
    • IBM'in sunucuda Swift'ten vazgeçtiği bir örnek var
  • Rust, bellek yönetimi sorunlarını çözmek için sahiplik kavramını getirdi ama bunu icat etmedi

    • Cyclone gibi diller etkili oldu
  • Rust ve Swift'in ayrı ayrı güçlü yönleri var

    • Swift daha kısa ve öz bir sözdizimine sahip, ama bazı alanlar derleyiciye özel
    • Swift, Apple ekosistemi dışında ikinci ya da üçüncü en önemli dil konumunda
    • Bu sorun çözülmezse Swift büyük ölçüde Apple'a özel bir dil olarak kalacak
  • Swift'in araçları Rust'tan daha kullanışsız

    • macOS 12 kullanan 2018 MacBook Air'de Xcode desteklenmiyor
    • SourceKit-LSP ikinci sınıf bir araç gibi ele alınıyor
    • Rust 1.81 ve rust-analyzer iyi çalışıyor
  • Rust öğrenmeye çalıştım ama örnekler fazla karmaşık olduğu için zorlandım

    • Rust web sitesindeki örnek kodlar karmaşık
  • Swift'te enum'lara doğrudan metod eklenebiliyor

    • Rust'ta da aynı şey yapılabiliyor
  • Swift varsayılan olarak değer tiplerini kullanıyor ve copy-on-write semantiğine sahip

    • Bu yalnızca array, dictionary ve string için geçerli
    • Swift değer tipleri anında kopyalanıyor
  • Swift'i öven yazılar okuduğumda, Apple/macOS ekosistemini kullanmayan geliştiricilerin deneyimini hep merak ediyorum

    • macOS kullanmayan bir Swift geliştiricisiyle hiç karşılaşmadım
    • Yalnızca standart kütüphane değil, araçlar, LSP, kütüphaneler, eğitim materyalleri de önemli
    • Swift'in iyi bir dil olduğuna inanıyorum, ama sanki sadece macOS'ta iyi gibi
  • Zig ve Swift'in nokta sözdiziminden hoşlanmayan tek kişinin ben olup olmadığını merak ediyorum

    • .variant vs Type::Variant
    • Yeterince uzun veya karmaşık kodlarda, tip adı yakında değilse bu rahatsız edici olabilir
    • IDE benzeri özellikleri olmayan editörlerde özellikle böyledir