Swift 5 va ABI barqarorligi - ko'chib o'tish uchun eng yaxshi vaqt

Swift bu tez, xavfsiz va qiziqarli til bo'lib, to'liq potentsial va jamoatchilik tomonidan qo'llab-quvvatlanadigan koddir. Apple ma'lumotlariga ko'ra, bu Objective-C ga qaraganda 2,6 baravar tezroq, ammo ba'zi tadqiqotlar shuni ko'rsatadiki, farq unchalik katta emas. Swift kodini saqlash osonroq, chunki alohida interfeys va amalga oshirish fayllari yo'q, sintaksis qisqaroq va til dinamik ramkalarni qo'llab-quvvatlaydi.

Til sezilarli darajada o'sdi va ko'plab ishlab chiquvchilar tomonidan qabul qilindi. Bu StackOverflow Developer Survey 2018 ma'lumotlariga ko'ra eng ko'p sevilgan 6-til. 2014 yilda nashr etilgan til uchun bu juda katta.

Bular Swift-ning ba'zi afzalliklari, endi keling, kamchiliklarni ishlab chiquvchilar nuqtai nazaridan ko'rib chiqaylik. Swift hali etuk emas va har bir yangi nashrida katta o'zgarishlar kiritilayotgan harakatlanuvchi nishonga o'xshaydi. Ko'pgina ishlab chiquvchilar tomonidan bildirilgan asosiy muammolardan biri eski versiyalar bilan oldingi moslashuvning yo'qligi va versiyalarni blokirovkalash, bu butun loyihada faqat bitta Swift versiyasi bo'lishi mumkin va uning tashqi bog'liqligi. Shunday qilib, ishlab chiquvchilar so'nggi Swift versiyasiga o'tishni va tashqi qaramlikni yangilashni istasalar, loyihalarini to'liq qayta yozishga majbur bo'lishadi. Frame ishlab chiqaruvchilar uchun ular har bir yangi Swift versiyasi uchun o'zlarining ramkalarini yangilashlari kerak va ular ikkilik oldindan tuzilgan ramka sifatida tarqatishmaydi.

Yaxshiyamki, Swift jamoasi va Ochiq manbali hamjamiyat bu masala ustida ishlamoqdalar va Swift 3.0-dan beri oldinga surib chiqilgan Swift, ya'ni Swift 5.0 ning navbatdagi yirik nashrida bu haqda gaplashishlari kutilmoqda. ABI Barqarorlik Manifestida ular quyidagi maqsadlarga erishganliklari aytiladi:

  1. Source Compatibility, ya'ni yangi kompilyatorlar Swift-ning eski versiyasida yozilgan kodni tuzishlari mumkinligini anglatadi. Bu hozirda Swift-da versiya qulfini olib tashlaydi.
  2. Ikkilik ramka va ish vaqtining muvofiqligi, bu bir nechta Swift versiyalari bo'ylab ishlaydigan ikkilik shaklida freymlarni taqsimlashga imkon beradi. Ikkilik ramka uyg'unligiga modul faylini barqarorlashtiradigan modul formati barqarorligi erishiladi, bu kompilyatorning ramkaning umumiy interfeyslarini namoyish qilishidir va ABI barqarorligi turli xil Swift versiyalari bilan ishlangan dasturlar va kutubxonalar o'rtasida ikkilik moslikni ta'minlaydi.

ABI nima?

Ish vaqtida Swift dasturi ikkiliklari boshqa kutubxonalar va tarkibiy qismlar bilan o'zaro ta'sir qiladi. Ikkilik interfeys ilovasi - bu mustaqil ravishda tuzilgan ikkilik sub'ektlar bir-biri bilan bog'lanishi va bajarilishi kerak bo'lgan aniqlikdir. Ushbu ikkilik ob'ektlar funktsiyalarni chaqirish, xotirada ma'lumotlarning namoyishi va hatto ularning meta-ma'lumotlari qayerda joylashganligi va unga qanday kirish kerakligi kabi ko'plab quyi darajadagi tafsilotlarni kelishib olishlari kerak.

ABI barqarorligi nima?

ABI barqarorligi kelajakda kompilyator versiyalari barqaror ABIga mos keladigan ikkiliklarni yaratishi mumkin bo'lgan darajaga qadar ABI-ni blokirovka qilishni anglatadi. Agar ABI barqaror bo'lsa, u platformaning qolgan qismi davomida ishlashga davom etadi.

ABI barqarorligi faqat tashqi ko'rinadigan jamoat interfeyslari va belgilarining invariantlariga ta'sir qiladi. Masalan, kelajakdagi kompilyatorlar umumiy interfeys saqlanib qolguncha ichki funktsional qo'ng'iroqlar uchun qo'ng'iroq konventsiyalarini o'zgartirishlari mumkin.

ABI barqarorligining shartlari

  1. Turlari, masalan struktura va sinflar, ushbu turdagi nusxalar uchun aniq belgilangan xotiraga ega bo'lishi va bir xil joylashuv konventsiyalarini bo'lishishi kerak.
  2. Metadata turi Swift dasturlari tomonidan keng qo'llaniladi. Ushbu metadata aniqlangan xotira joylashuviga ega bo'lishi yoki turdagi metadata so'rovi uchun belgilangan API to'plamiga ega bo'lishi kerak.
  3. Kutubxonadagi har bir eksport qilinadigan yoki tashqi belgisi, ikkilik sub'ektlar kelishishi mumkin bo'lgan noyob nomga muhtoj. Swift funktsiyani haddan tashqari yuklash va kontekstual nomlarning bo'sh joylarini (masalan, modullar va turlar) ta'minlaydi, ya'ni kod kodidagi har qanday nom global miqyosda noyob bo'lmasligi mumkin. Noyob ism ismni almashtirish deb nomlangan uslub orqali ishlab chiqariladi.
  4. Vazifalar chaqiruv konventsiyalariga rioya qilishi kerak, bu esa chaqiruv stendining joylashuvi, ro'yxatga olish yozuvlari va egalik to'g'risidagi shartnomalar kabi narsalarni o'z ichiga oladi.
  5. Ishlash vaqti kutubxonasi bilan ishlaydigan tezkor kemalar dinamik translyatsiya, ma'lumotnomalarni hisoblash, aks ettirish va boshqalar kabi ishlarni bajaradi. Kompilyatsiya qilingan Swift dasturlari ushbu ish vaqtiga tashqi qo'ng'iroqlarni amalga oshiradi. Shunday qilib, Swift ish vaqti API - bu Swift ABI.
  6. Swift kemalari, ularda ko'plab umumiy turlarni, tuzilmalarni va operatsiyalarni belgilaydigan standart kutubxonaga ega. Yuklangan standart kutubxona Swift-ning turli xil versiyalarida yozilgan ilovalar bilan ishlashi uchun u barqaror API-ni ochib berishi kerak. Shunday qilib, Swift Standard Library API - bu Swift ABI, shuningdek u belgilaydigan ko'pgina turlarning maketi.
Ushbu vazifalarning barchasi Swift asosiy jamoasi tomonidan bajarilgan, ammo ular GitHub-da hali chiqarilmagan. Vazifalar holatiga qarab, Swift-ning navbatdagi yirik chiqishi ABI barqaror bo'lishini ishonch bilan kutishimiz mumkin.

ABI barqarorligining afzalliklari

  1. Shunday qilib, agar Swift ABI barqaror deb e'lon qilinsa, shu vaqtdan boshlab yozilgan kod tilning yangi versiyalari bilan mos keladi va dasturchi yangi versiyaga o'tishda loyihaning barcha tashqi bog'liqliklarini yangilashga majbur bo'lmaydi. Chaqqon.
  2. Kutubxona muallifi modul formati barqarorligiga erishgandan so'ng o'z ramkasini ikkilik ramka sifatida taqdim qilishi mumkin.
  3. Dastur to'plamining hajmi kamayadi, chunki barqaror Swift ish vaqti OSga qo'shilishi mumkin.
  4. Til rivojlanib boraveradi, ammo shu vaqtdan boshlab ABI-ga o'zgarishlar qo'shiladi. ABI-qo'shimchasidagi o'zgarishlardan maqsad eng kam maqsadli Swift versiyasi ularni qo'llab-quvvatlaganida foydalanish mumkin, chunki ABI barqarorligi faqat tashqi ko'rinadigan jamoat interfeyslari va belgilarini qulflaydi. Yangi kompilyatorlar samaradorlikni oshirishi mumkin bo'lgan ichki o'zgarishlarni amalga oshirishlari mumkin.

Xulosa

Swift - bu Apple ekotizimining rivojlanish uchun aniq kelajakdir va agar u ABI barqaror va modul formati barqaror bo'lsa, u o'zining eng katta kamchiliklaridan xalos bo'ladi. 2019 yilda Swift va Objective-C o'rtasidagi batafsil taqqoslash uchun ushbu maqolani o'qing.

Agar siz Objective-C kod bazangizni Swift-ga o'zgartirmoqchi bo'lsangiz, endi boshlash uchun eng yaxshi vaqt. Men SVProgressHUD-ni IHProgressHUD-ga o'zgartirishi haqida maqola yozdim, u to'liq Swift-da yozilgan va Xcode uchun Swiftify-dan foydalanib, SVProgressHUD bilan bir xil API dizayni bilan xavfsizdir.

Adabiyotlar

  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

Biz bilan Twitter, Linkedin, Facebook va Github orqali bog'lanishingiz mumkin.