Dezvoltare Android / IPhone De ce Swift și nu Objective-C?
Articol Swift poza 2 couverture

Dezvoltare Android / IPhone

De ce Swift și nu Objective-C?

In acest articol doresc sa va prezint avantajele folosirii limbajului de programare Swift în dezvoltarea aplicațiilor mobile iOS.

DE CE SWIFT?

Lansat de Apple in iunie 2014, Swift este un limbaj de programare, mult mai rapid și mai bun ca predecesorul său, Objective-C. A urmat Swift 2, iar apoi Swift 3 a fost publicat in iunie 2016. Asadar, a sosit timpul sa renuntati la Objective-C, este valabil chiar si pentru cei mai fideli adepti ai acestui performant program.
Ieșiți din zona de confort și adoptați acum Swift!

Aici, la Beler Soft, eu am adoptat Swift încă de la lansare. Țin minte că mi-a luat ceva timp până m-am familiarizat cu el, fiind obișnuit cu Objective-C, insa rezultatele s-au văzut încă din primele zile.
Codul sursă este mult mai bine structurat și organizat, se pot adăuga funcționalități mult mai ușor, iar erorile sunt gestionate mai bine, dorindu-se rezolvarea lor la compilare și nu la rularea programului.

Programatorii se intreaba adesea asupra urmatoarelor aspecte:
– Ar trebui să învăț Swift?
– Este Swift stabil?
– Este Swift mai rapid ca Objective-C?

La toate acestea, răspunsul este DA!
Trebuie să înveți Swift, indiferent dacă ești un programator experimentat sau abia acum te-ai apucat să dezvolți aplicații iOS.

AVANTAJELE SWIFT

De ce este Swift atât de puternic și uimitor?
– Este sigur
– Este stabil
– Este un limbaj de programare multi-paradigmă
– Are o sintaxă curată
– Este rapid

Swift este un limbaj de programare foarte sigur, dispunand de multe verificări de securitate la compilare. Obiectivul principal este de a rezolva cât mai multe probleme în timpul compilării și nu atunci când aplicația este în execuție.
Un lucru important de menționat îl constituie introducerea variabilelor opționale. Cu ajutorul lor, notăm absența unei valori – nil. Variabila poate avea sau nu valoare, ea fiind opțională.
De exemplu:

var variabila: String? // nu are nici o valoare
variabila = ”Hello” // variabila are acum valoare

Swift are, de asemenea, un mecanism de tratare al erorilor puternic și foarte ușor de folosit. Sintaxa este asemănătoare cu cele din alte limbaje, dar funcționează într-o manieră diferită. Conține însă, cuvintele cheie: throw, catch și try:

• Un obiect de tip eroare trebuie să se conforme protocolului ErrorType
enum ServerError : ErrorType {
case BadRequest,
case GeneralError(code: Int)
}

• Enum-urile Swift sunt cele mai utile pentru a reprezenta o grupare de obiecte de tip eroare
• Pentru a arunca o eroare folosim throw, iar pentru a prinde o eroare folosim try.

Din punct de vedere al siguranței, alte avantaje sunt:
– Siguranța memoriei asigură inițializarea variabilelor înainte de a fi folosite
– Un proces de inițializare în două faze cu verificări de securitate
– Suprascrierea metodelor obligatorii
– și multe altele …

Swift este un limbaj de programare multi-paradigmă. Oferă suport pentru diferite stiluri de programare, cum ar fi programarea orientată-obiect, orientată-protocol, funcțională, generică, structurată bloc, imperativă și declarativă.
Conceptul de programare orientată-protocol nu este nou, dar protocoalele Swift au câteva trăsături speciale. Ideea generală a programării orientate-protocol este de a folosi protocoale în locul tipurilor. În acest fel, putem creea un sistem flexibil cu relații ușor de modificat de tipurile lor rigide.

Swift este proiectat să fie de înaltă performanță și rapid, prin următoarele tehnici:
– Optimizarea layout-ului memoriei
– Crearea de legături ale metodelor în timpul compilării
– Optimizări ale compilării programelor

PERFORMANȚĂ

Avem două caracteristici cheie ale codului sursă:

– Calitatea codului – trebuie să fie flexibil, solid și să aibă o arhitectură bună
– Performanța codului – aplicația trebuie să fie rapidă

Cea mai importantă sarcină este de a face codul sursă funcțional pe o arhitectură stabilă. Obținearea unei performanțe înalte poate fi complicată și periculoasă. Nu trebuie să optimizăm de prima oară ci trebuie să măsurăm performanța codului sursă. Astfel, putem optimiza doar părțile din aplicație care sunt lente.

O performanță înaltă este crucială, deoarece este în legătură directă cu experiența utilizatorului. Aceștia vor ca rezultatele să fie afișate imediat; nu vor să aștepte ca pagina să se încarce, să vadă un gif de încărcare prea mult sau o animație care se mișcă lent.

Bine-inteles, din an in an, dispozitivele mobile devin din ce în ce mai puternice, cu o viteză mai mare a procesoarelor, memorie mai mare, mai mult spațiu si viteza de stocare.
Chiar daca problemele de performanță par irelevante datorită componentelor hardware, complexitatea software crește fara oprire. Avem date mult mai complexe de stocat și de procesat. Trebuie să afișăm animații mult mai complexe, de tratat tot mai multe operații.

Pentru a mari performanta, o prima metoda este de a adăuga mai multă putere dispozitivelor. Putem extinde numărul serverelor pentru o mai buna gestionare a datelor. Insa, nu putem sa cerem clienților să-și actualizeze in mod frecvent telefoanele mobile sau să-și cumpere altele noi, mai performante. A doua metodă constă în tratarea chirurgicala a problemei care cauzează scăderea performanței aplicației. Pentru acest lucru, trebuie să identificăm cu precizie originea acesteia, de exemplu, codul sursă lent, să il îmbunătățim sau să il înlocuim.

CARE ESTE MAI RAPID: OBJECTIVE-C, SWIFT SAU C?

Mulți dintre noi ne intrebam cât de rapid este Swift.
Haideți să vedem împreună!
Vom face un prim test.

Vom sorta un vector cu 100,000 de numere generate aleatoriu. Folosim funcția sort din biblioteca sdtlib și măsurăm timpul în fiecare din cele trei limbaje de programare.

ro01grafic
Conform Swift High Performance, Xcode 7.0, Swift 2

ro02timpsortare

Observăm că Swift este de 14.5 ori mai rapid ca Objective-C, și de 2.3 ori mai rapid ca C.
În alte exemple și experimente, în general C este mai rapid decât Swift, dar Swift este mult mai rapid ca Objective-C.
În continuare, vom compara viteza de sortare între Swift arrays și unsafe C arrays (UnsafeMutablePointer).

Unsafe C arrays
var cArray = UnsafeMutablePointer.alloc(count) // 30.000 de numere întregi
Swift
var sArray:[Int] = []

Si iata rezultatele:

r003sortare

ro04timpexecutie

Observăm că viteza este relativ similară în ambele cazuri. Un dezavantaj al utilizarii UnsafeMutablePointer este că nu avem funcții ajutor predefinite, trebuie să le scriem noi, în timp ce în Swift există funcții de sortare sau de filtrare.
Un alt dezavantaj îl reprezintă faptul că trebuie să ne alocăm manual memoria și să o eliberăm, existând riscul de a accesa zone de memorie care nu aparțin programului.

În final, prezentăm performanța în Swift folosind diferite metode și tipuri de colecții: seturi, array-uri sau dicționare.

ro05entitatea

Ideile de retinut din acest comparativ:
– inserarea sau eliminarea obiectelor din array-uri se face cu viteză, dar are o complexitate O(n), crescând odată cu numărul de elemente din vector
– dacă dorim să facem o căutare masivă de elemente, avem o performanță mai bună folosind seturi

PROCESUL DE COMPILARE

Procesul de compilare al codului sursă scris în Swift este unul foarte interesant, dupa cum veti descoperi mai jos:

ro06compilare

Mai întâi, codul sursă este transformat în AST (Abstract Syntax Tree). Apoi, este transformat în SIL (Swift Intermediate Language), mai întâi într-un limbaj SIL brut, ulterior într-o stare canonică. După aceea, codul sursă este transformat în LLVM IR (Intermediate Representation). În final, după optimizări, codul sursă se asamblează și devine executabil pentru arhitecturile specificate.

CONCLUZII

Am văzut împreună câteva teste de performanță între Swift și alte limbaje de programare, observând rapiditatea și avantajele acestuia.

Amintiti-va de sfatul meu: este important să optimizăm codul sursă doar atunci când este nevoie și nu de la început.

O arhitectură solidă și un cod sursă curat sunt cele două caracteristici esențiale în dezvoltarea aplicațiilor bune.

O optimizare de performanță nu înseamnă neapărat o mai mare complexitate codului sursă. Alegerea structurilor de date potrivite îmbunătățesc performanța aplicației.

Swift este limbajul de programare recomandat de Apple în dezvoltarea aplicațiilor native iOS, iar, treptat, acesta va înlocui Objective-C.

Sintaxa codului sursă este mult mai frumoasă și ușor de înțeles în Swift.

Si dupa cum sustine Apple, Swift is like Objective-C, without the C.

Referințe:
https://www.raywenderlich.com/123100/collection-data-structures-swift-2
https://yalantis.com/blog/is-swift-faster-than-objective-c/
Swift High Performance, Konstiantyn Koval, 2015, Packt Publishing

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

Poți folosi aceste etichete și atribute HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Facebook
Google+
http://blog.beleringenierie.com/ro/2016/07/30/pourquoi-swift-et-non-plus-objective-c/">
Twitter