Swift 5 ve ABI Stabilitesi - göç etmek için en iyi zaman

Swift tam yığın potansiyeli ve mükemmel bir topluluk desteği ile kodlamak için hızlı, güvenli ve eğlenceli bir dildir. Apple'a göre, Objective-C'den yaklaşık 2.6 kat daha hızlı, ancak bazı çalışmalar farkın dramatik olmadığını gösteriyor. Swift kodu ayrı bir arayüz ve uygulama dosyası olmadığından bakımı kolaydır, sözdizimi daha kısadır ve dil dinamik çerçeveleri desteklemektedir.

Dil önemli ölçüde büyüdü ve çok sayıda geliştirici tarafından benimsendi. StackOverflow Geliştirici Anketi 2018'e göre en sevilen 6. dildir. Sadece 2014 yılında yayımlanan bir dil için evlat edinme oranı olağanüstüdür.

Bunlar Swift'in faydalarından bazıları, şimdi dezavantajlara geliştiricilerin bakış açısıyla bakalım. Swift hala olgun değildir ve her yeni sürümde önemli değişiklikler olan hareketli bir hedef gibidir. Birçok geliştirici tarafından dile getirilen temel sorunlardan biri, eski dil sürümleriyle geriye dönük uyumsuzluk ve sürüm kilididir; bu da tüm projede ve dış bağımlılıklarında Swift'in yalnızca tek bir sürümü olabileceği anlamına gelir. Sonuç olarak, geliştiriciler en son Swift sürümüne geçmek ve dış bağımlılıklarını güncellemek istiyorlarsa projelerini tamamen yeniden yazmak zorunda kalıyorlar. Çerçeveleri oluşturan geliştiriciler için, her yeni Swift sürümü için çerçevelerini güncellemeleri gerekir ve bunları önceden derlenmiş bir çerçeve olarak dağıtamazlar.

Neyse ki Swift ekibi ve Açık Kaynak topluluğu bu konuda çalışıyor ve Swift 3.0’dan bu yana öne sürülen Swift’in bir sonraki ana sürümünde, Swift 5.0’ın bunu çözmesi bekleniyor. ABI İstikrar Manifestosu, hedeflerini gerçekleştirme hedefine sahip olduklarını belirtir:

  1. Kaynak Uyumluluğu, daha yeni derleyicilerin Swift'in eski bir sürümünde yazılmış kodu derleyebileceği anlamına gelir. Bu, halihazırda Swift'de bulunan sürüm kilidini kaldırır.
  2. İkili çerçeve ve çalışma zamanı uyumluluğu, çerçevelerin birden fazla Swift sürümünde çalışan ikili biçimde dağıtılmasını sağlar. İkili çerçeve uyumluluğu, derleyicinin bir çerçevenin ortak arabirimlerinin temsili olan modül dosyasını dengeleyen ve ABI kararlılığının farklı Swift sürümleriyle derlenen uygulamalar ve kütüphaneler arasında ikili uyumluluk sağlamasına olanak tanıyan modül format kararlılığı ile sağlanacaktır.

ABI nedir?

Çalışma zamanında Swift programı ikili dosyaları diğer kitaplıklar ve bileşenlerle etkileşimde bulunur. Uygulama İkili Arayüzü, bağımsız bir şekilde derlenmiş ikili varlıkların birbirine bağlanıp yürütülmesi için uygun olması gereken bir özelliktir. Bu ikili varlıklar, işlevlerin nasıl çağrılacağı, bellekteki veri gösterimi ve hatta meta verilerinin olduğu ve hatta ona nasıl erişileceği gibi birçok düşük düzey ayrıntı üzerinde anlaşmalıdır.

ABI Kararlılığı nedir?

ABI kararlılığı, ABI'yı gelecekteki derleyici sürümlerinin kararlı ABI'ye uygun ikili dosyalar üretebileceği noktaya kilitlemek anlamına gelir. Bir ABI kararlı hale geldiğinde, platformun ömrünün sonuna kadar devam etme eğilimindedir.

ABI'nin kararlılığı sadece dışarıdan görülebilen halka açık arayüz ve sembollerin değişmezlerini etkiliyor. Örneğin, gelecekteki derleyiciler, ortak arabirimler korunduğu sürece dahili işlev çağrıları için çağrı kurallarını değiştirmekte özgürdür.

ABI İstikrarının Ön Koşulları

  1. Yapılar ve sınıflar gibi türler, bu tür durumlar için tanımlanmış bir bellek düzenine sahip olmalı ve aynı düzen kurallarını paylaşmalıdır.
  2. Tip meta verileri Swift programları tarafından yaygın olarak kullanılmaktadır. Bu meta veriler, tanımlanmış bir bellek düzenine sahip olmalı veya bir türün meta verilerini sorgulamak için bir dizi tanımlanmış API'ye sahip olmalıdır.
  3. Bir kütüphanedeki ihraç edilen veya harici her sembol, üzerine ikili varlıkların kabul edebileceği eşsiz bir isme ihtiyaç duyar. Swift, fonksiyon aşırı yüklemesi ve bağlamsal ad alanları (modüller ve türler gibi) sağlar; bu, kaynak kodundaki herhangi bir adın genel olarak benzersiz olamayacağı anlamına gelir. İsim yönetimi adı verilen bir teknikle benzersiz bir isim üretilir.
  4. İşlevler, çağrı yığınının düzeni, hangi kayıtların saklandığı ve mülkiyet kuralları gibi şeyleri içeren çağrı kurallarına uymalıdır.
  5. Swift, dinamik döküm, referans sayma, yansıma vb. Şeyleri işleyen bir çalışma zamanı kütüphanesiyle birlikte gelir. Derlenmiş Swift programları, bu çalışma zamanına harici çağrılar yapar. Böylece, Swift çalışma zamanı API'si Swift ABI'dir.
  6. Swift, bunlarla ilgili birçok ortak türü, yapıyı ve işlemi tanımlayan standart bir kütüphaneye sahip gemiler. Gönderilen standart bir kütüphanenin Swift'in farklı sürümlerinde yazılmış uygulamalarla çalışabilmesi için kararlı bir API göstermesi gerekir. Bu nedenle, Swift Standard Library API, Swift ABI ve tanımladığı birçok türün yerleşim düzenidir.
Bütün bu görevler Swift çekirdek ekibi tarafından yerine getirildi, ancak GitHub'da henüz serbest bırakılmadı. Görevlerin durumuna baktığımızda, Swift'in bir sonraki ana sürümünün ABI’ye kararlı olmasını bekliyoruz.

ABI İstikrarının Avantajları

  1. Dolayısıyla Swift bir kez ABI’nin kararlı olduğu ilan edildiğinde, bu noktadan itibaren yazılan kod dilin daha yeni sürümleriyle uyumlu olacaktı ve geliştirici, yeni bir sürümüne geçerken projenin tüm harici bağımlılıklarını güncellemek zorunda kalmayacak. Swift.
  2. Kütüphane yazarı, modül format istikrarı sağlandıktan sonra çerçevesini ikili bir çerçeve olarak sağlayabilir.
  3. Uygulama paketi boyutu, sabit Swift çalışma zamanı daha sonra işletim sistemine dahil edilebileceğinden azalacaktır.
  4. Dil gelişmeye devam edecek, ancak bu noktadan itibaren ABI’deki değişiklikler ek olacaktır. ABI katkı değişiklikleri, hedeflenen minimum Swift versiyonunun onları desteklediğinde avantajlardan faydalanabilir, çünkü ABI stabilitesi sadece dışarıdan görülebilen ortak arayüzleri ve sembolleri kilitler. Yeni derleyiciler verimliliği artırabilecek iç değişiklikler yapabilir.

Sonuç

Swift, Apple ekosistemindeki gelişmenin geleceğidir ve ABI kararlı ve modül formatlı olduğunda, dil en büyük dezavantajlarından arınmış olacaktır. Lütfen 2019'daki Swift ve Objective-C arasındaki detaylı karşılaştırma için bu makaleyi okuyun.

Objective-C kod tabanınızı Swift cihazına dönüştürmek istiyorsanız, şimdi başlamanın en iyi zamanı. SVProgressHUD'nin tamamen Swift olarak yazılmış ve XPro için Swiftify kullanarak SVProgressHUD ile aynı API tasarımıyla iş parçacığı için güvenli olan IHProgressHUD'a dönüşümünü kapsayan bir makale yazdım.

Referanslar

  1. https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md
  2. https://swift.org/abi-stability/
  3. https://www.altexsoft.com/blog/engineering/the-good-and-the-bad-of-swift-programming-language/
  4. https://www.altexsoft.com/blog/engineering/swift-vs-objective-c-out-with-the-old-in-with-the-new/
  5. https://medium.com/swift-india/swift-5-abi-stability-769ccb986d79
  6. https://www.ca.com/en/blog-developers/dynamic-versus-static-framework-in-ios.html
  7. https://www.youtube.com/watch?v=GzP2oaZRi7Q

Bizimle Twitter, Linkedin, Facebook ve Github adresinden iletişime geçebilirsiniz.