Press "Enter" to skip to content

GOTO 2015 • Swift 2 Under the Hood • Alex Blewitt


quindi riguardo a questo discorso cosa farò
ho intenzione di parlare un po ‘di
la storia di Swift dove è arrivato Swift
da alcune delle cose che l’hanno trasformato
nella lingua che è oggi sono
andando utilizzare queste informazioni per poi parlare
su ciò che rende Swift veloce perché lo è
che Swift è un linguaggio migliore da avere
l’obiettivo visto dalla velocità
prospettiva e avremo un po ‘
di guardare dove Swift sta andando mio
il nome è Alex Blue, puoi contattarmi
twitter al nostro blu e io sono per i miei peccati
il nostro prossimo proprietario e un obiettivo veterano-c
programmatore indietro nei giorni in cui avere
I grandi alberi da pizza neri erano fantastici anche io
ha scritto un libro Swift essentials che è venuto
alla fine del 2014 alla fine dell’anno scorso
tutte queste informazioni sono in corso
registrato per il video quindi solo per quello
questa informazione è basata su Swift 2.1
quale era l’uscita pubblica a dicembre
è uscito un paio di mesi fa è Swift
ancora non ancora aperto, ho controllato
prima di iniziare non si sono aperti
originario, ma hanno ancora quattro settimane
per aprirlo come dicevano loro
fare entro la fine del 2015, quindi torna presto
Ho anche un altro libro
versione di Swift due elementi essenziali
uscendo il prossimo mese
Allora, dove Swift venire da Swift ha
stato sotto le coperte per un bel po ‘
tempo di sviluppo ma puoi tracciare
la storia fino a quando
obiettivo-c ha dato l’avvio all’obiettivo C
nel 1983 e fu concepito come un piccolo
linguaggio basato sulla conversazione che potrebbe essere adatto
uno in cima a una programmazione basata su C.
linguaggio che probabilmente non avrebbe avuto
conquistato il mondo
tranne che successivamente lo ha autorizzato come loro
sistema operativo e il prossimo è abbastanza
famoso dopo che è uscito nell’89 ed è
il prefisso NS che vedi sulle cose
come NS away e NS dictionary e NS
l’oggetto successivo non stava andando troppo bene
fino a quando Apple ha acquistato il prossimo nel 1996
e questo è stato davvero il tempo di consegna
sia per Mac che per la piattaforma e Apple
come la società così oggettiva-c va tutto
la via del ritorno essenzialmente all’inizio
Nel 2000 c’era un prodotto chiamato OS 10
server che è uscito nel 99 ma lo era
davvero OS 10
uscì nel 2000 e poi pubblicamente
rilasciato nel 2001 che ha acquistato l’obiettivo C
alle masse interessante sul TOB
Indice a partire da novembre Objective-C è stato dovuto
abbastanza grandi a causa dell’iPhone e
ora è in discesa e in realtà
Obiettivo C e Swift sono collo-e-collo
nell’indice OB il prossimo mese lo faranno
essere scambiati in giro quindi se andrà sopra
Obiettivo C per la prima volta, quindi cosa
è l’obiettivo C, probabilmente lo saprai
a riguardo se sei stato coinvolto con
l’ecosistema Apple o l’ecosistema iOS per
qualsiasi periodo di tempo, ma essenzialmente esso
era un processore che originariamente un
preprocessore che traduceva le classi
potrebbe compilare in codice C e
il motivo per cui è così popolare oggi era
perché formiamo la base del
sistema operativo successivo e poi
perché è stato integrato nel GCC
e quindi rilascia GPL voi
ha iniziato a vedere altre piattaforme
L’obiettivo C ce n’è uno chiamato nuovo step
che è ancora intorno a te può ancora avere
l’equivalente del costruttore di progetto all’interno
lì, ma forse non è così popolare
su sistemi non Apple puoi effettivamente
dare un’occhiata a dove viene l’ obiettivo C
da in una sola volta, anche se probabilmente non
su questa diapositiva risale al 1999 Apple
computer così una lunga storia ma il
La ragione per cui cito l’ obiettivo C è perché
c’è stato davvero molto
sviluppo delle lingue dal vecchio
giorni così nei vecchi tempi abbiamo avuto C in
piccoli discorsi su quelli sfocati
la sinistra e l’obiettivo C erano davvero le
lovechild tra C e chiacchiere che
uscì nel 1983 più o meno nello stesso periodo di
Il C ++ è uscito così il C ++ originale e il
originale Objective C è venuto fuori alla
lo stesso tipo di tempo non è quello che è successo per
un po ‘e poi LLVM è stato rilasciato
nel 2003 che è davvero l’inizio
Illuminazioni della riqualificazione di
la piattaforma di sviluppo di Apple e questo
ha portato alla oggettiva-c sorta di tangenzialmente
in obiettivo-c 2.0 tangenzialmente nel 2007
quando abbiamo avuto cose come dinamiche
proprietà di riferimento automatico automatizzato
contando e quando Apple ha finalmente avuto
il GCC in clang che è stato rilasciato
nel 2009 si è spinta reale dietro
cosa questa piattaforma avrebbe queste
le cose sono venute tutte insieme con il
e rilascio della piattaforma Swift in
2014 ora a quel tempo erano stati
lavorando su di esso per diversi anni prende
influenza su entrambi gli obiettivi-c
sfondo sarebbe anche C + + e di
Ovviamente recentemente abbiamo visto Swift 2.1
che è stato rilasciato un paio di mesi
fa ora la cosa importante di questi
le lingue in cima sono tutte
basato sulla spedizione statica che è quando
compili e chiami metodi a a
oggetto particolare che conosci al momento della compilazione
tempo che cosa parlerà a quelli
in fondo sono tutti basati sulla dinamica
spedizione e la cosa interessante di
Swift è che in realtà ha delle modalità
essere in grado di fare entrambe queste cose così tu
può avere qualcosa che è compilato il
nuova spedizione statica e quindi potrebbe
essere collegato in modo rapido e hai anche
la capacità di chiamare all’esistente
framework obiettivi-c e uso dinamico
anche la spedizione ma questo è un periodo di
30 anni e molto è cambiato in
gli ultimi trenta anni trent’anni fa
tornando al futuro siamo ancora nel
futuro trent’anni fa gli umani pensavano
gli orologi digitali erano un’idea davvero carina
e trent’anni fa c’era una stella
Guerre film nei cinema così tanto ha
cambiato da allora ma, soprattutto, per
processi
loro sono sempre più veloci ma
desktop tendeva a plateau conoscere
tre dispositivi mobili gigahertz sono ancora
in aumento oggi, ma generalmente sono dentro
l’ ordine da uno a due gigahertz e
la performance nell’ultimo decennio ha
provengono dal numero aggiuntivo di core
che sono venuti così se è così
più core su CPU CPU multiple o
per le GPU più core all’interno del
GPU è davvero come stiamo andando
più veloce ma la cosa importante è quella
mentre la velocità della CPU ha aumentato il
la memoria non è aumentata quasi altrettanto velocemente
questo è un grafico dal computer
architettura un approccio quantitativo
che è un libro ricevuto da LC
burr non puoi davvero vedere i numeri
ma è una specie di decennio dal 1980 in poi
sinistra al 2010, sul diritto e sulla
l’asse dal lato opposto è davvero giusto
un indice di registro per la potenza di dieci cento
mille diecimila e così via così
metti alcuni indicatori su questo grafico così tu
puoi vedere da dove vengono
avevamo Commodore 64 che usciva nel
metà degli anni ’80 e questo era più o meno il tipo di
velocità di confronto che hai avuto tra
noi e CPU abbastanza interessante il
Commodore 64 era praticamente lo stesso
processore e potenza come avevano sul
Computer di atterraggio di Apollo che erano
menzionato nella presentazione precedente
hanno lo stesso tipo di velocità
che avevano lo stesso tipo di memoria che
il computer di atterraggio Apollo era a 16 bit
e i Commodores un 8-bit ma è
tipo simile di potenza di elaborazione tra
poi abbiamo avuto l’Apple Mac
rilasciato nel 1984 la versione originale noi
aveva la stazione di Mac che è venuto in nel
Anni ’90 e quella fu davvero la nascita di
Obiettivo-c
ora oggettivo-c in realtà è successo a pochi
anni prima di quel tipo di periodo
tra Commodore 64’s e Mac
rilasciare ma era in un momento in cui in
i processi stavano diventando più veloci e la memoria
stava diventando più veloce nello stesso tempo
erano ancora relativamente vicini a ciascuno
altro ma poi scorrere oltre
sistemi con iBook il PowerPC g5
e in effetti l’iPhone nel 2007 e
come stiamo andando più veloce e CPU
il divario tra memoria e CPU è stato
diventando sempre più ampio e
interessante uno dei più recenti
ha rilasciato computer che potreste aver sentito
di esso il tipo Raspberry Pi zero
in giro qui sulla mappa in termini
della velocità del processore che pensiamo di essere
andando un bel pò di tempo se sei un fan
di Raspberry Pi e sei un fan di
spazio che potresti essere interessato a sapere
che c’è una varietà pi seduta in cima
di un razzo in Florida al momento e
a breve partirà per il
Stazione spaziale internazionale
si presenta stasera a mezzanotte questo locale
tempo se sei interessato a guardarlo
ma il punto con tutte queste cose
è che c’è una vera differenza
tra quanto velocemente la CPU è in esecuzione e
quanto velocemente possiamo ottenere dati dalla memoria
ed è perché c’è una quantità enorme
di latenza che si verifica tra la memoria
e la vera corsa causa la strada
che abbiamo risolto questo problema introducendo
cache così ogni core in questi giorni di solito
ha una cache di livello 1 che si trova carina
molta luce accanto al core della CPU stessa
può ottenere dati dentro e fuori a circa 1 e a
latenza di nanosecondi c’è di solito a
cache di livello 2 che se hai multi
i nuclei su un singolo chip vengono quindi condivisi
tra ma tutte quelle chiamate e
c’è spesso una cache di livello 3 che si blocca
intorno al back end ogni volta che ottieni
più lontano dal processore che hai
maggiore e maggiore latenza che è il
tempo tra quando si richiedono i dati
essere lì e il tempo che viene
indietro e questo è in realtà piuttosto un
parte importante perché quando Swift era
sviluppato stavano cercando di evitare che
ritardo di latenza la latenza di uscire
andare a prendere qualcosa da fare dopo e poi
portandolo su di certo in questi
i numeri sono basati su iPhone 6 e
iPhone 6s è l’iPhone della CPU
processore a8 e a9
e così questo diagramma se si vede bene
le diapositive della presentazione sono disponibili
dopo puoi tornare indietro e guardare il
dettagli ma sul lato sinistro
abbiamo la cache di livello 1 che abbiamo allora
ho una cache di livello 2 che non riesci a vedere
l’asse in questo lato ma questo livello 2
la cache è di circa 10 specie di nanosecondi
vale la pena di latenza un colpire la cache di livello 3
in circa 80 millisecondi 80 90 secondi
e quindi la memoria principale è così tanto
più lontano quindi se riusciamo a ridurre il
dimensione dei programmi verso il basso e possiamo
risolvere i viaggi di andata e ritorno verso
memoria quando saltiamo intorno a noi
possiamo rendere i nostri processi più veloci e possiamo
ridurre la tensione della batteria e più velocemente
processori e riduzione del consumo della batteria
sono davvero ciò di cui Apple è preoccupata
ecco perché abbiamo creato anche Swift
avere altre belle cose che sono venute
per esempio, in Swift avevamo spazi dei nomi
e moduli ero un grande modo di rompere
cose che prima stavano usando
strutture importanti con Swift noi
avere la possibilità di scegliere tra a
tempo base di riferimento e una base di valori
digitare quindi i tipi di base di riferimento di dist NS
oggetti hai un puntatore da qualche parte
in memoria e quindi quei dati sono memorizzati
là dentro con un camion di riferimento sicuro
tipo di base del tipo di base del valore quindi il
l’oggetto è in realtà contiguo in memoria
e se ne hai conoscenza puoi farlo
li espongo importante Swissport
sull’interoperabilità con l’ obiettivo C
e perché l’ Objective C è basato su C
ha cose come un indefinito
comportamento e demoni nasali quelli sono
generalmente cose cattive di avere rapido
non ha nessuno di questi non definito
problemi di cui dobbiamo preoccuparci
moduli bene sappiamo di moduli in
I termini dell’obiettivo C sono quadri
Quelli basati sull’obiettivo C che possiamo collegare
in sono cose come kit di interfaccia utente di fondazione
kit sprite abbiamo moduli che
rappresentare la programmazione in C
è come la spedizione per fare il grande
Grand Central Dispatch che useresti
l’ obiettivo-c e la simulazione D se tu
bisogno di più esecuzioni e cose del genere
Darwin che poi si aggancia al C
librerie che potresti aspettarti di venire
attraverso cose come random e exit e
così via e poi ci sono quelli che sono
basati su Swift questi sono pochi e lontani
tra al momento, ma se e quando
Apple rilascia Swift come open source si
può aspettarsi un sacco di quelli
arriveranno insieme quindi abbiamo tutto
ha ottenuto lo Swift che è automaticamente
modulo importante che definisce le cose
come stringa e array nel dizionario e
c’è un modulo costruito in pure e
integrato è come il rapido una volta
associa i dati al processo così
che stai correndo su di esso definisce
rappresentazioni interne come 256 bit
int e così via tutte queste cose sono
avvolto insieme in un tipo coerente
spazio il tipo di spazio ha o
classi di tipi di riferimento in Swift
o in oggettivi-c e tipi di valore che
dovrebbe assumere la forma di strutture ma
quelle sono le cose che effettivamente ottengono
messo in memoria anche il sistema dei tipi
ha la capacità di distendersi in più
le cose in cima a loro sono i protocolli
un modo di eseguire la tipizzazione basata sul dotto a
il protocollo dice fondamentalmente se una classe ha un
metodo particolare quindi adotta il
protocollo e puoi aggiungere protocolli a
classi esistenti senza bisogno di
cambia il loro codice sorgente e le estensioni
sono modi per aggiungere nuove funzionalità a
metodi e classi senza bisogno di
cambia qualsiasi codice sorgente entrambi
queste due cose si sono dimostrate finite e
di nuovo con l’obiettivo C di essere a
ottimo modo di evolvere le cose in avanti e
Swift non fa eccezione a quello
cosa interessante di questo è che a
una volta quando hai qualcosa come un
valore numerico 64 bit in 32 bit int allora
è rappresentato allo stesso modo in cui è
in C è rappresentato solo come un piccolo
spazio in bit senza puntatori extra
dentro ma si comporta come se fosse un
tipo reale quindi l’ ultima presentazione è stata
parlando di studioso e tipi che hai
cose del genere int in là per essere
in grado di avvolgere ulteriori metodi in giro
esistenti oggetti interi ma nel
lo studioso si avvicina a questi tipi
essenzialmente un valore wrapper quindi è a
oggetto wrapper e cambia il
struttura e memoria in Swift non lo fai
cambia la struttura in memoria che hai
esattamente lo stesso contenuto in te
basta aggiungere ulteriore comportamento all’interno di così
il modo in cui è definito inter è
avere una struttura e quella struttura
ha un singolo valore al suo interno insieme a
alcuni altri metodi che fanno ciò che
massimo e quale è il valore minimo
anche se int sembra solo un 32-bit
valore è in realtà trattato come un
tipo di struttura in surf e perché
è trattato come un tipo di struttura che puoi
avere metodi che sono associati con esso
puoi anche adottare i protocolli, quindi non c’è
qualcosa chiamato un tipo intero con segno
che rappresenta tutti i tipi di segni in
Swift e hai un protocollo chiamato
comparabile che ti permette di confrontare
due cose e assicurarsi che abbiano
lo stesso contenuto in modo simile al
int unsigned che hai anche a
insieme di protocolli simile in alto con
tipo intero senza segno e confrontabile il
la cosa bella è che le dimensioni di entrambi
queste cose sono ancora 8 bit così quando tu
avere uno degli otto byte quando tu
avere una di queste cose che si spegne
a memoria poi prende un fisso
quantità di spazio dentro e quello è
perché questi sono stati integrati in 64 così effettivamente
la cosa reale che è sotto le coperte a
molte elaborazioni avvengono in Swift con
questi protocolli e il modo in cui
guarda che lo disegniamo come un tipo è che noi
avere qualcuno in cima che è in realtà
solo un nome generico per un protocollo
senza alcun metodo dentro e là
poi tutti i tipi di prendere in 32 si
int voi in 32 e così via
Strutturerò i tempi base il loro valore
tempi di base quando hai un tipo di valore
e tu chiami il metodo con cui passi una copia
di quell’oggetto nella funzione te
non passare un riferimento ad esso se ne hai
in un modo di queste cose poi hai
in un modo che riprende il contiguo
dimensione del numero di strutture che
hai dentro e aggiungiamo il comportamento a
loro avendo protocolli e poi il
estensioni se vuoi, se lo desideri
scrivere un metodo per calcolare mezzo an
numero intero, ad esempio, è possibile aggiungere un
metodo chiamato metà come estensione a
il tipo int e quindi te lo permetteresti
fare sulla riga di comando ovunque un punto
metà e ti restituirà il valore
di nuovo così ho passato un po ‘di tempo
guardando indietro all’obiettivo-c e parlando
su come sono disposte le cose nella memoria
perché mi sono preoccupato di fare tutto questo setup
beh, tutto dipende da come Swift
essenzialmente ha i mezzi per essere in grado di
essere più veloce dell’obiettivo C in una volta
uno dei modi in cui lo fa
come è strutturato il ricordo se lo hai
Obiettivo C e usi qualcosa del genere
una schiera di oggetti NS quindi davvero cosa
stai facendo è archiviare e un modo
di puntatori e questo è un modo di puntare
quindi punta a un oggetto qui o a
oggetto qui sopra oggetto qui e così via
su questo porta ad entrambi i ricordi
frammentazione e anche memoria diversa
posizioni e questo effettivamente fa male CPU
performance perché se vuoi scrivere
un ciclo per passare attraverso tutti gli elementi
all’interno di un nsarray non è solo il caso
di dover passare attraverso il punto è
devi anche dereferenziare tutto
anche quelli puntatori e quando lo fai
la dereferenziazione che la CPU deve quindi seguire
indietro alla memoria probabilmente non è in
cache quindi abbiamo 180 completi no, lo so
secondi colpiti per essere in grado di ottenere l’oggetto
che ritorna e una volta che l’abbiamo fatto
e andiamo al secondo oggetto tu
hanno esattamente la stessa cosa di nuovo array
di strutture o tipi di valore in Swift I
effettivamente presentato come uno continuo
blocca quindi se hai in un modo di 32 bit
allora sono solo 32 bit dopo 32 bit in
memoria e questo è ottimo per i processori
perché uno dei modi che abbiamo visto
la CPU si occupa dei problemi di latenza
avendo cache e cosa succede quando
scrivi una lettura per il primo elemento
nell’array ciò che succede è il sistema
colpirà e riempirà una riga di cache completa
e una linea cache completa è diversa per
diversi processori ma 64 byte no
un numero inaudito per il livello 1
cache quindi quello che succede è che si rilascia un
leggere per 64 byte di dati e questo
significa come si passa attraverso i primi otto
16 32 in realtà stai solo leggendo
direttamente dal cache l’altra cosa
che la CPU è molto brava sta notando
che leggi questo blocco allora il
blocco successivo quindi sei probabilmente
intenzione di voler leggere il prossimo blocco
in seguito e la CPU può effettivamente
emettere erbacce speculative per dire ok noi
sembra che stiamo camminando in questo
array linearmente
leggiamo in anticipo e otteniamo alcuni dati
che è stato riempito nelle linee della cache
e così l’ottimizzazione della memoria per il valore
i tipi basati sono davvero importanti ora io
dovrebbe indicare se hai a che fare con
obiettivo-c ci sono in realtà un mucchio
di valori basati struct se affrontato
cose come
lei bagna i valori fluttuanti di disturbo e così via
che ha lo stesso tipo di performance
ma Swift lo rende più chiaro e ci prova
per incoraggiare l’ utente a utilizzare più valore
tipi piuttosto che oggetti basati su rapper
che hai nell’Obiettivo C l’altro
la differenza è statica e dinamica
invio abbiamo parlato delle influenze
le lingue e dove sono venuti
dalla spedizione in passato, ma è statico
la cosa che è usata da C e C ++ e
di Swift se non usi l’Objective C
le classi e la cosa bella è che il
le chiamate di funzione sono quindi conosciute con precisione
così quando hai una chiamata di funzione e così
raggiunge una funzione che conosci
al momento della compilazione cosa sarà
il compilatore può generare essenzialmente a
chiamata di funzione diretta con chiamata o chiamata Q
al semplice diretto questo non è solo
il modo più veloce che puoi chiamare
funziona ma la CPU del compilatore sa
su queste fantastiche istruzioni e se noi
può vedere nella pipeline c’è un chiamato
istruzione che scende ed è
indicando un indirizzo che è già
risolto quindi può raggiungere la memoria
e avvia i download in quel codice così da
il tempo in cui l’istruzione di chiamata colpisce il
CPU ha già il codice lì dentro
per farlo spedizione dinamica che è il
in che modo funzionano i metodi Objective C.
il modo in cui Ruby e oggetto e il
piccola opera parla passerà attraverso un
chiamata indiretta chiamata oggetti ovviamente
messaggio inviato essenzialmente ciò che ovviamente
i mittenti che stanno facendo sta sostituendo
la chiamata con un pool a una ricerca dinamica
di qualcosa in un tavolo hash così quando tu
vuoi chiamare un nome di metodo o un selettore
nella terminologia Objective C si collega
guarda nel tavolo e poi ottiene il
dati indietro Ian il motivo per cui ho messo qui
in Swift Swift è effettivamente in grado di
generando classi che si adattano a
il runtime oggettivo-c e utilizzare dinamico
spedizione e ce l’hanno così
che possono essere compatibili con
I framework iOS esistenti come te ottengo
e in definitiva fornire un percorso di migrazione
da uno all’altro così la differenza
tra invio statico anche effetti
ottimizzazione se abbiamo una sequenza di
chiamate di funzione A a B a C e possiamo
dimostrare che chiameremo sempre a
loro una gonna call B allora stiamo andando a
chiama C c’è un modo per ottimizzare tutto
di queste cose insieme essenzialmente
schiacciandoli in un unico metodo così
che abbiamo solo una copia del codice
se si fa che non c’è scorrazzavano in giro
nella memoria non c’è ritardo
vedere i problemi che la CPU può ottenere
deve essere fatto e poi tornare in a
modalità di sospensione profonda senza alcun extra
energia nella spedizione dinamica come hai tu
con l’ obiettivo C non hai questo
perché ogni volta che salti da uno
metodo ad un altro tu vai sempre via
Messaggio Objective C inviato e la chiave C.
non puoi davvero ottimizzare l’obiettivo C
messaggio invia perché ogni volta che vai
attraverso di esso sta cercando una voce in
il tavolo hash e deve aspettare fino a quando
sa quale sia la risposta per quell’hash
il tavolo è prima che possiamo espanderci
e chiama la funzione ora Objective C
messaggio n è veloce il suo assembly integrato
ed è stato sintonizzato a mano su
decenni ma c’è ancora un po ‘di spese generali
c’è un sovraccarico non solo nel fatto
che ci sono istruzioni extra che
significa che stai andando a causare extra
batteria, ma anche qualsiasi funzione
hai nel messaggio C inviato oggettivo
significa che si sta riprendendo almeno due
parametri che ti stai prendendo in mano
obiettare questo che sta facendo riferimento alla
oggetto che stai chiamando form e anche il
CMB il valore del selettore e ciò significa
che qualsiasi funzione tu chiami sia
avrò sempre due argomenti
passarci dentro adesso è importante
perché sotto le coperte cosa succede
con i processi basati sulle chiamate è che loro
di solito hanno quattro argomenti che loro
può memorizzare in registri e poi il resto
ne viene versato in pila così con
Obiettivo C ne ottieni solo due
argomenti che puoi chiamare in
modo efficiente prima che debba formare un
cosa leggermente diversa e efficiente
se c’è una cosa che la Apple ama
efficienza perché l’efficienza si traduce
nella durata della batteria e il più a lungo possibile
avere la durata della batteria quindi più telefoni
che possono vendere ora questo assemblaggio ha
si è evoluto nel tempo indietro nel
giorni di leopardo era di circa 100 byte
vale la pena di assemblare c’è stato un salto enorme
che è andato giù a Lion quando è caduto
giù a 47 byte che è quando hanno preso
un caso particolare di gestione dei rifiuti
collezione qualcosa che potresti avere
ricordava la raccolta dei rifiuti
sostenere che l’obiettivo C è rientrato
quei giorni e in particolare gli occhi d’aquila
avrò notato che in Yosemite è
in realtà mi sono alzato un po ‘e
questo perché c’è stato qualcosa
chiamato puntatori affusolati o non puntatore
Iside che ha bisogno di un po ‘ di mascheramento
prima di allora chiama nel reale
la funzione è disattivata, quindi è ancora carina
veloce
maggior parte dei byte che si adattano esistono
andando a inserirsi in una linea di cache ma
essenzialmente la CPU non può ottimizzare il
chiama tra le funzioni perché va
in un messaggio invia e poi si spegne
praticamente a ogni messaggio Objective C
quella
ora l’altro motivo le mie ottimizzazioni
questo è così importante perché se tu
avere una catena di piscine da A a B e puoi farlo
comprimilo in una B all’improvviso
aprire la possibilità di più
ottimizzazioni che si verificano non solo voi
sbarazzarsi della funzione chiamata e il
qualsiasi pila o registro fuoriuscite che sono
andando avanti ma puoi anche evitare
ramo mancante e salti di memoria che
può anche rallentare le cose ma
importante è che sblocca anche ulteriormente
ottimizzazioni degli spioncini quindi se abbiamo un
funzione qui pippo che prende un int
valore se il valore int è negativo dire
abbiamo riscontrato una sorta di condizione di errore
e poi torniamo un’interruzione anticipata fuori
la funzione quindi se mai la chiamiamo e
sappiamo al momento della compilazione che il valore
è negativo in sostanza è un no op e
possiamo semplicemente sbarazzarci di esso e cancellarlo
fuori e in realtà un bel po ‘di
ottimizzazioni fanno quello svantaggio è
aumenta la dimensione del codice potenzialmente se
stai schiacciando queste cose insieme
ma sul lato positivo se ne hai
valori negativi o altre cose da
una condizione particolare allora puoi
ottimizzare le chiamate e in generale
il codice più veloce è il codice che il
La CPU non deve mai funzionare anche lì
qualcosa R che viene chiamato sia
ottimizzazione del tempo di collegamento o intero modulo
ottimizzazione a seconda di dove si aggiunge
dal primo ma essenzialmente il
scopo di questo è quello di dire invece di
concentrandosi solo su un singolo file e facendo
le ottimizzazioni dentro ci che noi
possiamo fare è che possiamo estrarre i moduli che possiamo
chiama le nostre ottimizzazioni in modo diverso
file tra diversi moduli e quello
di solito sblocca un sacco di cose diverse
ottimizzazioni che accadono così quando tu
compilare file invece di generare
un file oggetto Intel con tutta la CPU
informazioni specifiche al suo interno
in realtà voglio avere una forma di LLVM
byte code o ir quando il linker LLVM
quelli può quindi tirare tutti quelli insieme
ed eseguire ottimizzazioni e generalmente fare a
lavoro molto migliore per essere ottimizzato
cose e non mi sorprenderebbe se
quelle cose hanno iniziato a sanguinare dentro
anche le librerie veloci per quando
stai copiando il codice della libreria Swift
in realtà sta ottimizzando la libreria
codice per la tua particolare applicazione così
che entra ora dalla nostra programmazione
punto di vista se si vuole prendere
vantaggio di ciò che vorrete
fai i tuoi metodi
strutture dati come definitive o private
perché quelli quindi sostanzialmente sbloccano
permessi per il compilatore di essere in grado
per sfoderare quelle troie sono sempre definitive
non puoi creare una sottoclasse di strutture in modo da non farlo
hai modo di cambiare questo e se tu
avere funzioni definite come private o
interni allora saranno
dichiarato come locale per ID che quello
file o quel modulo o target e loro
può essere ottimizzato via ora alcuni LLVM
davvero si sono riuniti circa lo stesso tipo
di tempo il ragazzo che ha fatto la maggior parte del lavoro
su LLVM c’era un ragazzo di nome Chris Latner
ed era anche l’architetto principale
dietro a Swift e lui è uno che è davvero
spingendo per ottenere Swift open-sourced LLVM
è stato in giro per un po ‘ ma
originariamente stava per virtuale di basso livello
macchina che non è proprio un bel nome
soprattutto per le persone che sono venute
da sfondi VM da Java o
il mondo di.net veramente quello su cui lavora LLVM
è l’ idea di un’assemblea astratta
linguaggio qualcosa in cui hai un
numero infinito di registri e can
effettivamente chiama funzioni senza avere
per dichiarare particolari prototipi è
convocazione e restituzione della convenzione agnostica
in modo che tu possa specificare le cose e tu
puoi avere una chiamata di funzione c o tu
può avere una chiamata di funzione obiettivo-o
anche una chiamata in linea diretta
e questo è usato nel compilatore Swift
la pipeline di compilazione Swift ha qualcosa
questo lo traduce in un astratto
sintassi albero prima di tutto l’abstract
l’albero della sintassi viene quindi analizzato e
analizzato semanticamente per essere sicuro
riferendosi a tipi corretti allora diventa
tradotto attraverso in qualcosa chiamato
SIL che è l’ intermedio Swift
linguaggio che è un po ‘come alto R
ma un livello leggermente più alto così ha
conoscenza dello slike intrinseco di Swift
gestione delle eccezioni chiamando signore
funzionalità e metodi Swift ci sono
stato un video pubblicato su YouTube da Chris
Latner dalla riunione degli sviluppatori di LLVM
quello che è successo a ottobre penso che il
Il video di YouTube è aumentato di circa tre settimane
fa dove parla dei benefici di
avere SIL come lingua separata per IR
se ti interessa ti suggerisco
guarda che fino da parte dello sviluppatore LLVM
incontro e poi il sil viene tradotto
in ciao VM IR ora che è stato intorno
per un lungo periodo che è successo quando LLVM
è stato inizialmente rilasciato è usato da un
clan e il compilatore ogg-c con
Xcode da allora
Xcode cinque o sei quindi è stato in giro
per un tempo piuttosto lungo, ma la Ir tende
avere un po ‘
dipendenze specifiche della piattaforma in là
come quello che sembra essere la dimensione della parola
per esempio e poi puoi stamparlo
al codice di bit di assemblaggio o come il
uscita il codice bit qui è quello che
Apple sta incoraggiando le persone a usare
perché se si carica il codice punta nel
Apple Store quindi Apple possiamo collegare il
intera applicazione e forse eseguire
ottimizzazioni aggiuntive che non hai fatto
sapere quando hai costruito il tuo codice così
come funziona bene nella pratica
tutti sanno come facciamo ciao mondo
esempio quindi questo è il nostro mondo ciao
esempio in swift print ciao mondo che
passa attraverso un genex di parse tree ad an
l’ albero sintattico astratto passa a un semantico
analisi basata per assicurarsi tutto
funziona e si collega da una digitazione
prospettiva viene generato nel SIL
linea di punti per generare Swift
linguaggio intermedio che poi va
attraverso un ulteriore insieme di ottimizzazioni
prima che sia tradotto in LLVM ir e
poi una volta che arriva a Los Angeles attraverso la mia arte è
appena consegnato alle estremità posteriori del
Catena degli strumenti LLVM che può quindi sputare
o file oggetto o libreria dinamica
file solo eseguibili nativi e questo è
una sorta di pipeline ora uno dei
cose interessanti su Swift e
infatti LLVM è che ci sono argomenti
che puoi usare per vedere effettivamente il
tappe intermedie quindi ognuna di queste
le cose penso che i ragazzi del LLVM li abbiano lasciati
in là inizialmente per il debug
fini, ma è abbastanza interessante
vedere cosa succede e se si voleva
potresti scrivere la tua lingua che
mirato si o forse vorresti andare
dalla traduzione del rubino in si L o Java
in si tutti quei tipi di cose sono
possibile se volessi essere in grado di
generare quelle cose quindi lavoriamo
indietro e vedere come tutto sembra
questo è l’ esempio in C che ha ottenuto un
metodo principale e mette un mondo Ciao
se corriamo clang con l’ emettere LLVM
argomento quindi torniamo al codice LLVM
e quindi questo è il codice LLVM per il c
linguaggio basato sembra simile
puoi vedere dove alcune di queste cose
provengono da una prospettiva di sintassi
ci sono alcune cose da fare con globale
variabili quindi questa STR dell’app in alto è
chiamato un valore globale o etichetta globale
e poi una volta con% o essenzialmente
Locale
una funzione particolare quelli sono i
registri infiniti di cui stavo parlando
intorno e poi la funzione di chiamata lì
finisce solo invocando la put slop
simbolo che viene quindi risolto dal
linker quando entra e puoi farlo
rintracciarlo nell’assemblea, se tu
vuoi usando l’ assembly emit sul
compilatore di tempo e puoi vedere su
Stecca da biliardo mette la linea nel mezzo del
assemblaggio in alto che sembra come se
è noto chiamare la funzione
direttamente questa è una cosa carina che il
il compilatore può ottimizzare per te e
c’è un sacco di motivi per cui ir
è buono , ti permette di capire
cosa succede al programma dal
livello di compilazione che consente di precisione
trasformazioni che puoi avere nell’apprendimento
attraverso chiamate di funzione perché sa
stanno chiamando la sintassi e tu puoi
eliminare i percorsi di codice ma ha un
un mucchio di fasi in là che sono
linguaggio agnostico c’è molto di più
cose che puoi sbloccare se lo sai
cose sulla particolare applicazione
se lo sai, ad esempio, lo sei
chiamare una funzione e puoi provare
questo a causa degli argomenti che usi
non vedrai mai un’eccezione
ribollendo quindi puoi in realtà solo
omettere l’intero codice di eccezione che cattura
che tu andresti d’accordo , quindi facciamolo
dare un’occhiata e vedere come funziona
con Swift con IR possiamo usare Swift
compilatore questa volta con un emit IR
argomento piuttosto che emettere LLVM a
standardizzazione e poi si finisce
qualcosa che sembra un po ‘come
anche in questo caso abbiamo la parte principale dell’app
c’è qual è il globale che abbiamo
a zero costante che è il ciao
stringa del mondo e ne abbiamo un sacco
incomprensibile completo sul metodo che
stiamo andando a chiamare lì, quindi cosa fa
questo vuol dire perché siamo diventati senza senso
ci entrambi qualcosa di bello come
basta stampare bene il motivo per cui
esiste perché qualcosa chiamato nome
mangling è un modo per mangling
si traducono le funzioni di base del codice sorgente
nei nomi effettivi dei simboli
che viene messo nel file assembly C
ha una convenzione di codifica davvero complessa
per questo attacca un trattino basso sul
Davanti così sono i programmi basati su C
relativamente facile il debug del nome di utilizzo C ++
manomissione perché potresti avere un metodo
ignorare in modo da poter avere diversi
metodi con diversi tipi di ritorno o
diversi tipi di argomenti e al fine di
distinguere dal naso e in effetti il
principale in una classe contro la principale in
un’altra classe c’era una codifica che
è stato usato così tutto ciò che inizia con
sottolineatura sottolineatura Zed
sta per avere un nome in C ++ quindi lì
è una codifica basata sulla lunghezza, quindi per
immediatamente dopo lo Zed significa questo
ci sono quattro personaggi di nome
viene dopo e poi vari
diversi simboli hanno particolari
significati come AI che significa int e PPC
significa un puntatore a un puntatore a una macchina
beh quella è la stella della macchina e del char
che hai nella parte superiore del principale
il metodo swifty è praticamente lo stesso eccetto
è molto più complicato
quindi tutto inizia con il carattere di sottolineatura t
è un simbolo basato rapidamente così in questo
abbiamo un sacco di cose che sono
non leggerò la maggior parte di questo è
probabilmente sarà poco interessante
perché non è mai probabile che tu guardi
queste cose direttamente ma F significa che è a
funzione tipo qualsiasi cosa con una S maiuscola
significa che ha a che fare con un modulo rapido e
s S maiuscola con il piccolo s significa il
modulo rapido che ottieni con l’ importazione
Swift v print significa che ne abbiamo cinque
nome metodo carattere un nome funzione
chiamato print l’ap di TGS è in realtà a
concatenazione di queste cose ma mazzo
un mucchio insieme
è una tupla di un generico array si
via e poi P underscore underscore is
un protocollo che essenzialmente quella linea
consiste in un modo di protocolli vuoti o
in un modo di tutti gli oggetti e poi abbiamo
ho un paio di altri argomenti che abbiamo
ho un separatore e abbiamo Terminator
così ora in Swift 2.1 la stampa
la dichiarazione in realtà ha un paio di
argomenti al suo interno che ti permettono di
avere separatori e una bugia da mettere
nuove linee aggiuntive su qualcosa che
è stato cambiato dal rapido un giorno ma
essenzialmente se si stampa 1 virgola 2
comma 3 che viene tradotto in un
matrice di valori e quindi per ognuno
che viene stampato stampa a
separatore quindi se si voleva avere un
punto e virgola organizzato elenco di elementi voi
potrebbe dire che 1 separatore di virgola 2 è il 3 ° comma
punto e virgola e poi il Princeton lo farebbe
darei un cappello per te è per questo che
la dichiarazione di stampa sembra un po ‘strana
quando va avanti ora per fortuna tu
non c’è bisogno di capire nessuno di questi
cose perché c’era uno strumento chiamato
Swift d mangle non puoi correre velocemente
mangle perché non è sul percorso
direttamente ma se usi xc1 e entrambi
passare il valore come argomento o
semplicemente convogliare il flusso attraverso il possibile
quindi usalo per capire cosa significa
quindi in questo caso il simbolo che ho
tirato qui quando abbiamo un profondo mangal
in pratica dice che c’è una funzione
chiamato
– stampa punto che richiede via o protocollo
angolo e parentesi chiuse
questo è l’in qualsiasi momento in Swift e ha
altri due argomenti un separatore e
determinato er e restituisce un nulla
Quindi possiamo usare questo per vedere cosa
la lingua intermedia avviene in questo
la spaccatura va bene così se compiliamo Swift C
il file Swift e quindi utilizzare iMix si L
allora otteniamo qualcosa che sembra a
un po ‘più comprensibile di nuovo
questo ha ancora i riferimenti all’interno
quello per quelle funzioni particolari ma
una delle maggior parte delle cose che fa è che
sputa nei commenti quale sia la funzione
tipi e riferimenti di funzione in realtà
significa e puoi anche canalizzare il tutto
cosa attraverso lo Swift d mangle e qualsiasi altro
tempo vede cose che iniziano con un
sottolineatura t proverà automaticamente
e traducilo in un appropriato
tempo quindi in questo caso particolare il nostro
ciao mondo ha una parte implicita
funzione che è ancora al centro verso il basso
in fondo dice che stiamo usando la C
convenzione basata per chiamare la funzione
chiama e gli argomenti che otteniamo sono a
32 bit int un puntatore mutabile pericoloso a
un punto di assunzione mutabile insicuro così
questa è la nostra stella stella di classe e questo
restituisce un valore int 32 il motivo per cui
la cella è interessante perché consente
per introspezione delle tabelle di ricerca
funziona così se abbiamo un mondo di classe
e quel mondo di classe ha una funzione
ciao dentro e ci compiliamo e
dai un’occhiata al SI l I then down at
in fondo otteniamo qualcosa chiamato a
La tabella V di Silvie è una funzione virtuale
chiamato ricerca e in sostanza dice che se
hai un oggetto del mondo e vuoi
per invocare la funzione ciao allora tu
può fare mondi o ciao e quello
corrisponde al TFC per i cinque principali
ciao ma quando cinque cinque mondo ciao
funzione ora la cosa bella di questo
è in realtà possibile fare ricerche
delle funzioni che stai chiamando
classi e automaticamente ora a compilare
tempo quale funzione sarà
chiamato e così tutti quelli che Swift ha
la capacità di fare ricerche dinamiche e a
runtime vai alla tabella V e poi da
la tabella V chiamata il particolare
funzione ha anche la capacità di
in linea questo in fase di compilazione in modo che esso
in realtà finisce semplicemente chiamando il
funzione direttamente c’è anche di solito
quattro classi alcuni altri tipi pure
se non lo specifichi, ottieni un
inizializzatore gratis e c’è anche a
deallocare il DNA che è solo un D allocatore
che poi ripulisce l’oggetto
in seguito ora per mostrare come alcuni di questo
lavori che ho messo insieme qualcosa chiamato
invia ispettore c’è un progetto github
esiste che puoi scaricarlo e
compilarlo da Non l’ho rilasciato come
un binario perché è in realtà qualcosa
che è facile da compilare, se lo hai
Xcode e giocarci , ma lasciami fare
solo portare l’ argomento qui così
l’idea di questo era solo per permettermi di farlo
mostra cosa succede quando usi Swift e
alcune ottimizzazioni che abbiamo qui
stampa Ciao mondo e se lo canalizziamo
attraverso l’albero sintattico astratto otteniamo
indietro un tipo di rappresentazione lisp per
come appare il file sorgente
quindi in questo caso ha cose del genere
c’è un file sorgente di primo livello che c’è
dichiarazione di cono di primo livello che stiamo chiamando a
funzione particolare al suo interno ora
c’è in realtà un sacco di cose lì dentro
che probabilmente non è necessario e
una volta che fai molto l’analisi semantica
di queste cose collassano così
iniziale è solo qualcosa
succede molto velocemente e sputa
le cose dicono che sai che c’è un
punto e virgola qui ma una volta che fai il
analisi semantica su di esso lo sai
abbiamo una stringa piccola che è
una stringa di codifiche UTF che è ciao
mondo se ne avessimo altri diversi
encodings dentro là utf-16 per
esempio, potrebbero essere scritti
nello stesso tipo di stile puoi anche
dare un’occhiata a ciò che questi SIL sono come
cellula è la Swift intermedio
rappresentazione linguistica e al top
puoi vedere forse c’è un po ‘di più
sottigliezza in Swift in corso
quindi tutti i file che scrivi in Swift
importa automaticamente il modulo Swift
questo porta cose come la matrice
nel dizionario e così via e abbiamo
ha ottenuto questa cosa chiamata integrata e costruita
in è il modo in cui ti esponi
tipi di dati sulla piattaforma sottostante così
quello che in poche parole è in 30 per davvero
significa che cosa è un oggetto nativo di quel tipo
di cose vengono installate importate e costruite
in ora eri abituato a versioni precedenti di
Xcode è in grado di eseguire il collegamento ipertestuale in integrato
e vedere che cosa stava succedendo è
ma loro lo stanno prendendo da xo7
uno ma se vuoi anche andare nel
libreria di base rapida e quindi essere in grado di
scaricare le funzioni fuori là così
abbiamo il nostro punto di ingresso principale all’interno
qui questo davanzale principale con la chiamata
la convenzione è il punto di ingresso proprio come
in qualsiasi altro programma compilato che vorresti
abbiamo e abbiamo quindi il codice ora molto
di questo sembra che sia completo
senza senso cosa succede e la ragione
perché l’ esempio di stampa è così complicato
è perché la stampa è una funzione che
prende una serie di valori e ha anche
anche altri due separatori, per prima cosa
quando chiami stampa deve chiamare e
scopri a cosa serve l’argomento predefinito
il parametro due è per il separatore
e quindi il valore predefinito per il nuovo
linea e quindi utilizzare quelli per essere in grado di
chiama le funzioni e deve anche
prendi i tuoi valori in cui sei passato
costruirlo in una serie di protocolli e
poi chiama anche questo e abbiamo giù
in fondo questo tipo di funzioni come
è entrato nel principale puntatore mutabile non sicuro
che in genere sono completamente incomprensibili
non puoi vederlo nella diapositiva e nel
presentazione perché è un po ‘
troppo piccolo carattere, ma giù in fondo
lasciato c’è un comando che puoi eseguire
essere in grado di farlo nel comando
linea così se apro questo e lo faccio a
un po ‘più grande se facciamo lo stesso
cosa con l’esempio di stampa e poi
lo conduci attraverso il comando Swift
poi vedrete la stessa cosa che
esce da lì e anche quello è un
un po ‘troppo piccolo , quindi comunque
lo vedrai dalle diapositive che se
scarichi l’app con cui puoi giocare
così pure così che tutte queste cose
significa qui dentro bene se volessimo
scoprire cosa significa che possiamo convogliare il
intero file attraverso il mangal profondo di Swift
e il 50 mangle ne cercherà
contabilità facilità di sottolineatura T e poi
convertirli quindi ho un’opzione in
qui solo per maneggiare questo e se io
accendilo e vedi che iniziamo
ottenere tipi sensibili qui come il
inizializzatore del tipo basato su Swift e
la vera implementazione della funzione
comunque arriva in fondo a questo
blocco funzione quindi all’interno della base principale
funzione che abbiamo
che inizia qui , in realtà c’è un
molte cose che stanno accadendo più di
loro hanno a che fare con il codice di installazione , quindi la maggior parte
di loro hanno a che fare con il modo in cui superiamo il
gli argomenti che vengono passati in là sono a
funziona qui dentro che significa molto
piccolo che non credo
tradotto che è sì quello Swift
scuola e vedrai un riferimento a ma
quando fai ricerche su Google ma
essenzialmente gli argomenti che ottengono
ha chiamato sta guardando cose come il
riferimento alla funzione in modo che la percentuale 21 sia a
riferimento alla funzione basata sul nostro risparmio
funzione di stampa che richiede una serie di
gente qualsiasi oggetto il separatore e il
Terminator e poi lo sta usando
questa chiamata si applica così a quelli di voi che vengono
da un background funzionale che puoi
ho visto applicare prima, ma questo è
davvero solo un modo per dire dato questo
funzione e questo insieme di argomenti quindi
rendere la chiamata la cosa bella di questo
e quindi non abbiamo parlato di niente
l’ architettura sottostante che siamo
in esecuzione o il modo in cui questi sono
sarà tradotto in byte code
c’è un canonico canonico
rappresentazione di questo pure quale
fa alcune altre ottimizzazioni in questo modo
caso abbiamo built-in che sono quello
può essere usato per aggiungere anche l’ annuncio S
con overflow in 64 è in realtà a
riferimento di funzione incorporato che è
effettivamente usato per essere in grado di aggiungere valori
insieme e tu puoi quindi vedere cosa
generato IR per quello sembra così
IR in realtà sembra abbastanza simile al
le funzioni basate su Swift funzionano ma
è un livello in basso e con un livello
di elementi rimossi e se vuoi te
può dare un’occhiata all’assemblea che
continua ma l’esempio principale è la stampa
ciao esempio mondo non è particolarmente
eccitante per la quantità di cose
quello si aggiunge qui dentro se dovessimo
crea una funzione invece dove siamo
aggiungendo un paio di interi insieme per
esempio e stiamo restituendo un int
valore
e puoi scrivere e parlare allo stesso modo
tempo quindi puoi davvero vedere cosa
si traduce in sì amore questi
parametri senza nome e quindi puoi vedere
ciò che viene tradotto così dentro
qui abbiamo una funzione chiamata add
che viene definito così questo è il nostro
funzione nel modulo principale che richiede
due parametri dentro c’è un paio
dei valori di debug quelli che usano per quando
stai usando qualcosa come Xcode
campi da gioco in cui sta spuntando i valori
generalmente saranno ottimizzati per
codice reale qui dentro e poi ce l’abbiamo
una funzione di riferimento al più rapido
funziona così Swift plus è perfettamente
nome valido per una funzione per essere tale
viene estratto con i tipi int
associato ad esso e poi raffreddarsi a
il fondo per darci un numero di risultato
cinque e poi cinque viene restituito al
chiamare la funzione e poi se guardiamo
dove lo chiamiamo nel nostro principale
metodo qui stiamo quindi chiamando il
funzione con i due argomenti da ottenere
il valore dentro di te può quindi avere un
guardare e vedere quello che sembra sia
nell’IR generato o nell’assemblaggio
la cosa bella riguarda il montaggio di te
può effettivamente vedere dove si trova
fatto così all’interno dell’assemblea qui abbiamo
abbiamo la nostra funzione di piscina abbiamo dollaro
uno che è il primo parametro che
è il valore esadecimale di uno che è il nostro
primo parametro che stava chiamando e
allora abbiamo un altro valore all’interno del
secondo problema numero due che va
nel valore e quindi stiamo chiamando
principale da aggiungere con quei due valori carini
la cosa è che la funzione del tasto di chiamata è
qualcosa che può essere staticamente
ottimizzato dal compilatore e in effetti noi
attivare l’ ottimizzazione, quindi è possibile
guarda cosa succede è che lo capisce
queste due cose sono le stesse e se io
trovare dove sono dove si trova la funzione
andando avanti qui l’ho perso adesso
in realtà è solo tradotto in questo
l’ aggiunta di istruzioni Q qui, quindi la nostra
funzione di aggiunta del bot principale è questi tre o
quattro linee in cui è tutto allineato
le chiamate indirette al tipo di funzione
ed è solo usando una chiave aggiuntiva che è
sul modo più veloce che puoi aggiungere
funziona al suo interno c’è un salto
a un trabocco quindi se il
e con la meta cooperazione trabocca allora
vieni avvisato anche per questo ma il
la cosa veramente bella è che se accendi
un intero modulo di ottimizzazione e segniamo
questa cosa è privata nel nostro codice e
quindi dai un’occhiata all’output generato
allora quello che succede è il compilatore
rendersi conto che in realtà non ce n’è bisogno
avere una funzione di aggiunta all’interno
qui così scompare da questa lista e
perché non stiamo facendo nulla con
la funzione sta andando via
in modo da catturare effettivamente il risultato di ritorno
quindi non è ottimizzato come me
importa Darwin che è il sottostante
iOS se fai base allora ottieni
Darwin in modo predefinito ma poi possiamo usare
esci come nostra funzione dentro e se noi
attiva l’ottimizzazione del modulo e segna il
funziona come privato e sto solo andando
per cambiare questi due in 32 perché
questo è ciò che la funzione X ha bisogno e
è più facile farlo dopo
correttamente quindi quello che vedrai dentro
ecco che in realtà è il compilatore
appena ottimizzato lo ha realizzato direttamente
uno più due è tre sostituito la tassa
con la chiamata dentro e poi
uscite del modo in cui la cosa fondamentale è
che Swift porta tutti questi esempi
insieme e sblocca il potere di
ottimizzazione attraverso l’illuminazione e
puoi fare cose come dentro la fonte
puoi dire se sono meno di zero allora
possiamo stampare qualcosa di negativo per
esempio e senza ottimizzazione su if
guardiamo l’ output generato all’interno
qui ne avremo un sacco
stampare le dichiarazioni in cui vengono inserite
la stampa la stampa è lì dentro
perché dinamicamente un tempo potrebbe
essere chiamato ma se contrassegniamo il campo come
privato e abbiamo attivato l’ottimizzazione
quindi in realtà possiamo ottimizzare la stampa
dichiarazioni completamente perché
semplicemente non gioca alcuna parte sa che
uno è più grande di zero, lo sa
due è più grande di zero e così dentro
la nostra funzione si riferisce all’interno di noi
non avere riferimenti alla stampa
funziona a tutti, quindi Swift è tutto
le ottimizzazioni quanto lontano può essere in linea
cose fino a che punto può ottimizzare il codice
che non ha bisogno di preoccuparsi e
poi
può tradurlo in essenzialmente meno
istruzioni gestite dalla CPU e
meno memoria colpisce da una performance
prospettiva quindi se vuoi scaricare
che è su Github la nostra città blu
ispettore metterò un tweet
dopodiché puoi prenderlo come
bene se vuoi ma il punto chiave
su Swift è che è davvero un
compatibilità con obiettivo-c è a
modo di passare dal vecchio modo al
nuovo modo e così per esempio se si crea
un oggetto rapido quindi ha un ISO
puntatore quindi ha passato un oggetto rapido in
una funzione obiettivo-c quindi l’ obiettivo C
può ancora chiamare funzioni e usare il
metodi dinamici per cercare le cose
una volta quella porzione se segni il tuo
oggetto come Objective C il compilatore lo farà
devono mettere quelle funzioni dentro il
codice non ha modo di sapere se
o non lo chiami perché è così
dinamico o no, quindi puoi usare l’obiettivo
C se hai bisogno di usare l’obiettivo C
agganciando con cose come quadri
e kit di interfaccia utente o wkk o qualcosa di watchkit
essere in grado di utilizzare una delle classi in
lì ma in futuro ci aspettiamo di vedere
da cui prenderà il cambio Swift
Obiettivo C, quindi dove Swift sta andando sì
speriamo che l’ open source guardi questo spazio
abbiamo ancora quattro settimane da oggi
Devo scoprire se sarà davvero così
capita ma è veloce come C non è veloce
in realtà la domanda giusta domanda
dovrebbe essere Swift veloce o più veloce di
Obiettivo-c
e penso che sia possibile per i nativi
Applicazioni veloci per essere più veloci di
obiettivo-c semplicemente a causa del
ottimizzazioni per essere sbloccato quando si
passare attraverso queste cose che posso certamente
essere più veloce se hai molti dati
elaborare lì dentro se sei giusto
usando Swift per scrivere classi Objective C
senza la sintassi della parentesi angolare allora
sarà la stessa velocità di
L’obiettivo C non è certamente vero
più lento di così, ma come vediamo Apple
passare a più di un ABI stabile per
la lingua Swift vedrà di più
ottimizzazioni in arrivo e in definitiva
più utilizzo di Swift stesso è Swift
è ancora in fase di sviluppo attivo
essendo molto sviluppati ne abbiamo visti tre
uscite o così nell’ultimo anno e it
fornisce un meccanismo di traduzione da
Obiettivo C non stiamo realmente vedendo
la morte di un Rejecter C ancora perché
tutte le funzioni di Apple continuano a essere utilizzate
Obiettivo C per fare
gli oggetti e le loro strutture in iOS
codice e vedremo che succederà per
a volte vieni ma prevedo non appena
Le fonti aperte Apple inizieranno a Swift
vedremo i quadri in fase di creazione che inizieremo
per vedere un ecosistema crescere di puro Swift
codice senza il bagaglio oggettivo-c e
allora troveremo qualcosa che ci permette
per avere applicazioni native Swift I
direi che la sicurezza è il futuro di iOS
lo sviluppo potenzialmente anche il futuro
dello sviluppo lato server a seconda di
come e quando accade l’open source
in sintesi, Swift ha una lunga storia
proveniente da radici llvm preferisce statico
spedizione ma supporta anche
Objective-C per essere in grado di parlare
codice e applicazioni esistenti
i valori possono essere disposti in memoria molto
efficiente che consente di essere efficiente
accesso alla memoria oltre che efficiente
consente l’elaborazione del dispatch statico
per l’inlining che poi a sua volta porta a
ulteriori ottimizzazioni riducendo il
la quantità di codice deve essere in grado di essere eseguita
e cose come l’intero modulo
ottimizzazione della possibilità di caricare il tuo
applicazioni come codice bit per l’app iOS
Il negozio andrà solo meglio
tempo e la pipeline modulare che abbiamo
visto consente di essere ottimizzato
inserito in diverse fasi e così tu
può aspettarsi che quelli miglioreranno nel tempo
e quindi grazie mille per favore
quando ho intenzione di valutare la sessione e
se hai qualche domanda sarò felice
per prenderli ora, quindi ce n’era uno
domanda c’era una domanda al
app che chiede qual è la differenza
tra virtuale quindi la domanda era
qual è la differenza tra statico
metodi in C ++ e metodi dinamici in
Swift well Swift ha l’abilità
essenzialmente per chiamare gli occhi con loro così se
hai una classe Swift nativa allora
usa il tipo simile di spedizione statica
sale come C ++
se si aggancia Swift ad un oggetto NS
con i protocolli di messaggi dinamici, quindi è
utilizzando il messaggio dinamico, quindi se possibile
effettivamente usano entrambi, ma dal
livello di origine hanno esattamente lo stesso aspetto
e penso che sarà fantastico
modo di allenamento iOS e obiettivo-c
sviluppatori di essere in grado di muoversi verso un
Un modello simile al C ++ forse C ++ lo ha ottenuto
giusto tutto il tempo e le altre domande
nel pubblico ora bene in quel caso
grazie mille e buon pranzo

Please follow and like us: