Press "Enter" to skip to content

GOTO 2013 • Using Clang for Fun & Profit: Examples from the Chromium Project • Hans Wennborg


così cromato potresti aver sentito parlare di te
potrebbe usarlo già se lo sei
annoiato o il mio parlare è un browser web
da google è stato rilasciato la prima volta nel
2008 che significa che ora ha cinque anni
non sembra così tanto tempo fa ma cinque
gli anni stanno iniziando a essere una rete matura
browser l’obiettivo di tutto era
per spingere il web in avanti così l’ idea è
che il web significa molto per Google
e pensiamo che sia fantastico e credo che noi
immaginato che potremmo renderlo migliore
fornendo un browser Web veramente buono a
tempo fa JavaScript era lento
per esempio e Google Chrome funziona
JavaScript davvero veloce e in qualche modo vicino
rilasciando questo browser Chrome siamo
spingendo non stiamo solo fornendo un
navigatore davvero bravo ma anche spingendo tutto
gli altri venditori per fornire buoni
browser così cromato oggi ha più di
750 milioni di utenti attivi che è pazzo
la quantità di utenti giusta e quella no
solo non solo, ma tutti gli altri
i browser sono diventati infinitamente migliori
così anche questo è un enorme vantaggio per
la comunità web e per il
mondo in generale se lo farai
su Windows poi copriva l’altro
sistemi operativi desktop mac e linux
e più recentemente è anche disponibile su
mobile così Android e iOS e questo
per lo più open source cercherò di spiegare
come funziona questo è il confuso
parte probabilmente starò mescolando questi due
termini liberamente come dico questo
cromo e questo cromo cosa fanno questi
le cose significano che Chrome è il browser web
così tutti voi sapete e usate e
cromo è il progetto open source che
questo è basato su così è dove il
il codice vive così prendiamo il cromo sul
a sinistra e poi aggiungiamo alcune cose e poi
lo chiamiamo cromato, quindi ovviamente noi
aggiungi il marchio giusto aggiungiamo la fantasia
colora il rosso, il verde e il giallo
che tutti mostrano magnificamente su questo
presentazione grazie al cavo hdmi
e e aggiungiamo il nome giusto che non puoi
hai il tuo google chrome
sfortunatamente facciamo anche dell’altro
cose che ci piacciono, in realtà abbiamo software
processo di ingegneria andando in questo noi
facciamo assicurazione della qualità che raccogliamo crash
segnala se si opta per questo abbiamo questo
intero sistema di rilascio degli aggiornamenti
come puoi iscriverti alla scuderia o
il dibattito o lo sviluppo o anche il canarino
canale se ti senti pericoloso allora
aggiungiamo anche del codice proprietario come
abbiamo PDF e flash e lo impacchettiamo
in un modo sandbox ma non abbiamo il
fonte così non possiamo non è nostra da dare
giusto non è open source e c’è
qualche codice penso e questo è il codice
quindi questo è solo nel cromo
repository e questo è un sacco di codice così
L’ho mostrato a uno dei miei colleghi
e fu sorpreso perché pensava
lui sapeva tutto e poi quando ha visto questo
pensava che probabilmente non lo avrei più fatto
giusto forse era di nuovo in due
mille otto quando è iniziato così cromato
sembra un pezzo piuttosto semplice di
software giusto è solo una finestra con a
pagina web in un quadrato e questo come il
pulsante indietro e la barra degli indirizzi quanto sia difficile
può essere che si scopre molto
lavoro andando in quello e questo è il nostro
codice quindi dovrei anche sottolineare che no
tutto questo viene spedito proprio molto
questo è testare il codice che significa ancora
dobbiamo costruirlo e mantenerlo e
eseguilo e così via potrebbe esserci anche
il codice di terze parti è così
picco nel 2009 c’era qualcuno che aggiungeva
qualcosa di terze parti e ottenerlo
buttato fuori c’è anche un grande picco
2010 era anche una libreria di terze parti
come un milione vale e quello era
rimosso più recentemente ma c’è ancora
un sacco di codice per tenere traccia di e
mantenuto parlare di codice di terze parti
solo per aggiungere alla meraviglia che abbiamo
qualche codice di terze parti e anche noi
sorta di pull-up da diversi
i repository di terze parti di più
quello ovvio è un battito di ciglia che prima era un
freddo WebKit questo è questo è il nostro fork di
WebKit e questo è il quello
motore di rendering che in realtà sa come
questo è quello che effettivamente sa
HTML e CSS interpretano questo e
decide come disegnarlo sullo schermo
è anche v8 che potresti aver sentito
circa perché è stato inventato qui in
Aarhus è il motore JavaScript
questo è quello che sa come
eseguire JavaScript e poi c’è un lungo
elenco di altre cose alcune di queste sono
sviluppato da Google alcuni di questo è
sviluppato da terze parti usiamo tutto
Ho contato cinque milioni di righe quando l’ho fatto
questo due anni fa è probabile che sia così
è cresciuto, dovrei anche dirlo
questo è solo il C C ++ e l’obiettivo-c
codice non abbiamo alcun codice Java come
bene
per la porta Android ma non la costruiamo
con il grado quindi non ho contato
che questo è anche un bel golf
come puoi vedere che il progetto ha
cresciuto questo sta contando il numero di
committer unici al cromo per per
mese dall’inizio e puoi vedere
che all’inizio potevano
probabilmente si adatta in una stanza ma oggi è così
questo enorme come si sviluppa intorno al
persone del globo che si impegnano tutto il giorno
hacking via sorta di operazione che
mi sembra fantastico, è come possiamo
davvero costruisco roba ma è anche molto
spaventoso come possiamo davvero rompere cose
veramente molto veloce così così ancora una volta dice
qualcosa sulla complessità del
progetto e che questo è un buon bisogno
per buoni strumenti software ci sono così
quello era cromo cromo ora al
clang compiler so clang è un nuovo nuovo
compilatore è un c ++ promettente
compilatore fa tutta la famiglia di vedere
lingue effettivamente lo fa C Objective C
obiettivo c plus plus Penso di sì
open CL ci possono essere alcune cose CUDA come
beh e stare lì non sono molti
nuovi compilatori C ++ questo è probabilmente il
il più recente è probabilmente il
solo compilatore C ++ in cui sono nato
questo nuovo millennio quindi è davvero nuovo
e se ti piacciono i compilatori è abbastanza
per farti emozionare fa parte di
qualcosa che si chiama il progetto llvm
che è questo progetto open source per
compilare roba da compilatore che può fare
tutto dalla comprensione del C ++ a
generando quelli e zeri sul tuo hard
guidare e ottimizzandoli e analizzandoli
e così su llvm era un tempo
abbreviazione di qualcosa ma oggi è
davvero solo per lettere casuali che è
la spiegazione ufficiale era così clang
annunciato nel 2007 da Apple e da allora
è stato lavorato abbastanza intensamente
dal 2010 o rotonda 2010 lo chiamiamo
il compilatore di qualità di produzione è
open source è il suo stile da bestia
licenza ed è progettato per essere GCC
compatibile che significa che è sorta di
capisce la stessa riga di comando
le opzioni che fa TCC e il suo supporto
alcune delle stesse estensioni della lingua di
bene il che significa che se hai un grande
progetto software con cui è stato costruito
GCC come cromo quindi l’ idea è
che dovrebbe essere semplice da inserire
volare come ricambio e dovresti
semplicemente lavoro quasi così abbiamo usato
clang in cromo un po ‘o cercando
dal 2010 che è intorno a quello è il
il tempo in cui mi sono iscritto è stato chiesto da due
ragazzi in California se volessi aiutare
li fuori cercando di compilare un cromo
con questo nuovo compilatore chiamato clang e
Sembrava divertente, così abbiamo fatto questo per
circa un anno nel nostro tempo del venti per cento
e cosa significa questo in realtà
dovrebbe funzionare tutto bene?
non ha funzionato tutto fuori dalla scatola, quindi?
abbiamo fatto è fondamentalmente un enorme
operazione di pulizia giusta vogliamo il cromo
per esempio per compilare avvisi gratuiti
il che significa che dobbiamo sistemare tutto
vuole o disattiva gli avvisi e
non volevamo disattivare veramente
buoni avvertimenti lo faccio anche per il deposito
alcuni bug su clang e così via e oggi
in realtà lo usiamo per un sacco di
cose diverse , soprattutto
forse è che lo usiamo veramente
costruisci i nostri binari per Mac proprio così, se tu
utilizzare Chrome sul vostro Mac allora lo costruiamo
con clang che significa che deve funzionare e
facciamo anche altre cose e così
perché siamo stati entusiasti di provarci
il primo posto abbiamo già avuto un buon risultato
compilatore giusto così uno la prima cosa
provare è abbastanza veloce
potrebbe non sembrare un grosso problema, ma se
stai costruendo tutto questo codice che io
ti ho parlato prima di allora
una differenza anche se è del dieci percento
più veloce o venti per cento più veloce
che è molto bello avere come a
sviluppatore fornisce anche un buon risultato
non sto dicendo che è provvisto
fantastico risultato fantastico ma è buono
ed è abbastanza buono che possiamo
spedisce effettivamente questi binari a un utente
che è come probabilmente è un
requisito di usarlo sul serio allora
ha chiari messaggi di errore a un compilatore
scrittore che potrebbe non sembrare un
cosa importante come uno scrittore di compilatori
potrebbe pensare che tutti abbiano letto tutto
questi libri sulla compilazione del codice giusto
scrivono un compilatore è il programmatore
suppongo di importare c ++ e il compilatore
supposto per l’output di file oggetto se il
programmatore immette qualcos’altro
C ++ allora conosci l’uscita uno o qualsiasi altra cosa
non è un mio problema ma in realtà è davvero
bene se il compilatore può essere un po ‘
utile che è in realtà una grande area di
la tecnologia del compilatore quindi sta prendendo degli errori
al livello successivo che fornisce
avvertimenti di alta qualità che è ancora di più
fantastico che l’ eris penso e il
la parte migliore è l’ultima parte che fa rumore
è effettivamente hackerabile ed estensibile e
mostrerò alcuni esempi di questo
questo è il mio primo esempio si puoi
quasi leggere l’intero titolo così questo è
il punto e virgola mancante GCC 4.6 stile così
non è l’ultimo GCC giusto ma è così
probabilmente quello che usa il nostro Linux
gli sviluppatori avrebbero usato e cosa è
succedendo qui è probabilmente tutto
gridando a te che c’è un
manca il punto e virgola dopo la S
dichiarazione ma non è quello
il compilatore sta dicendo che sta dicendo che lo è
mi aspetto un punto e virgola prima del for
cappio che sia tecnicamente corretta destra
di solito è il miglior tipo di corretto
ma non è il modo più user-friendly
di dirlo forse e poi va
essere stato dichiarato e lo sai
mi aspetto un punto e virgola per prima della destra
amico questo non è non è grandioso
più così sarebbe bello se il
il compilatore potrebbe essere più utile qui e
come usi del Clan, tutti voi sapete quel clangore
cercherò di farlo in modo così clangco credo
posso dire che lo fa proprio qui, giusto
alla fine ci vuole un punto e virgola
della Dichiarazione che esiste
esattamente il problema qui ci sono anche
poche altre cose come sta usando il colore
qual è il benvenuto al 21st
secolo che potrebbe non sembrare un grande
affare in realtà alcuni se il tuo conservatore
potresti non piacerti nemmeno nel tuo interno
il tuo terminale ma se il tuo nascere due
schermate e schermate di messaggi di errore
i colori aiutano a navigare
questo e come aiuterà a raggiungere l’aria
abbastanza rapidamente lo sta usando
cosa verde non so se riesci a vedere
è dove sta cercando di indicare
esattamente dove inserire questo punto e virgola
e sta citando il codice giusto per te
non devi aprire il tuo editor e
effettivamente guardate che cosa era questa linea
è davvero utile e allo stesso modo
che il chrome sta spingendo il web
in avanti provo a spingere i compilatori
avanti questo è GCC da due settimane fa
ora ha i colori che sono disattivati ​​per impostazione predefinita
ma è possibile attivare, se ti piace
loro ed è una sorta di tentativo di essere di più
cercando di essere più user-friendly in questo
come puoi vedere sta facendo lo stesso
cosa che clang fa il suo quotando il
codice e indicando questa cosa verde
destra
sfortunatamente non ottiene il
problema sottostante proprio qui è ancora
lamentarsi del punto e virgola prima del
per loop e poi diventa davvero pessimo
con questa cosa dell’occhio non ero
dichiarato in questo ambito bene puoi vedere
vedere chiaramente che è giusto è giusto
lì a sinistra sto dicendo di morire ma
questo è un progresso, questo è fantastico
e questo lo sta portando ad un intero nuovo
livello questo è qualcosa che la mia parola
processore è stato in grado di fare da me
prima ho capito che questo è un tipo di correzione
così clang ho sbagliato a vedere qui fuori quale
è il nome c ++ per lo standard output
flusso e clanging esatto conosce tutto il
identificatori essendo un compilatore è costituito da
che non esiste una cosa come la fuori
ma conosce tutti gli altri
identifica giusto in modo che vede che ho
uno chiamato vede che è vicino sarebbe
ti piace provarlo e sta puntando
fuori con le cose verdi che sta dicendo
vedi là fuori e se lo passo il giusto
bandiere in cui può effettivamente andare e modificare il mio
file e risolvere questo per me se si sta utilizzando
Xcode come potresti fare se lo sei
facendo lo sviluppo di iphone sono sicuro che tu
puoi semplicemente fare clic con il pulsante destro del mouse e correggerlo
proprio lì e poi così adesso ci muoviamo
su per gli avvertimenti come questo è un
pezzo perfettamente corretto di C ++ o anche c
codice intendo questo conforme al
standard questo è ben formato lì
niente di cui lamentarsi qui il
compilatore sarà felice di compilare
e ottimizza questo per te ma anche
come potrebbe sospettare che ciò non avvenga
fai ciò che hai intenzione di fare
chiunque vede il bug qui sì è
come quella la precedenza del
gli operatori è difficile qui così sembra
come stiamo cercando di prendere sette e poi
a seconda del valore di questo booleano
variabile vogliamo aggiungerla a X o Y
e restituiscilo correttamente il tranq indica
ma non è quello che sei non lo è
cosa sta succedendo faremo il
Inoltre prima ne prenderemo sette
altri due booyah che è perfettamente
legale in C ++ come perché non è 7 più 1
o 0 che è sette o otto a seconda di
che è vero o falso e sette o
otto o entrambi a destra, quindi prendiamo solo
la X e restituirla e il compilatore
lo ottimizzerò per te ma
trang vuole che è fantastico e così
suggerisce che potresti voler mettere
la parentesi si mescola e questo è davvero
buon avvertimento come abbiamo aggiunto questo abbiamo trovato
un sacco di bug in Chrome abbiamo trovato su a
sacco di bug in Google internamente e il
la cosa migliore è che ogni volta non lo era
c’era un bug e questo è importante
proprietà degli avvertimenti che vogliamo
a un tasso di falsi positivi veramente basso
perché se è un avvertimento dove ci sono
nessun bug quindi è solo rumore e lo faremo
spegnilo non è molto utile questo
è un altro esempio più forzato
ma qualcosa che potrebbe benissimo
succede in realtà come probabilmente abbiamo
nel processo di migrazione dell’utente
dati da un sistema all’altro che vogliamo
per vedere siamo riusciti a copiare
la nuova posizione perché se lo avessimo fatto e
non volevamo davvero eliminare il
dati utente quindi abbiamo impostato i valori predefiniti
lì e sono sicuro che vedi il bug
già sì il problema è che non lo siamo
vediamo giocare spiegarlo in realtà
il problema è che non siamo realmente
impostando il valore del puntatore
indicando stiamo solo impostando il punto
alla forza che fa schifo è legale
C ++ per farlo perché la forza è solo 0
e il puntatore può essere 0 è chiamato a
puntatore nullo giusto senza problemi qui ma
il serbatoio sta cercando di essere intelligente e
dicendo sì, questo probabilmente non è quello
vuoi quello che vuoi fare questo è
bel avvertimento trova un sacco di bug I
pensa che GCC lo faccia anche in questi giorni
quindi ho detto che la parte migliore del pianto è
l’abilità hack il resto è solo
roba generale del compilatore giusto il clang
è costruito con l’intenzione di essere
estensibile come la maggior parte degli altri LLVM
il progetto è costruito come un insieme di librerie
il che significa che è possibile incorporare nel proprio
codice e fare cose interessanti con esso e noi
può usarlo per costruire strumenti che sono a
grande cosa come vogliamo davvero
questo per chrome chrome ha un sacco di codice
e una cosa interessante con Chrome è
che è una cosa così piccola
immagine speculare di come appare Google
internamente come se avessimo 12 milioni
linee di C ++ in chrome che potremmo avere
un po ‘di più dentro e vogliamo avere
strumenti anche lì quindi il mio primo esempio
è il correttore di cromo che è a
esempio molto semplice quindi noi in cromo noi
avere questo
cosa chiamata la guida di stile che erano
tutto amore che è un lungo documento
dicendoci dove mettere i ricci
sostiene quanto a lungo una linea dovrebbe essere roba
nella lingua che non dovremmo
usa e e come dovremmo fare le cose e
quindi su questo è in realtà un interessante
leggi se ti piace C ++ puoi google per
la guida di stile di c ++ di Google e ci proviamo
far rispettare questo diritto perché pensiamo che lo sia
importante cerchiamo di far rispettare questo veramente
difficile e come lo faranno i revisori del codice
cercalo e te lo diranno
quando ti sbagli, ma gli umani lo sono
fallibile e perderanno le cose
quindi usiamo anche strumenti come noi utilizziamo Python
per controllare le linee la lunghezza della linea a destra
è facile da fare in Python ma in altri
le cose sono molto più difficili da fare in Python
e quindi abbiamo bisogno di strumenti migliori così per
esempio abbiamo questa regola sul virtuale
e scavalco nell’obiettivo-c, penso vecchio
i metodi sono probabilmente virtuali per impostazione predefinita
quando il C ++ non lo sono in C ++ tu
definisci di dichiarare una funzione membro
virtuale e quindi se hai sottoclassi
di quella classe che hanno lo stesso metodo
allora quelli saranno virtuali oltre che
bene implicitamente ma non ci piace essere
implicito su queste cose così ci piace
il programmatore di sillabare virtuale
lì il problema è come controlliamo
questo con Python proprio così con Python
avremmo dovuto analizzare il file e CEO questo
è una dichiarazione di funzione o appartiene
a questa clausola che deriva da questo
altra classe che ha la stessa funzione
e lì è virtuale questo diventa davvero
non vuoi farlo con il
espressione regolare lasciatemelo dire
ma se avessimo questo il compilatore
lo sa bene se potessimo solo chiedere
il compilatore o una sorta di utilizzare il codice
dal compilatore che conosce C ++ e poi
potremmo semplicemente chiedere è virtuale e
è scritto in quel modo che è
esattamente quello che facciamo così questo è quello che
sembra che questo sia il cromo
lo sviluppatore infrange le regole e lo farebbe
ricevi questo avviso e in effetti chiameremmo
è un errore perché facciamo attenzione
seriamente, quindi quello che facciamo è quello che abbiamo
questa cosa si chiama una spina in clang
il che significa che puoi aggiungere il tuo
azioni da eseguire contemporaneamente a
la compilazione regolare così ci colleghiamo
lì e aggiungere alcuni controlli extra per il
codice ho intenzione di mostrarvi quello che sembra
piace
Cercherò di trovare la cosa
è dove lo facciamo controllare il metodo virtuale
scrivi questa funzione viene chiamata per ciascuno
dichiarazione del metodo nel file
stiamo compilando stiamo controllando prima è
è virtuale se non è così non lo facciamo
cura che non sia un controllo perfetto
per allora controlliamo è virtuale come
scritto come se stessimo solo chiedendo questi clang
le cose vanno bene perché sa che è essere
un compilatore e poi ci colleghiamo
estrai la posizione di origine e tutto il resto
quindi possiamo omettere questo diagnostico come
il metodo richiede virtuale e ci proviamo anche
per essere carino inseriamo questa cosa fix-it
il che significa che il clang può effettivamente andare
e aggiusta il codice sorgente per te se
questo succede così il secondo strumento penso
Ho cinque in totale il secondo strumento è
qualcosa che si chiama formato clang e
potresti indovinare cosa fa già così
Ho detto prima che la formattazione è
importante questo torna di nuovo a
avendo 12 milioni di linee di codice e 600
persone che ci lavorano come noi probabilmente
tutti hanno le nostre preferenze sul bene
il codice dovrebbe essere simile e probabilmente lo siamo
non tutto coerente con noi stessi
quindi abbiamo questa guida di stile e prendiamo
sul serio perché leggibilità del codice
è come la principale proprietà importante ma
è anche davvero noioso proprio questo
non quello che vorremmo spendere il nostro
vive facendo entrambi modificare il codice
manualmente nel nostro editor per farla sapere
la linea si rompe e roba e poi
soprattutto discutendo nel codice
recensioni che è davvero come quella è una
perdita di tempo l’unico problema è quello
la formattazione automatica di C ++ è davvero
difficile come uno sviluppatore Java potrebbe non vedere
il problema qui giusto possono usare il
le clip e Ctrl si spostano lì per qualsiasi cosa
e funziona piuttosto bene ma loro C ++ loro
non ho avuto questo lusso come lì
ci sono molti strumenti che tenta di provare
fai questo giusto per far rientrare il tuo C
roba del codice come quella, ma per C ++ è così
tradizionalmente tradizionale è stato molto difficile
il problema è che è complicato
lingua giusta e devi
capisco una parte della lingua quando tu
formattare il codice in modo tale che il formato classifica noi
potresti indovinare è che sta usando
pezzi di clang per ottenere questo
conoscenza della lingua e usarla per costruire
un formattatore di nuovo ho una demo qui
questo è tutto da cromo questi
le linee sono chiaramente più lunghe di 80
personaggi e potremmo entrare e iniziare
sai andare allo spazio o qualsiasi altra cosa
inserire le interruzioni di linea e cose ma noi
davvero non voglio che potremmo anche usare
formato clang e quindi sembra così
lo fa solo per te e questo tipo di
cambia il modo in cui gli sviluppatori lavorano quando
iniziano a usare ciò che iniziano loro
non spezzare mai le linee
non formattarlo, scrivono solo loro
codice poi poi lo formattano e
questo è fatto ho un secondo
perché questo è stato facile, questo è un
bella linea di C ++ che stiamo usando ora
caratteristiche questa è la parte centrale di
anche il cromo è una macro che è
fantastico sta facendo i modelli che ha
il poco sopra tu sai di macro incollare
qualunque cosa tu chiami la cosa lì e
è è ovvio ciò che questo genere è
giusto solo guardandolo ma ma
formattarlo potrebbe aiutare la leggibilità
lì e non ho intenzione di formattare questo
manualmente perché sarebbe davvero
Davvero noioso, ma questo è quello che sembra
come dopo i clang formati fatto con esso
e gli sviluppatori c ++ di solito lo trovano
incredibile, è macro perché no
altri strumenti guarderanno una macro che sono
solo tu sai potrebbe essere qualunque cosa ma
il formato clang effettivamente gestisce questo e
formatterà magnificamente il nostro codice e il
vero motivo per cui stiamo facendo questo non lo è
solo per comodità o se effettivamente
voglio fare non ho demo per questo
ma con cosa vogliamo davvero fare
il clang è ciò che vogliamo fare su larga scala
stiamo prendendo in considerazione e possiamo fare qualcosa
che questo è di nuovo come un’eclissi che puoi
basta fare clic con il tasto destro su refact right ma poi
c ++ è stato più difficile, tradizionalmente lo siamo
costruzione di strumenti per farlo, ma uno dei
cose noiose è che se si rinomina
qualcosa e diventa leggermente più grande
nome o se si aggiunge un parametro a a
funzione o qualunque sia la formattazione
viene fuori sbagliato e va bene in ordine
se hai 10 file ma se ne hai
10.000 poi diventa noioso e basta
è per questo che vogliamo provare a formattarlo
anche molto facile da usare, così l’ ho avuto
integrato in vim quale è il mio preferito
e abbiamo integrazioni per un sacco di
diversi editor così ora stiamo arrivando a
più il compilatore più hardcore
strumenti il ​​primo è disinfettante di indirizzo
o un figlio che disinfetterà i tuoi indirizzi
questo è sviluppato a Mosca quindi in C e
C ++ e così via facciamo la memoria manuale
gestione non so
obiettivo-c forse puoi farlo
forse forse non devi farlo
fantastico come ci piace farlo per questo
velocità per le prestazioni ma anche mordente
noi nel culo un sacco di tempo perché
i bug di gestione della memoria sono come i migliori
giusto non solo il tuo programma potrebbe essere
andrà in crash forse qualcuno lo hackererà
tu non è la cosa buona da avere
bug di gestione della memoria di memoria nel tuo interno
il tuo software così tradizionalmente sarai
usare vino scadente per questo diritto su Linux
e Mac c’è una soluzione che sarai
usando bene e cosa stiamo andando
fa è che gestisce il tuo programma e come
funziona è una specie di jit che lo compila
giusto ma non è bytecode è reale
allenatore quindi sta guardando il tuo codice e
è in esecuzione è come aggiungere
qualche altra istruzione in più che sta aggiungendo
qualche altra istruzione intorno ai tuoi carichi
e negozi per verificare che lo siano
corretto e che rallenta la corsa
del tuo programma a volte non è troppo
molto ma a volte sta rallentando le cose
giù molto quindi abbiamo avuto questo problema
eseguendo tutti i nostri test con valgrind
prende per sempre e gestendo il pro il
il browser con lo sfondo non è stato divertente
sperimentare così quale indirizzo disinfettante
fa è che sta inserendo il
strumentazione attorno ai carichi e
memorizza invece al momento della compilazione e questo
non è una nuova idea come abbiamo fatto
questo prima, ma farlo con langan
llvm si è rivelato molto più facile che
significa che ho disegnato sanitizer come
di solito è uno strumento di successo
circa due volte più lento di eseguire il
programma senza la strumentazione
che è ancora lento, non lo sei
benchmark vincente sui test ma è così
ancora abbastanza veloce che è possibile eseguire il
browser per esempio e tutti i test
e prende alcuni tipi di errori alcuni
che Valgard non rileverà quindi ho I
avere demo
questo è il primo Excel che dovrei mostrare
tu il codice questo è il primo esempio
questo è un classico overflow del buffer di calore
giusto stiamo allocando spazio per
centinaia vogliamo restituire il centesimo
int ma dimentichiamo la nostra razza
o essere indicizzato da zero così noi
in realtà indicizzare un passo troppo lontano in questo modo
è un comportamento indefinito ed è totalmente a
bug e così via vediamo cosa succede
quando lo eseguiamo, nessun problema, ha funzionato
bene non si è schiantato è tornato zero
che è quello che ci aspettavamo ma siamo
facendo notare che c’è un bug o io
dovresti compilare con le informazioni di debug puoi
vedi questo sì, stiamo facendo notare
che c’è un bug, giusto questo è un
invalido avremmo dopo la matrice e
quello è cattivo questo è fantastico valgrind
corregge questo per noi potrebbe essere stato
più lento ma non ha fatto una questione di
questo caso vediamo quale indirizzo
disinfettante fa
usa il colore giusto indica il suo
puntando allo stesso errore, lo siamo
facendo lettura non valida in questa posizione e
è una sorta di sottolineando che è a
il diritto di questo questo buffer che noi
si trovano anche mostrando qualcosa
su come funziona internamente quindi indirizzo
su un disinfettante sta usando questa cosa
chiamato memoria ombra che suona
fantastico è come se avessi il tuo
la tua memoria normale per il tuo programma
allora hai la memoria ombra
da qualche altra parte che è una specie di
una mappatura tra loro e quale indirizzo
disinfettante fa è che tiene traccia in
la memoria delle ombre è una sorta di marcatura
il morso ci piace è questo morso valido per
leggi dalla memoria reale e così via
e questo è quello che mostra qui, così noi
ho provato a leggere qui ed è stato segnato in
rosso sfa che significa che ha lasciato la zona rossa
che suona come qualcosa che dovresti
probabilmente non dovrebbe leggere da destra
se ti piacciono i bug relativi alla memoria, allora tu
amo gli insuccessi della concorrenza e io
supponiamo che vadano per tutte le lingue
non è solo C e C ++ a essere malvagio
la stessa idea è lo strumento disinfettante
usa clanging llvm per inserire il
strumentazione al momento della compilazione che abbiamo
costruito questo strumento con lo sfondo pure
dove fa la cosa in crescita di Val
una specie di aggiunta alla volta ma è
ovviamente molto più veloce per farlo in questo modo
questo ha un overhead grande rispetto a
affrontare disinfettante ma non hanno ancora
il pazzo ci consente ancora di eseguire i nostri test
in un modo relativamente tempestivo e così
indica situazioni pazze quindi la cosa
con bug di concorrenza è quello che hai
loro ma non ci sono mai quando tu
cercali bene loro loro sempre
si verificano sulla macchina dei tuoi clienti e così via
li rende difficili da trovare quindi l’idea con
lo strumento è stabile per indicare il
situazione che è stata sollevata anche se il
sorta di accesso simultaneo al
la variabile non sta realmente accadendo a
quella volta vediamo
questo ha un po ‘più codice è
iniziare a discussioni è molto semplice
abbiamo questa variabile globale
inizierà a zero
perché è un globale che stiamo andando
per avere thread uno incrementarlo e
thread a decrementato si potrebbe eseguire
prima dell’altro a destra ma dovrebbe
finiamo ancora a 0 quindi ci uniamo e poi
restituiamo il valore del bene globale
ha funzionato e restituisce 0 così sembra
lavorare a destra proviamo ancora una
Adesso torna di nuovo 10 sembra
essere un po ‘casuale abbiamo costruito questo casuale
generatore di numeri che è grande se
questo è ciò che volevamo, ma è così
non è così, puoi provare Val
grind non si lamenterà bene
stiamo perdendo due cose ma no no
liberandoli così bene, quindi abbiamo un
correre lì e tradizionalmente saremmo
come aprire il codice e fissare
davvero difficile ma non è un
modo efficiente per farlo è solo se
sai che è giusto
questo è ciò che fa il disinfettante del filo
provando a far notare che c’è
un diritto di thread in questo caso e
c’era un precedente precedente a destra
l’altro thread e non c’era
la sincronizzazione tra questo è un male
situazione per essere e ci sta dando
le solite informazioni su dove si trova il
fili sono stati creati e così via così in
estate c’è una corsa dati su questa linea
13 che è fantastico e funziona
anche se risolviamo il problema, facciamo il
correzione hacky di assicurarsi che non lo fanno
scrivi al globale allo stesso tempo
giusto questo dovrebbe assolutamente risolvere il problema
moto di concorrenza così come puoi vedere il
il problema era che i fili erano
correndo allo stesso tempo e scrivendo a
il globale ma ora ne stiamo facendo uno
loro un po ‘più lenti creando il
il secondo sonno, quindi il primo dovrebbe
arrivare prima e poi il secondo
dopo dovrebbe essere sicuro
ora ha prestazioni inferiori ora
funziona bene vediamo di che thread
disinfettante dice che hai ancora c’è un
gara perché la gara è ancora lì
giusto non stiamo sincronizzando in alcuno
moda affidabile proprio lì potevano
ancora scrivere al globale allo stesso
tempo perché uno dei fili potrebbe
rimanere bloccato per un secondo forse la macchina
è veramente caricato o qualcosa del genere
quindi il punto è che sta rilevando il
gara anche se non sta succedendo e dentro
questo caso può anche indicare che come
se fosse sincronizzato via sonno come
sa di questo trucchetto del sonno e tu
lo so ovviamente può vederlo così
questi strumenti come un vestito e abbigliamento e
e il disinfettante per filettature sono strumenti straordinari
per noi come prima non potremmo
ho avuto un sacco di bug che non sapevamo
prima che arrivasse, arrivò e
non vogliamo questi bug e ancora meglio
quando abbiamo bug sappiamo di come il
programmatore può usare questi strumenti per trovare
loro questo è il terzo, ehi il
Terzo disinfettante che è l’ultimo disinfettabile
questo è il più recente in realtà da vedere
in C ++ hanno questo linguaggio fantastico
funzionalità che è definita indefinita
comportamento i soliti esempi sono la divisione
da 0 puntatore null overflow di array
dereferenze e così via così l’ idea è
aiutare l’implementazione linguistica efficiente
raddrizza il compilatore quando vede intero
divisione vuole solo omettere il
istruzioni divise che non vuole
devo controllare per zero lì così altro
le lingue potrebbero specificare il comportamento
che come la divisione per zero dovrebbe produrre
divisione per eccezione zero o qualcosa
come quello inteso che il compilatore
o deve controllare per zero o ha
fare qualcosa di intelligente come contare sul
hardware può forse il duro lavoro può
aiuto o qualunque cosa per fare questo, ma potrebbe
rivelarsi meno efficiente e C e
C ++ cercano di non scendere a compromessi
efficienza quindi è per questo che la lingua
funziona così significa anche che è così
quello che fa è ok va bene
soddisfare le istruzioni della divisione ed è
andando a fidarti di te non provare a dividere
da zero per zero perché se lo fai allora
ok sei fuori dalla zona sicura del
linguaggio come qualsiasi cosa potrebbe avere
e potrebbe essere la formattazione del tuo
harddrive quindi è anche una fonte di
bug sottili proprio perché definiscono il
il comportamento è indefinito qualsiasi cosa potrebbe
succede così potresti non sapere che lo è
accadendo qualcosa potrebbe anche includere
niente sulla tua macchina e qualcosa
altro su qualcun altro così ora abbiamo
questo strumento che cerca di catturare questo I
avere una demo così dispiaciuta per il vedere qui
quello che fa è una sorta di demo di
l’operatore di turno di sinistra in modo da sapere come
questo funziona prende i bit di un int
in questo caso e li sposta al
left right e tutti i bit che non si adattano
nella parola che stanno andando a cadere
il bordo a sinistra quindi 32 bit in questo
caso e questa cosa lo fa e basta
come una volta due volte tre volte e mostra
fuori dal risultato quindi ci aspettiamo che dovrebbe
iniziare con uno poi verso il quarto e
otto e così via e poi tutta la cagna
dovrebbe cadere e dovremmo finire
con lì penso che non sia quello
cosa sta succedendo non lo so si
può vedere questo, così si scopre che finiamo
con uno qui da dove viene questo
bene questo è come il set di bit alti e
qui dovrebbe cadere dalla scogliera
quindi forse forse il comportamento indefinito di
disinfettante può dirci cosa sta succedendo
Sì, risulta che 32 è troppo grande per a
32-bit int right, quindi C ++ e C lasciano
questo come comportamento indefinito e tu sei
non è permesso di spostare più largo del
larghezza della parola e cosa sta succedendo
dietro la scena è che questo è
emettere l’istruzione sta usando per
lo spostamento a sinistra è SS HL s HL su x86 che
in realtà fa il turno modulare 32 così dentro
questo caso non sta affatto cambiando
questo è ciò che a Intel piace il potere o
un’altra piattaforma potrebbe fare
qualcos’altro ma non è più semplice
problema di processo in modo che questo programma potrebbe essere
avere valori diversi su diversi
macchine e la ragione per cui stiamo facendo voi
essere figlio è così che il compilatore può fare qualcosa
il tipo di exploit il non definito
comportamento che cosa può fare è che può
Supponiamo che non accada giusto perché
se accadesse allora tutto potrebbe
capita perché è indefinito ma il
il compilatore non può essere così aggressivo
perché molti programmi non sono definiti
il comportamento e le persone sono iniziate in un certo senso
contando su di loro per avere prevedibile
risultati come se tu avessi un puntatore nullo
la distinzione che ti aspetti dal prevedibile
crash bene che il compilatore potrebbe voler fare
qualcos’altro lì così abbiamo
disinfettante comportamento non definito a sorta di
estirpare il comportamento indefinito che ho a
secondo ora stiamo entrando in C ++, quindi questo è
un programma semplice è abbastanza stupido
vuole solo restituire un valore davvero grande
quindi afferra un grande valore lo memorizza in a
fluttuare per qualche motivo non so perché
ma puoi farlo e poi ritorna
è un int e puoi convertire e
fluttuare in un int pure, quindi vediamo
cosa fa
beh, non è tornato molto grande
valore quindi qual è il bug qui può chiunque
spot questo vediamo cosa si sta censendo
va bene così quello che sembra stia succedendo è
che in qualche modo finiamo con questo valore
nel galleggiante che è troppo grande per essere
convertito in un int, quindi penso che cosa è
sta succedendo che non sono l’avvocato della lingua
che come la conversione da numero intero a
float è perfettamente definito potresti
perdere una certa precisione anche se così in questo
caso sembra che il numero sta diventando
arrotondato perché dovrebbe finire con a
salva sette qui in realtà questo è il massimo
int valore giusto e quindi stiamo tornando
questo come un int e puoi fluire a
fine conversione ti dà solo come
la parte intera è giusta e basta
definito fino a quando il numero si adatta
la fine e non qui così è
Perchè arriviamo stamattina, ecco cosa
comportamento indefinito cosa fa e cosa
funziona come tutti gli altri disinfettanti che è
inserendo la strumentazione al momento della compilazione
tempo che significa che è una sorta di inserimento
tutti questi costosi controlli che noi non facciamo
voglio in produzione come per la divisione
controllerà per zero e quindi lo sono
per il puntatore nullo che sta per verificare
null e questo ci permette di catturare il
ancora un sacco di bug e speriamo che sia così
ci permetterà di scrivere meglio
ottimizzazione del compilatore volta tutte le
il comportamento indefinito è scomparso, quindi quelli erano
tutte le demo che ho avuto quale era il mio punto così
il clang era sul discorso era
dovrebbe essere di divertimento e profitto
giusto il punto è che la programmazione è
dovrebbe essere divertente, ecco perché lo facciamo
e potremmo anche trarne un profitto
aiuta a pagare per il divertimento ma ci sono
cose in programmazione che lo rendono
più noioso come provare a farlo
capire cosa sta dicendo il compilatore
quando ha trovato un messaggio di errore
bug che il compilatore avrebbe potuto dire
perché perché li ha visti bene
oscillando da noi completi la compilazione
la formattazione del codice è davvero noiosa
trovare bug di memoria è noioso
bug di concorrenza è anche peggio e
comportamento indefinito è molto molto subdolo
e il clan può aiutare con tutto questo così
spero che clang possa aiutarci a divertirci e
profitti, questo è il mio punto di vista, grazie
tanto
o tutti questi disinfettanti funzionavano da comando
linea o è previsto che vengano eseguiti
al momento dello sviluppo o è l’integrazione continua
Immagino o è previsto che Adam scappi
quella volta bene puoi fare entrambi, voglio dire noi
eseguirli in modo obbligatorio durante
integrazione continua è possibile eseguirli
durante lo sviluppo anche se tu
piace ma c’è una bella cosa da fare e
è molto utile farlo come quando tu
hai un bug e sei come cercare
non penso che molti di noi lo gestiscano
impostazione predefinita ma forse dovremmo effettivamente noi
ho anche l’idea di spedirlo
il canarino può canalizzare proprio no
anche a che fare con quel continuo
tempo di integrazione perché è così veloce noi
posso spedire il cromo con questo al canarino
che dovrebbe essere comunque instabile
e quando si blocca possiamo ottenere qualcosa
in su quei rapporti di incidente se si opta
in esso è davvero utile
era anche un secondo qui come un
ragazzo C obiettivo dove posso trovare banchine
per questa roba da collegare piacerebbe fare
anche questa roba quindi non sta molto bene
documentato la roba di plug-in perché
la ragione di ciò è che il
Le persone di Clank non ne sono davvero certe
come vogliono progettarlo è lì
ma non sentono che questo è il
progettare che vogliono, ma possiamo ancora usarlo
quindi una cosa da fare è che puoi guardare
al nostro plugin quindi questo è un link a
il wiki di cromo dove abbiamo sorta di
descrivi il nostro plugin e puoi farlo
guarda il nostro plugin e usalo come un
esempio che non sta davvero guardando
obiettivo-c penso ma poi puoi
sorta di documentazione per le tavole
gli interni sono in realtà piuttosto buoni
l’uso di doxygen e penso che ci siano
alcuni parlano di come guardare l’ AST anche
e quindi puoi usarlo per scrivere
il tuo plugin ci sono in diretta
domande così sono venuto a pensare a un io
non lavorare con questi tipi di
strumenti davvero potenti Sono dinamico
programmatore di lingua sì, io sono un piccolo
parlare e il flusso di lavoro mi piace molto con
lingue dinamiche
effettivamente eseguire l’intera applicazione
specialmente nelle chiacchiere è possibile eseguire il
intera applicazione e fai come
cambiamenti frammentari e basta ripetere quello
pezzo di esso sì e mi sembrava
dal momento che gli strumenti che hai mostrato ho preso solo
effetto al runtime quindi sembra un
runtime vergogna linguaggio protesico per me
quindi la domanda è potreste davvero
usalo per costruire una vita in via di sviluppo
ambiente in un piccolo stile di parlare che
produce codice veloce come questo non lo faccio
sapere se è possibile utilizzare questi strumenti come
dipende da se si desidera eseguire statico
lingue in questo sviluppo
l’ambiente è quello o vuoi farlo
questa analisi per le tue chiacchiere Cody
in questo modo ci sono progetti che provano
interpretare correttamente C e C ++ ed eseguire
questo in un ID e quindi puoi farlo
puoi piacere che tu possa applicare hot patch al tuo codice
giusto puoi correre un po ‘e poi puoi
scrivi di più ed esegui quello e tu
pensando di tornare indietro e cambiare e
roba del genere che è una sorta di non correlato
per i disinfettanti è diverso
progetto chiamato aggrapparsi credo che la C
interprete di lingua che fanno a
Il CERN è piuttosto pazzo ma carino
anche tu sì, così le persone stanno cercando di fare
che con il clang dell’Alabama ne hai?
esperienza usando clang su Windows che è
molto nuovo, quindi dipende da cosa vuoi fare
con tutto bene puoi eseguire il
compilatore su Windows ma potrebbe non esserlo
in grado di produrre finestre funzionanti
programma è difficile quindi la cosa siamo noi
in realtà annunciato poche settimane fa a un
conferenza chiamata andando nativo non lo faccio
avere un link ma c’è una bella chiacchierata
stanno annunciando che stiamo iniziando
guardare a farlo o finestre come
usando clang come compilatore e
integrando con studio visivo che
potrebbe essere davvero bello, quindi ti risponderemo
l’incisivo cattura solo come fuori limite
errori Oh ci prenderemo anche qualcosa
come i cicli di conteggio dei riferimenti in a
puntatore barella che non penso
vuoi dire mettilo a posto che hai fatto trapelare
qualcosa così abbiamo un altro disinfettante
per questo si chiama la perdita di Elsinore
disinfettante e penso che prenderebbe
sì sì il problema è che non lo facciamo
fai tutte le analisi in uno strumento perché
risulta che richiede molta memoria
bene così questo disinfettante Idris aveva solo
rilevamento della memoria jello se gli indirizzi sono
è valido leggere dal controllo delle perdite
un processo diverso e richiede un altro
tipo di memoria ombra e avendo entrambi a
allo stesso tempo è molto costoso quindi
abbiamo un po ‘di confusione ma abbiamo un
molti disinfettanti abbiamo giusto indirizzo
disinfettante che ho dimostrato di avere
disinfettante fuoriuscito che cerca di trovare
perdite poi abbiamo qualcos’altro
penso che sia piuttosto nuovo anche se
potrebbe non essere effettivamente rilasciato o stabile
o qualsiasi altra cosa ora ne abbiamo un’altra
chiamato non ricordo nemmeno di cosa si tratta
ha chiamato sta controllando per un for
letture di memoria non inizializzate che aggiungono il
disinfettante non sarà come se tu lo fossi
all’interno del buffer non lo rileverà
i ricordi dell’inizializzazione che
valgrind noi che è un altro controllo che è
bello avere così abbiamo un separato
disinfettante per quello quindi perché sono questi
scritto come plugin client contro
in realtà cercando di far entrare queste idee
la principale fonte di client immagino di sì
è solo l’ unico plug-in qui era
il plugin per cromo che dovrei avere
ha sottolineato che i disinfettanti fanno parte di
la principale fonte di Clank quindi il modo in cui ho funzionato
ho semplicemente lanciato questa bandiera a clang
giusto e questo è normale clang e il
la bandiera è solo un normale formato di bandiera clang
è uno strumento separato che non è anche un
plug-in è un intero programma separato
questo è il collegamento con la libreria di cleinias
quindi si collegano solo qui che io
ha mostrato era la specie di stile di cromo
correttore di formato che eseguiamo 17 volte alla volta
o come usiamo questa memoria?
uno alla volta o tutto in una volta, no
eseguirli uno alla volta, voglio dire che puoi
provare ma potrebbe richiedere troppa memoria per
gestirli tutti e potrebbe cadere
anche su se stesso non so se questo
lavori
ok grazie molte altre grazie

Please follow and like us: