
[Musica]
Non ho ancora fatto niente ancora io
ottenere un applauso è un ottimo inizio
al giorno
Sì, va bene così c’è questo fantastico
cosa per la sessione come dice Jonathan per favore
tasso alla fine del discorso e sì chiedere
mi chiedo lì e spero
avere circa 10 minuti di enfant per
domande ma sappiamo tutti come va
giusto così sono oggi con cui parlerò
tu su C ++
è la più vecchia lingua nuova che sia
una sorta di ” peggiorativo”
lingue della vecchia scuola , ma mi piacerebbe
tipo di provare e lasciarti con il
impressione che C ++ non è un vecchio divertente
il linguaggio è infatti all’avanguardia
linguaggio fantastico che dovresti essere tutti
utilizzando in modo che usa C ++ prima di tutto
tu molto una persona che usa C ++ chiunque altro
usando C ++ attualmente due tre sì alcuni
Wow, va bene, questo è utile perché
mi dice se dovrei andare o no
più nei dettagli di alcuni dei
bit acquosi di C ++ o se dovrei
concentrati sui bit che sono
interessante per me sulla scelta di C ++ come
una lingua così in risposta a chi usa il C ++
più in generale come il lato dell’industria di
le cose e mi dispiace che la gente stia salutando
io dall’esterno ho usato abbastanza C ++
molto esclusivamente attraverso la mia carriera
e ho trascorso 10 anni nei giochi
industria e nell’industria dei giochi C ++
è una scelta abbastanza buona per scrivere
motori e sistemi 3d tornano all’estremo
molto all’inizio come alla fine degli anni ’90 nella mia
carriera era ancora C piuttosto che C ++
ma il C ++ è diventato praticamente lo standard
dopo quello ovviamente lo scripting all’interno
i giochi sono fatti in altre lingue
a volte inferiore e altri bit e
pezzi ma C ++ è un buon posto per
inizio ho lavorato in finanza e finanza
certamente se stai facendo qualcosa di simile
ha un rendimento elevato o un basso
sapore di latenza ad esso C ++ può essere un buono
scelta non troppo dispositivi integrati di nuovo
C è anche una buona scelta per queste cose
ma il C ++ sta diventando sempre più di a
buona scelta perché ti dà il
flessibilità di un linguaggio di alto livello e
tutto il con
i camion che vengono con quello erano ma
essere ancora in grado di scendere e colpire
registri hardware come potrebbe essere necessario
essere in grado di fare e ho giocato su
telefoni cellulari scrivendo decoder MPEG e
cose del genere e C ++ sono state fantastiche
scelta per quel genere di cose e
parlando come dispositivi hardware MPEG
e nei server se sei tu sai se tu
digita una query web in questo momento è quasi
sicuramente sarà gestito da
qualcosa scritto in C ++ sul back-end
ma ma perché ha fatto a scegliere C ++ così
ovviamente la prima cosa che nasce
in mente per la maggior parte delle persone su C ++ è
che è qualcosa in cui scrivi se tu
voglio un codice ad alte prestazioni e lo farò
non fare scuse questo è un evangelico
parlare di C ++ sono altre lingue
disponibile e, in effetti, lo farò
riferimento a loro ma io non sono un esperto
in altre lingue quindi proverò e
mantieni le mie menzioni di altre lingue
troppo concreto e non emotivo
perché sono sicuro che ci siano persone dentro
questo pubblico che ne sa molto di più
quelle lingue di quante ne ho
ti sorprendo le cose sul C ++ che io
pensa di fare una buona scelta sono questi
i tipi di valore cancellano le vite degli oggetti e
quindi terza prestazione quindi prestazioni
ovviamente è una cosa molto importante per
molte delle applicazioni che ho appena
descritto ma ci sono aspetti del C ++
questo lo rende una scelta davvero buona anche
se non hai bisogno di scrivere super
codice performante Ho intenzione di tornare
a questi in alcune diapositive e spiegare a
un po ‘di più su cosa intendo con a
tipo di valore e quale oggetto chiaro
le vite significano ma ormai qualcuno dentro
questo pubblico forse tutti voi siete
pensando ma non è C ++ così orribile
cosa con più pagine di errore
messaggi e tutti gli arresti anomali e il
perdite di memoria e tutta la sicurezza
difetti e tutta quella roba e, naturalmente
sì
in un certo senso era il vecchio C ++
nuovo C ++ è migliore e, naturalmente, perché
è retrocompatibile è ancora possibile
scrivi C ++ vecchio stile e lasciati
aperto a tutti questi problemi ma vado
spero di spiegarti che tu
non dovrebbe farlo più e quello
c’è una scelta migliore per te, quindi cosa
è cambiato nella lingua
Do solo un tavolino qui e lo do
tu i punti salienti di ogni revisione di
il linguaggio che molti di voi potrebbero non sapere
che C ++ è stato aggiornato in modo corretto
spesso penso che abbiamo iniziato
1998 con come la prima versione reale di
C ++ era uno standard e il
punti salienti di questo sono stati utilizzati perdite di memoria
dopo il free si blocca tutte quelle cose ora
ovviamente quelli non sono veramente
mette in evidenza ma voglio provare a fare un
punto qui e poi nel 2011 un nuovo
lo standard per C ++ è stato rilasciato
una riunione di commissione alla fine degli anni 2000
e per quelli di voi che conoscono
queste cose si chiamava C ++ Oh x4
per sempre perché pensavano che fossero
davvero andando a farlo nel
Anni 2000 ma è un po ‘ finita
corse e alla fine divenne C ++ 11 così
ci si va, ma abbiamo ottenuto tutta una serie di
nuove fantastiche funzionalità è la prima cosa
questa parola chiave auto ora se sei vecchio
come me potresti sapere che l’ auto ha sempre
è stata una parola chiave in C ed è come la
opposto di statico ed è anche il
predefinito in modo che tu non possa mai scrivere int I
come un modo non sei mai un auto int I
punto e virgola fino a quando non definisco una variabile
chiamato I ma questo è ciò che significa il
Auto significa che è la memorizzazione automatica è
significa che è in pila ma nessuno
usato così hanno cooptato il
parola chiave e auto ora significa che indovina il
digitare il compilatore quindi se lo faccio io sono uguali
lo zero virgola tipo gli occhi saranno
diverso deriva essere un numero intero e
se faccio Auto I equivale a false quindi lo farò
sii booleano o se chiamo complicato
funzionerà sarà qualunque cosa
funzione complicata restituisce e questo è
molto utile hai probabilmente se sei
come se fossi abituato a programmare in meno
lingue fortemente tipizzati a cui siete abituati
cose come let o altri modi per
Dì solo che ho bisogno di una variabile chiamata X
ed è questa cosa qui C ++ no
debolmente tipizzato quindi c’è un tipo forte
associato a questo, ma l’auto dice
lo elabori compilatore lo capisci
per me e si libera di tanta
il codice boilerplate che vorresti
altrimenti ho bisogno di alcuni esempi
che fino a venire abbiamo range per
quindi prima di questo se volessi iterare
sopra un contenitore o una sequenza di cose
dovresti contare da zero a
il numero di cose nel contenitore o
dovresti usare questi complicati
tipo iteratore tipo cose dove è
come vettore di int Colin: const
iteratore e questo è già un enorme
quantità da digitare e si inizia al
inizio e continui a scorrere fino a quando
sei arrivato alla fine e questo è solo molto
Scomodo quindi otteniamo la gamma quattro così ora
Posso andare su un contenitore andando per
Auto I: contenitore e mi metterò per
ogni elemento in quel contenitore ottengo a
variabile chiamata I e I non aveva nemmeno
per sapere di che tipo fosse perché
la cosa automatica ha funzionato per questo
anch’io
otteniamo lambda e ora posso definire a
piccola funzione in linea dove ne ho bisogno
e quei lambda possono catturare variabili
da copia o riferimento da lì
che racchiude l’ambito e questo è davvero
cosa potente se stai scrivendo
programmazione di stile funzionale in cui tu
potrebbe avere un algoritmo che dice che ho bisogno
combinare un gruppo di cose insieme
e mi piacerebbe fornire la combinazione
funzione ora in precedenza avresti dovuto
definire da qualche altra parte una funzione che è
il modo di combinare le cose funzione e
dovresti fare riferimento ad esso nel programma
nel punto in cui stavi chiamando
ma ora puoi solo definire
in quel punto la funzione stessa e
ancora più importante è possibile catturare
alcuni come le variabili locali o lo stato
fondamentalmente una chiusura
ci siamo mossi che ho appena messo giù
spostalo e c’è un sacco di
macchinario che è stato aggiunto alla lingua
sostenere l’idea che l’oggetto
le vite possono essere trasferite così oh
attraverso la proprietà dell’oggetto può essere
trasferito in modo da poter definire chiaramente quando
Sto dando un oggetto a qualcun altro
e non ne ho più bisogno e questo è
davvero importante con il prossimo punto
quali sono i puntatori intelligenti che posso scrivere e
se lo standard ora fornisce un insieme di
oggetti modello che assomigliano
puntatori ma sotto il cappuccio loro
gestisci attivamente la cosa che sono
indicando così mentre prima si potrebbe
basta int star I uguale a new int e
quindi ricordati di cancellare I quando tu
finito con esso altro hai a
perdita di memoria posso ora rendere unico
puntatore a I e un puntatore univoco dice I
posseduto in modo univoco la cosa che sono
puntando a e quando il puntatore univoco
cade fuori portata e non può essere
o dal compilatore sarà il suo
il distruttore verrà eseguito e il suo distruttore
pulirà il pezzo di memoria che
sta indicando e quello è estremamente
potente significa che posso efficacemente
fidati del compilatore per generare entrambi i
[Musica]
cosa vorrebbe catturare il puntatore che io
ho creato nel mucchio e anche a
garantire che sarà gettato via
quando ho finito con quello è davvero
davvero potente ma per essere in grado
per usarlo efficacemente ho bisogno di essere
in grado di dire bene ho fatto uno di questi
cose e mi piacerebbe darlo a
qualcun altro ora, ma l’unicità di
puntatore unico dice che non posso avere un
copia di lì non ho il permesso di copiare
queste cose perché sarebbe a
unico o è necessario clonare il
l’oggetto punta a quale sarebbe un
operazione costosa o ci sarebbe
essere due puntatori che indicano lo stesso
oggetto e quindi dovrei ricordare
che solo uno di loro è consentito
distruggere e diventa complicato così la mossa
la semantica mi ha permesso di avvolgere un oggetto
e digli che ti sto dando questo ora
e il mio oggetto è morto che è davvero
potente abbiamo anche chiamato questa cosa
contesto / contesto / ci consente di scrivere
compilare il codice temporale o in linea di principio
compilare il codice di esecuzione del tempo e questo è un nuovo
computer portatile e io non ho il torace per farlo
le conferenze sì significa che ho parlato
su questo per troppo tempo se il risparmiatore
prende il via così posso scrivere il tempo di compilazione
codice e se hai mai giocato in giro
con trucchi come il preprocessore perché
hai bisogno di una costante questo è il
disponibile in fase di compilazione quindi ora tu
potrebbe scrivere senza macro orribili
puoi scriverlo nella lingua che sei
già scrivendo sarà vedremo un
un po ‘di questo lungo la linea ma
questo è un concetto piuttosto potente e
sarà costruito in futuro
abbiamo Atomics atomic sir una lattuga
accedere alla memoria in un modo che è thread
più thread sicuri se tu se lo sei
attento otteniamo un modello di memoria che
filettatura permette di essere in realtà ben
definito
abbiamo letterali definiti dall’utente che
ci sono tonnellate di roba è stato enorme
riavviare alla lingua e in tre
anni dopo abbiamo un’altra revisione
della lingua che ci dà un sacco di cose
di materiale incluso il tipo di reso
deduzioni quindi ora non ne ho nemmeno bisogno
dì che cosa ritorna la mia funzione, posso solo
fare Auto
myfunc e poi basta tornare sette
è come se immagino lo volessi
questo per tornare e dentro
che ovviamente salva la digitazione ma in
qualche codice generico è molto prezioso
cosa che non so forse non so cosa
il risultato di ciò che ho intenzione di restituire
è perché è basato su quello che ero
dato quindi è un concetto potente e il
Supporto lambda ancora più bello così ora abbiamo
può effettivamente catturare cose e muoversi
li possiamo rinominare nei Lambda
siamo in grado di fare alcuni bit e pezzi che
permettimi di usare più efficacemente lambda
e Landers è diventato ciò che loro stessi
contesto di contesto e che è giusto
un’altra cosa capace di piegare la mente che posso scrivere
codice generico usando lambdas e lo sappiamo
possono essere eseguiti in linea di principio a
compilare tempo e il risultato è solo essere
alimentato e potrebbe essere solo un numero così
è piuttosto potente e io ho un
un mio amico ha fatto una presentazione
dove hanno scritto ha scritto a
compilare il parser JSON time che è giusto
noci comunque non importanti usando lambda
C ++ 17 questa è la versione più recente
dello standard che abbiamo se Const X
tana che è essenzialmente un se
dichiarazione che viene eseguita dal compilatore
con un’espressione costante qualcosa
che può essere valutato al momento della compilazione
e funziona un po ‘come l’hash se se
hai fatto di nuovo gli hack del preprocessore
prima ora posso avere un pezzo di codice
è gentile e generico e forse ne prendo un po ‘
tipo di tipo T che non conosco
dì un modello di tipo T e poi posso
in realtà hanno bit di codice condizionali
quello dice bene se T è un int che io sono
farò questa cosa e se T è un doppio
Posso fare quest’altra cosa e il
la cosa importante è che la roba sia
nella dichiarazione if deve solo essere
possibile non deve essere
semanticamente corretto quindi se il fallimento
caso se la clausola else no
effettivamente gestito dal mio se non sta bene
formato per qualunque tipo sia, forse
è come se sapessero che dicono se T è un
puntatore tipo quindi dereferenziare ora di
Certo se T non era un tipo di puntatore
non sarebbe codice valido il compilatore è
permesso di buttarlo via adesso e così
ci dà un modo potente per scrivere
modello meta programmazione tipo di molto
funzioni di alto ordine senza ricorrere
ricorrere ad alcuni dei vecchi
tecniche che probabilmente hai visto
lungo la strada che dà il voluminoso
messaggi di errore che ho accennato al
all’inizio abbiamo anche avuto un sacco di
nuove cose nello standard alcune
tipi di dati algebrici
variante opzionale c’è un qualsiasi tipo
che potrebbe contenere tutto ciò che è vista stringa
come una finestra in un’area esistente
che ad Alexis piace guardare una sequenza di
byte come una stringa senza come copiare
e queste sono cose molto molto
potente quindi questi ne abbiamo molti
cose fantastiche che scendono dai piloni
quello che sto cercando di dire qui e in C ++
20 che è già in cantiere
avremo concetti che speriamo di essere
otterrò degli intervalli che ci permettono di
mi piace quasi come un pipe basato
programmazione che hai sentito al keynote
come i tubi UNIX sono una cosa dimenticata
e non sono d’accordo per aver usato i buick
tubi tutto il tempo e sarebbe pari
più fantastico essere in grado di prendere una distanza
di valori pieden attraverso qualcosa che
li raddoppia e li convoglia
qualcosa che li ordina fuori li condurrà
attraverso qualcos’altro e poi ottenere ottenere
una gamma dalla fine e dire bene questo
è come una mia pigra valutazione delle cose
così che si spera che arrivi
anche le co-routines che possiamo mettere in rete
programmazione più appetitosa e speranzosa e
queste cose stanno già iniziando a
apparire in compilatori che è sorprendente
quindi voglio solo darti una rapida
esempio di come il codice potrebbe apparire diverso
Non so se questo è che è che
abbastanza leggibile non so se posso fare
molto sulla dimensione del carattere, quindi mi scuso
in anticipo e andrò attraverso questo
super veloce, non ci proverò e
spiegare perché ho già accertato
che la maggior parte della stanza non è al momento
fare lo sviluppo in C ++ ma questo è come
un vecchio modo di iterare su un array
il principale è il tipo di aspetto principale qui
questa variabile orribile che dovevo definire
quello dice che sai che questa è la cosa
questo è il tipo di cosa che sono
iterando con e questo è semplicemente orribile
quindi la prima cosa che potremmo fare è solo
sostituirlo con Auto che è così bello
Non devo ricordare ciò che il mio stupido
il tipo è o quanti due punti o meno di
o maggiore di quanto ne ho bisogno, ma anche
meglio non ho bisogno di iterare su questo
più posso usare l’intervallo per così allora
diventa molto più bello di
certo se tu fossi un funzionale
tipo di programmatore che potresti conoscere
che esiste una funzione built-in per C ++
chiamato accumulare che ti permette di
dì bene, ecco l’inizio di
qualcosa che si può iterare
ecco la fine di qualcosa che voglio
per aspettare qui è il
valore iniziale basta aggiungerli tutti o
accumularli tutti nel qual caso tu
potrei scrivere qualcosa di simile così io
menzionato prima sull’essere lambda
permettendoti di scrivere cose in linea
è l’opposto di quello che c’è il mio
funzione in alto lì che è
accumulando e in questo caso
perché sto facendo una radice quadrata media
scusa, non ho detto prima di aver bisogno
prendere la somma parziale e aggiungere il
quadrato della cosa che sta vivendo
ad esso per tipo di ottenere la mia somma del
piazze prima che io abbia radice quadrata così io
significa che non è male in questo caso ma
se hai una grande base di codice tentacolare
avere un sacco di funzioni
ovunque tu lo sappia
caricamento cognitivo in modo da poter scrivere
questo che probabilmente non è molto meglio
tutto sommato, ma almeno io ho
ho iniziato e finito da zero e poi
c’è il mio lambda questo blocco nel
al centro c’è solo dice hey ho solo bisogno
una funzione proprio qui che fa questo
per favore
quindi le cose sono migliorate un po ‘
lì lo spero
C ++ ha cambiato C ++ si è evoluto molto
e alcune cose come la smart
i puntatori sono una specie di cambi di gioco che tu no
più deve preoccuparsi di usare dopo
libero oo come perdite di memoria e varie
cose del genere se si può fare affidamento
totalmente su puntatori intelligenti per gestire il
memoria per te allora sei in un bene
posto già ma perché dovresti scegliere C ++
quando ce ne sono tanti altri buoni
lingue là fuori intendo in particolare
cose come la ruggine sono davvero buone
scelte per questo e sono molto emozionato
riguardo la ruggine e probabilmente penso che forse
Sto parlando di turno qui, ma io
Chissà se un sacco di accelerazione
C ++ è lo sviluppo è venuto da simili
il fatto che ora c’è un genuino
concorrente questo è C ++ quindi voglio parlare
un po ‘ sul perché li penso
i tipi di valore sono la prima cosa che ho detto
io sono elenchi di proiettili davvero
importante quindi qual è il tipo di valore che è
passato un oggetto che è passato per valore
Non prenderò alcun riferimento a questo
questo a questa cosa è come in
solo un numero intero o una coppia di numeri interi o
qualcosa di piccolo forse lo sai 16
32 byte di dati per i quali è
più economico solo per copiare in valore
piuttosto che avere qualcosa in memoria
da qualche parte che io continuo riferendosi di nuovo a
e se vieni da come gestisci
lingue come Java in particolare è
difficile pensare a tutto ciò che non è
un riferimento perché ogni oggetto che
ti sei mai occupato di un nuovo dub
oggetto che vive nell’heap da qualche parte
che si sta indicando ma c’è un
sorta di categoria di problemi che vengono
con programmazione basata su riferimento e
quello è che non sai chi altro ha
un riferimento a quell’oggetto e tu lo sei
molto difficile per te ragionare
se o quell’oggetto sta per
cambia sotto i piedi quindi se hai
una funzione che prende un riferimento
a un oggetto e forse ne hai un po ‘
tipo di ascoltare una cosa callback e tu
come la tua scrittura scrivendo il tuo codice e
la tua funzione ti esegue un po ‘di lavoro e
allora tu dici oh ammetto il mio qualcosa
interessante evento accaduto e lo so
qualcuno si è iscritto a ciò che hanno fatto
qualcosa con esso e poi proseguo
con il mio codice per tutto quello che sai tutto tuo
i riferimenti sono rimasti invariati
qualcos’altro sai che l’ oggetto
puntato verso l’ alto è stato modificato in qualche modo
e questo è ciò che rende difficile
la ragione per cui il valore passa così
liberati di quello che hai la tua copia di
quello è davvero bello in C ++
i tipi non hanno affatto spese generali
letteralmente il quattro o otto o sedici
byte che si trovano in un registro da qualche parte
o in pila da qualche parte e questo significa
che non c’è nessun sovraccarico che io sia
passare un inter e ma non è un int
è il mio tipo e il mio tipo può avere
comportamento in modo da poter definire cosa significa
per aggiungere due dei miei tipi insieme può
posso scrivere per gli operatori di streaming
posso permettermi di farcela da sola
sapendo che in realtà è ancora solo un
Valore a 32 bit che verrà trattato
come un intero da qualche parte e loro sono
davvero utile per cose come posizioni
codici di errore prezzi quantità volte
qualsiasi cosa dove sarebbe davvero veramente
Davvero pessimo se hai confuso le cose
significa che ho visto che ho lavorato in finanza per a
di tempo molto lungo e non avete mai desidera ottenere
i tuoi parametri a proposito
la funzione che vi mostrerò in un
secondo e sai che è solo un
molto di più qual è la parola oh Dio ho avuto un
buona parola per questo e il mio cervello andato
Vuoto, non abbastanza caffè, sai che sei
modellando il tuo dominio dicendo questo
è un tipo di questo piuttosto che giusto
dicendo in qualcosa nella tua nella tua
firma della funzione che dici no è a
la quantità è come oh questo è quello
a portata di mano sto documentando che è così e così
che C ++ è una forte tipizzazione significa che io
otterrà un errore se per esempio haha se
Dovevo scrivere una funzione chiamata buy
condivide e prende un puntatore con char
al simbolo ci vuole un doppio per il
prezzo e mi fermerò qui e
dire mai e poi mai usare il doppio per
prezzi questo è puramente qui un codice slide
Sarò linciato se qualcuno dovesse mai vederlo
vede questo nel codice di produzione e un in
quantità lì e poi chiamerò
la mia funzione con comprare azioni vuole comprare
ottocento quote di Google per nove
centosettantacinque dollari proprio e
il compilatore mi permetterà di fare questo e in
molto molti casi
anche darmi un avvertimento che qualcosa
è andato avanti perché whoops I got the
i parametri nel modo sbagliato intorno all’800 sono a
numero a doppia precisione completamente valido
e 970 5.0 può essere facilmente forzato
in un numero intero e sai di Microsoft
il compilatore penso che vinca sia tu
come restringere qui con l’avvertimento
livello alzato su clang otterrete
alcuni degli avvertimenti qui, ma è come
è il tipo di cosa che potresti
immagina di fare bene ed è così
il tipo di cosa che potrebbe essere molto
molto costoso per ottenere il modo sbagliato
in giro così e se invece l’avessi scritto
in questo modo ho usato i miei piccoli collant piccoli
il mio prezzo nella mia quantità
sapendo che sono ancora solo a
registri il valore in modo da non rinunciare a nessuno
spettacolo qui e poi ci provo e faccio
questo ancora così io lo compro 800 a 975
e ora il compilatore mi dice che l’ho fatto
fatto un errore ed è grandioso ed è
il messaggio non è il migliore giusto io
significa che stavo cercando di piacere come sto cercando di
girare questo per essere come C ++ è fantastico e
tutti i messaggi di errore incontrati che vedi
nel tuo passato sono stati tutti riparati ma
non è del tutto vero ma non lo è
terribile mi sta dicendo che come il
secondo argomento qui non ho potuto girare
quella quantità che mi hai dato in un prezzo
come whoops è un errore costoso
scongiurato e quindi questo è ciò che un tipo di valore
potrebbe sembrare che sia scritto proprio come un
classe normale o una struttura sono solo
andando a evidenziare alcune altre cose nuove
che sono nuovi in C ++ nel
implementazione di un tipo di valore questo è un
posizione bidimensionale usando floating
valori in punti per la X e la y e così via
la prima cosa che dico è come posso
inizializza la mia X & Y
nella mia struttura e di nuovo se voi ragazzi
questo non è familiare con C ++
notizie per noi so che Java ha avuto da allora
per sempre e l’inizializzatore qui è
l’inizializzatore predefinito che ho appena usato
qui parens aperti e chiusi che lo faranno
Significa che inizializziamo a zero ma io
potrebbe anche essere fatto float x uguale a zero
o float x è uguale a 10 o qualsiasi altra cosa
volevo che il valore predefinito fosse così
molto carino, lo salterò e vieni
torna ad esso questo è il costruttore che
Dice ok se vuoi fare un
posizione con una posizione preformata con
una x e una che so già allora
puoi costruirne uno con una x e una ay
e sto solo inizializzando la X
con la X e la y con l’ampia I
sarebbe passato ora che è abbastanza bello
non appena inizio a definire il mio
costruttori C ++ dice ok arrivare a te
vuoi fare da solo la costruzione
Non permetterò a nessuno di prendere posizione
senza usare uno dei costruttori
che ottieni
ma io sono andato a tutte queste attenzioni
questa cura per assicurarsi che piaccia
verrebbe inizializzato a zero per impostazione predefinita
giusto quindi voglio tipo di ottenere che quel
comportamento indietro Sto per dire no no no il
costruttore vuoto quello che non lo fa
prendere qualsiasi argomento a tutto ciò che mi consente
per andare solo in pausa P è solo predefinito
riportare indietro quella banda e riprenderla
sarà predefinito inizializzato in x
uguale a zero y uguale a zero e proprio come a
esempio qui sotto è come come me
inizia ad aggiungere comportamenti che sto dicendo
questo è come aggiungere una posizione a me
dare una nuova posizione così per quelli no
familiarità con gli idiomi in C ++
uccello di contesto l’inizio è uno dei
nuove funzionalità di C ++ 11 che dice look in
principio questo potrebbe essere fatto al momento della compilazione
tempo e se dovessi fare qualcosa in
qui che non era in linea di principio di compilazione
tempo fattibile se dovessi allocare memoria
qui o per gettare un’eccezione su a
percorso in cui verrebbe effettivamente eseguito
dal compilatore sarebbe il compilatore
avrei bug fuori e dire no, non posso farlo
Non posso farlo al momento della compilazione
quindi è completamente inutile in questo
caso, sto solo andando ad esporlo qui, lo sono
restituendo un oggetto pausa sono il
operatore più questo è quello che succede
se aggiungo io sono l’altra pausa qui
quello che mi manca è stato aggiunto a me e tu lo farai
notare che lo sto prendendo in considerazione questo valore
è il punto di valore di queste cose
tipi posso garantire che si adatta
un registro o due registri o qualsiasi altra cosa
e verrà solo da me e sii veloce
e sto restituendo una nuova posizione usando
il costruttore che ho definito sopra solo
aggiungendo le cose insieme e
poi la cosa che voglio davvero
attira la tua attenzione su non è C ++ quello
questo coso non funziona su nessuno
la registrazione comunque è la Const al
fine di quella linea lì così la console
operatore di pausa extra più poli altro
Const penso che sia abbastanza unico per
C ++ forse arrugginisce pure forse chiunque
chi è un esperto linguistico qui significa
che l’oggetto è questo metodo
essere chiamato è per sé costante
la durata di questo metodo non posso
muta l’oggetto qui è che è a
grande suggerimento per me come programmatore che sono
non è permesso di cambiare me stesso e io sono
dicendo anche ai miei chiamanti che puoi
chiama il mio metodo e niente di interessante
accadrà all’oggetto sarà ancora
essere lo stesso oggetto in seguito
penso sia una cosa utile e
qualcosa di cui mi manchi quando ne faccio
tipo di lavoro lato Java o cose del genere
quello dove dove ottengo un metodo e io
sai che otterrai il metodo che potresti
potenzialmente colpire il tuo dentro
oggetto e catena
cose così io koala è una cosa carina
di vederci e poi lo farebbe
altri tutti gli altri operatori e tu
avere un buon valore digitare un rapido esempio
della vita dell’oggetto chiaro che io
ho parlato prima, quindi ho parlato di questo
quando un oggetto cade fuori dal suo ambito
il distruttore viene eseguito e quasi tutto
le lingue hanno qualche nozione di quando il mio
l’oggetto è morto mi piacerebbe che tu facessi
qualcosa per me che Java ha finalizzato
e c-sharp probabilmente ha qualcosa
Giusto diritto sto guardando la folla
nel caso qualcuno possa correggermi di nuovo
ho detto che non sono un esperto di niente
a parte benissimo non vedo nemmeno lo spaz
ma qualunque cosa sia così bella che il problema
con finalizza è che vengono eseguiti quando
il netturbino o quant’altro
meccanismo è usato per tenere traccia di quando un
l’oggetto non è più necessario solo si rende conto
che quell’oggetto è irraggiungibile e
è grandioso ma potrebbe non essere un buon momento
per te così per esempio qui mi sono inventato
una funzione di interrogazione del database qui e questo
è il peggior codice è il codice diapositiva e tutto
questo tipo di sciocchezze, ma su questo
eccomi questa mitica connessione DB
obiettare che non esiste da nessuna parte
è fatto solo ma sto costruendo
uno e sto dando un nome hardcoded
del server per connettersi a chiamato
server e porta 9000 o simili
i parametri significano che non ha molta importanza
ma lo sai che se stai parlando con a
database da qualche parte dietro le quinte
ci sarà probabilmente un TCP
connessione in modo da creare un socket a
connessione è successo alcuni probabilmente
alcuni buffer sono stati assegnati al tuo
lato e probabilmente sul database ora
stai prendendo risorse su questo
database remoto c’è una connessione
sul lato del database che è quello
occupando parte della sua RAM ed è come
Dio il suo buffer e le sue allocazioni
quel lato quindi è costoso
cosa pesante da fare
e ovviamente in un codice reale che avresti incassato
in qualche modo e fa il pooling di connessioni
e anche qualcos’altro, ma va bene
mi piace scivolare bene e poi chiamerò
query e restituirò la query così
Sono delegato andando fuori a qualunque cosa
la query sta per essere eseguita presumibilmente
la query sul database e mi dà un
stringa del risultato come il peggio
rappresentazione sempre di una query ma
qualunque cosa e ho intenzione di restituirlo
al mio chiamante e che è grande per quanto riguarda
quella connessione al database e tutto
le risorse ad esso associate in un in
una lingua gestita probabilmente
devi fare qualcosa dove tu
chiamare esplicitamente anche qualcosa
a loro piace i vestiti conducono vestiti o o
avresti come un mago o
alcuni degli altri tipi di I’m only
familiarità con Python in questo particolare
cosa in cui non lo fai con open o foo
come X e induci il blocco e poi
alla chiusura del blocco poi alcuni
il metodo magico viene chiamato sull’oggetto
con cui suoni e che è grandioso ma
devi ricordarti di farlo e questo
significa che posso scrivere il database di codice
codice di connessione come questo che c’è
solo un modo per lasciare un penzoloni
riferimento a meno che non appena quel con
l’oggetto non è disponibile per nessuno
più poi quella connessione è chiusa
le risorse sul mio sito vengono pulite
e le risorse e il lato remoto
saranno puliti pure e ovviamente
c’è un sacco di cose da fare
con Eric controllo e eccezioni e
roba così evidentemente, ma riesco a truccarmi
codice di merda come questo e si deve
un po ‘come per inventare gli altri bit per
me un altro esempio ora questo è una specie di
mostrando il trasferimento di proprietà
di cui stavo parlando prima è come
questo questo esempio qui dove ho un
documento e un documento ha elementi e
gli elementi sono come una base virtuale
classe e questa è una classe astratta e
classe di interfaccia per le persone che provengono da
co-op java mondi il problema con quelli
oggetti è che io non so quanto grande
sono perché tocca al chiamante
il chiamante può effettuare qualsiasi implementazione
che si conforma a quell’interfaccia e loro
può fare qualsiasi oggetto a loro piace e dare
a me come a loro quindi non posso memorizzare un
obiettivo me stesso direttamente così non posso
avere una serie di loro e non posso solo
avere un vettore del denaro da avere
riferimenti a loro sul mucchio e di nuovo
non appena inizi ad avere riferimenti
alle cose sul mucchio devi essere
attenti a cui responsabilità è quella di
pulisci quei riferimenti a quegli oggetti
quindi qui quello che ho fatto è che ho conservato il mio
Conserverò la mia lente se il mio clicker
funziona in un vettore che è a dire a
crescente gamma di indicatori unici per a
obiettivo in modo che il puntatore unico sta per
essere il ragazzo che sta andando a guardare dopo il
allocazione e disallocazione o meglio
la deallocazione in questo caso di quelli
LM obietta che il problema è per quelli
i puntatori unici non possono essere copiati perché
ancora una volta sono unici quindi come facciamo?
noi come facciamo a ottenere cose dentro di loro nel
primo posto perché qualcuno ne ha uno e
mi daranno il loro Blair
il loro puntatore e poi devo tipo di
beh, ho bisogno di averlo in qualche modo senza
copiandolo e il modo per farlo è
con questo
doppio e commerciale cosa qui ora lo farò
dimmi che non è una sintassi molto buona
per nessuno tranne questa doppia e commerciale
qui è chiamato un riferimento al valore r e
ciò di cui questo è fondamentalmente un riferimento
un oggetto che qualcun altro sia
ha promesso che non stanno andando da usare
di nuovo o è un valore temporaneo e
qual caso comprano costruzione voi
sappi che quell’oggetto sta per morire
comunque ciò mi permette di rubare il
i contenuti di quell’oggetto mi scusano e
quindi come fondamentalmente nuke l’oggetto che
è venuto da ora non sono in realtà te
non lo vedo in questo codice qui è
tutto nella libreria standard di questo
punto ma sto accettando che sono io
dicendo come quando chiami il mio annuncio di metodo
mi stai dando quell’oggetto che tu
il puntatore di bisogno ora è mio e quindi
perché ora la mia funzione è proprietaria del mio annuncio
funzione che ne è proprietaria, quando io la do a
il metodo sul posto indietro del
espansione dell’array quegli oggetti sono giusti
ci devo dire bene ho finito con
ora ho finito con quello che devo
spostalo nell’argomento del chiamante per
che il primo argomento per quello
funzione quindi è solo un esempio di
come viene monitorata la proprietà e
trasferito ora nel moderno C ++ finalmente
non saresti in grado di andare via senza
dire qualcosa sulla performance e io
mi rendo conto che sto iniziando a finire il tempo
ma ho inventato qualcosa usando il mio divertente
piccola lezione di pausa che ho scritto prima
solo per vedere quanto è bello il modo
bene il compilatore potrebbe fare con esso e
qui sto usando come il più funzionale
modo in cui ho potuto pensare di trovare il
punto medio di un gruppo di posizioni che
vale a dire accumularli tutti e aggiungere
tutti insieme e poi dividersi
li per il numero di essi che trova
come la media di tutti i punti che
è se non mi sbaglio nel mezzo
punto e ovviamente non ho potuto fare un discorso
senza avere un clic su questo così questo
è una visione interattiva di questo e di te
non posso davvero vedere oh puoi vederlo bene
quindi stesso codice e solo per dare qualcosa
tu intendo che non c’è nessuno di buono
capire cosa sta facendo qui noi
non lo faccio davvero , ma quello che vorrei
sottolinea che quell’enorme blocco di v
mods cose qui il compilatore è in grado di
approfittare del fatto che lo sa
il layout di memoria di quell’array di
oggetti non ho fatto nulla
particolarmente speciale hai visto tutto il
il codice è attivo sulle diapositive ma il
il compilatore è abbastanza intelligente da notarlo
hai XY e poi il prossimo
scusa XY del primo punto e il
il secondo punto in quell’array sarà il
il prossimo XY e così via, quindi non lo faremo
hai un flusso di xyxy in memoria e
si scopre che questo ha le CPU
istruzioni che passeranno semplicemente al volo
strisce di numeri e poter aggiungere
loro in parallelo l’un l’ altro usando
queste istruzioni vettoriali quindi il fatto
che è allineato in questo modo significa che
il compilatore può trarre vantaggio
del layout di memoria che può assumere
vantaggio dell’architettura e può
scrivere generare codice che è praticamente
il più velocemente possibile e penso
per altre lingue dove quelle cose
non sono garantiti memorizzati contigui
è molto difficile per ottimizzare jits e
cose per approfittare di ciò che so
ci sono cose che vengono giù la linea I
pensa per Java in termini di layout ma
ma e ora ci siamo, ma aspetta
c’è più del mio tono di vendita e io sono
per farli esplodere perché io
vorrei avere il tempo di averne un po ‘
domande alla fine
compilatori ci sono molti compilatori per
scegli da
Clang ha ora è come probabilmente il migliore
uno per andare al giorno d’oggi è solo
incredibilmente ben sviluppato è incredibile
messaggi di errore e supporta un intero
un sacco di strumenti che ti permette di
interrogare e fare come refactoring
operazioni sul tuo C ++ come Google
hanno davvero gettato il loro peso dietro
questo pure così Google ora sono una specie di
suggerendo che se stai usando qualcuno di
le loro librerie quindi ti piace solo scegliere
l’ultima versione della libreria e
vivi continuamente alla testa
versione di quello e ogni volta che fanno a
rompere il cambio API che stanno per
fornire uno strumento basato su come clang che
convertirà e sposterà argomenti in giro
e fare ogni sorta di cose intelligenti su di esso
quindi è una specie di cosa interessante
che questo abbia il clang del compilatore
ci ha permesso di fare GTCC ovviamente è un
classico e sia ICC di Intel
compilatore e compilatori di Microsoft sono
facendo un ottimo lavoro nel tracciare il
cambiamenti più recenti nella lingua e
GCC e clang che le fatture notturne avranno
quasi tutte le cose che sono anche
appena discusso sugli elenchi del ciclo di mailing
su cosa sta arrivando in c ++ 20
disinfettante quindi ti ho fatto girare questa storia
è del tutto impossibile ora avere
qualsiasi tipo di errore di memoria nel tuo
programma usando ovviamente i puntatori di file
non è proprio vero, c’è sempre un
modo di distruggere questa roba, ma abbiamo
i disinfettanti ora così se ne hai uno
hai mai usato valgrind o sentito parlare di
valgrind i disinfettanti sono come un
versione di valgrind che compila in
il tuo codice in modo che i compilatori stessi
hanno bandiere che dicono che generano rimbalzato
controlla tutto ciò che tiene
traccia di quali cose sono vive e quali
le cose sono morte, assicurati che io possa
genera un messaggio di errore in fase di esecuzione e
rallenta il programma ma a
runtime dicendo hey hai fatto qualcosa
quello era brutto e il problema ovviamente
bene e ci sono vari tipi di
disinfettanti abbiamo accesso alla memoria
c’è sicurezza del thread di comportamento non definito
un sacco di cose che vengono ma io
proprio come visualizzare un esempio di quello
accadrebbe qui , ecco il mio terribile
pezzo di codice che è leggermente
sorprendere il compilatore in realtà
compila senza alcun preavviso
ma ho una serie di dieci e leggo
l’ undicesimo elemento che penso
in realtà due alla fine di questo ora se
dovevi guardare il codice assembly
generato bene dimenticando il fatto che
ottimizzerà tutta la dannata cosa
probabilmente se tu guardassi il
assemblea avrebbe letto della fine di
quella matrice in pila e quello è
probabilmente non causerà il crash
quindi è come se fosse rotto, ma è così
probabilmente non creperò nemmeno quello che tu
ho capito è se hai questo tipo di
l’errore è un vuoto buco di sicurezza nella tua
programma dove stai permettendo qualcuno
leggere su di esso la memoria che non lo erano
dovrebbe essere in grado di leggere con il
disinfettanti e perdonare la mancanza
di tutto questo, ma voi la cosa come tre
dal basso qui con il grande verde
linea qui ottengo questo errore al punto
che succede il programma lo ferma
va whoa, cowboy, te ne sei andato
la fine della serie qui sei
frugando nella pila da qualche parte
dove non dovresti essere
probabilmente hai un errore e questo è
semplicemente fantastico c’è ancora più output
da quello in basso che ti dice tutto
il tipo di altri bit e pezzi che
stanno andando avanti nel tuo programma
tempo e quindi se sei decente
casi di test nel tuo codice
e dovresti avere e sei preparato
per costruire il debug ed eseguire tutti voi
i tuoi test con il disinfettante in poi
sai che diventerai molto bravo
indicazione se hai fatto qualcosa tu
non dovrebbe averlo fatto nemmeno da
incidente e per quello che vale
anche se rallenta il tuo programma
è stato in grado di eseguire un trading abbastanza completo
sistema di debug con questa sanificazione
su e ancora essere in grado di piacere eseguirlo e
non come timeout quindi è abbastanza veloce
sui computer stupidamente veloci di oggi
gli editori sono migliorati ci sono
plugin per tutto ciò che conosci il tuo VI
se sei un utente VI può avere
è automatico il completamento del clang
disponibile e consente come una lingua
server per C ++ che è fantastico
leone marino è tremendo se lo sei
usato IntelliJ o uno qualsiasi dei JetBrain
prodotti ora hai IntelliJ per C ++
che è brillante la comunità
C ++ nell’ultimo tipo di tre o quattro
anni che penso abbia davvero colto
lassù c’è un po ‘di vero il
membri del comitato degli standard
stanno mettendo fuori come linee guida di base
affermando chiaramente come va bene, abbiamo bisogno
per supportare queste vecchie cose, ma tu
non dovresti usarli più tu
dovrebbero usare questi idiomi e questi
idee e c’è una libreria che va
accanto a quello che ti permette di migliorare
aderire alle raccomandazioni che
hanno dato c’è un molto inclusivo
La comunità C ++ che ha un sacco di ha un
cosa vuol chiamare canale discordia
c’è un canale allentato ce ne sono alcuni
le migliori pratiche ci sono molte
informazioni là fuori ci sono tonnellate di
cose su YouTube se sei interessato
nelle migliori pratiche di dimensioni del morso o
vorrebbe video di cinque minuti circa
come hey ecco una nuova funzionalità di C ++ lui
non sapevo che è davvero preso
di recente e così che cosa stai aspettando
dovresti dare un C ++ in questo momento
grazie a tutti abbiamo dieci minuti
per le domande Penso sì credo di
scrivi dieci minuti e ne abbiamo uno
domanda nell’app ma se qualcuno ha
una domanda ora non essere timido leggere l’uno
dal dio è una delle retrovie
sì ciao, così veloce la domanda era se
Sono un po ‘consapevole di ruggine cosa faccio
vedo che sono consapevole della ruggine, sì, intendo
scritto come per i programmi giocattolo lì
e ho guardato il simile dal mio
punto di vista Amo le prestazioni e
le cose quindi mi piacciono i raytracer e io lo ero
come confrontare voi con il mio raytracer C ++
e io sono tipo oh sì, sembra carino
davvero buono, quindi Russ ha quasi tutto
delle cose che sembravano perse perdute
porta in totale onestà per voi è
leggermente più leggermente è molto
più severo riguardo al prestito che io
so che ho detto che è come muoversi
la proprietà intorno a essa è molto più severa
quel fronte che ti permette di essere
nella situazione in cui se il tuo codice
compili probabilmente non cadrai
afaul di tutto ciò di cui non hai bisogno
disinfettante come tale in Russ perché se il
compilatore viene compilato compilatore
probabilmente stai bene
mentre con C ++ è ancora possibile
giocare veloce e libero che è una specie di
parte dell’appello perché a volte tu
conosci i tuoi modelli di accesso ed è
molto difficile da provare anche
correttore statico che lì il percorso che
è trovato dalla costruzione del tuo
il programma non può realmente accadere così sono
molto eccitato per la ruggine non lo so
abbastanza su di esso per commentare più di
che però penso che porti più
delle cose che C ++ ha altre
domande nella stanza
Mi chiedevo da qui quindi la domanda
era noi usiamo disinfettanti in bollette di debug
ma non nella nostra produzione in generale
sì anche se so che Google lo sono
utilizzando alcuni disinfettanti in alcuni di
i loro componenti principali solo per
tipo di sicurezza dei motivi di controllo così
come abbattere cose da traboccare di
come interi con segno e senza segno e
alcune delle cose strane che il compilatore
può fare ciò che penso che costruisca
quelli in componenti centrali simili del
Sistema operativo Android solo per ottenere il
protezione da come sono
le prestazioni non sono così importanti come no
schiantarsi e non avere una sicurezza gigante
buco quindi abbiamo una domanda tramite il
app che siamo – il mio più grande problema con
iniziare è capire il
ecosistema come si avvia un nuovo progetto
e aggiungi dipendenze per quanto riguarda
distribuzioni e sistemi di generazione che è
sì che è evidente per la sua assenza
in questo discorso temo sia la storia
non ancora buono per C ++ la cosa migliore in
termini di sorta di alzarsi e
iniziato con HelloWorld
Suggerirei di catturare leoni marini
Community Edition e solo dicendo file
nuovo progetto e tipo di gioco
con quello è un buon modo di
per iniziare crea un aspetto a
progetto in background e cose del genere
ci sono molti strati di
le cose che stanno succedendo lì non sono un
fan di questo me stesso ma certamente lo ottiene
stai rapidamente funzionando in termini di
aggiungendo dipendenze c’è un paio di
attuale come best-of-breed
sistemi di gestione dei pacchetti per C ++
c’è qualcosa chiamato Conan che non ho
l’ho usato ampiamente, ma ha funzionato
abbastanza bene da seguire il tutorial
ma sì, con il comitato stanno bene
consapevole che questo è un problema ora e in
fatto come l’ultimo incontro che hanno
mettere insieme un nuovo gruppo di lavoro da provare
e fare quel processo di onboarding
molto influenzando gli strumenti attorno al C ++
molto meglio perché è paragonato a
ruggine voglio dire che è quello che è dove
la ruggine brilla, voglio dire, io questo è un
nuovo portatile e io
Avrei bisogno di mettere un sacco di
le cose in cui metto la ruggine e io solo
cliccato sul link e digitato attraverso
il mio guscio e io avevamo la ruggine e io
ho appena eseguito uno dei miei progetti e
scaricato tutte le dipendenze e questo
li ha costruiti tutti e poi ha funzionato il mio
un’applicazione come questa è così
dovrebbe essere per C ++ ma non è ancora lì
si, mi dispiace, non è la risposta
che la domanda che volevo sono certa
ma quale sarebbe una ragione convincente per
avviare un nuovo progetto e C ++ trovo
mi sto chiedendo, intendo che hai appena sentito un
grande richiamo alla lotta contro
entropia butta via il vecchio codice sì
con cose nuove che è molto vero così
sì, l’entropia che hai menzionato –
dal keynote penso che sia un
vero problema ma l’entropia di un uomo è
componente core di un’altra persona e
ci sono ancora dei codici nei sistemi
su cui ho lavorato è piaciuto venire
da 10 anni prima del mio arrivo e
quelli sono probabilmente scritti in C o in anticipo
C ++ ed a volte è bello pagare
quel codice e basta pomparlo e
non ci sono problemi di interoperabilità
è solo una funzione come le altre
funzione quindi ci sono alcune cose da fare
essere detto per quello che ha detto che conosci il
la storia grezza è piuttosto buona e tu sai
è l’interoperabilità è credo
abbastanza bene – sì, è il mio più grande
lamenta con C ++ tutti i vecchi modi di
sparare al piede sono fermi
sono ancora validi, sì, ci pensano
il molto penso che il puntatore automatico abbia
in realtà è stato tolto ora era quello che
fu il primo tentativo abortito di fare
questi puntatori intelligenti e semplicemente no
lavoro e c’erano alcuni orribili
i problemi erano lì così ma più
domande del pubblico
tdd mi sento di raccomandare di usare il catch the
credo che sia chiamato e penso
ha una modalità BDD e TDD di farlo
è un’intestazione La libreria Oni è carina
facile abbastanza semplice da usare bene
oh uno là ciao così il supporto delle linee guida
una sorta di linee guida qualunque dove
loro dove tornerò un paio di
diapositive dove siamo le linee guida principali
quali queste avranno le diapositive
collegamenti a loro e sono abbastanza buoni
di dire questa parte
non toccarlo più ma sono a
enorme documento ora direi che il
la stragrande maggioranza della libreria standard è
in realtà va bene non ci sono problemi
con esso significano cose come Auto
puntatore che è simile a quello
problema abbagliante che è stato in realtà
rimosso o ha un avviso di deprecazione
o qualsiasi altra cosa , penso che tu sia carina
va bene con quella spinta è di alta qualità
anche un pezzo di software ci sono
altro è lì penso che sia probabilmente l’impulso
il migliore a raccomandarlo come a
generale come qui sono alcuni
algoritmi e dico che questo è un altro
cosa che è un po ‘arrogante
debole su di te come tu vuoi dire hey I
voglio solo cambiare il mio caso
stringa ho la mia corda e voglio
maiuscole sei come ah ecco questo
snippet di codice che lo fa con a
si alzò trasformando questo per alzarsi e
sei come no no no non mi legherò a
maiuscolo, per favore, è quello che sono usato
in ogni altra lingua ragionevole
mai ma queste cose arriveranno
giù per il luccio oh penso che le persone lo siano
iniziando a capire che è reale
barriera all’adozione per le persone è se
non puoi semplicemente tuffarti e fare le cose
vuoi farlo subito, allora lo sei
andando molto rapidamente ad andare qualcos’altro
altre domande
va bene, nel qual caso grazie
molto Matt grazie mille – fantastico
grazie vieni e prendi ci sono alcuni
adesivi del compilatore Explorer qui se
vuoi venire a prenderne uno
Non ho ancora fatto niente ancora io
ottenere un applauso è un ottimo inizio
al giorno
Sì, va bene così c’è questo fantastico
cosa per la sessione come dice Jonathan per favore
tasso alla fine del discorso e sì chiedere
mi chiedo lì e spero
avere circa 10 minuti di enfant per
domande ma sappiamo tutti come va
giusto così sono oggi con cui parlerò
tu su C ++
è la più vecchia lingua nuova che sia
una sorta di ” peggiorativo”
lingue della vecchia scuola , ma mi piacerebbe
tipo di provare e lasciarti con il
impressione che C ++ non è un vecchio divertente
il linguaggio è infatti all’avanguardia
linguaggio fantastico che dovresti essere tutti
utilizzando in modo che usa C ++ prima di tutto
tu molto una persona che usa C ++ chiunque altro
usando C ++ attualmente due tre sì alcuni
Wow, va bene, questo è utile perché
mi dice se dovrei andare o no
più nei dettagli di alcuni dei
bit acquosi di C ++ o se dovrei
concentrati sui bit che sono
interessante per me sulla scelta di C ++ come
una lingua così in risposta a chi usa il C ++
più in generale come il lato dell’industria di
le cose e mi dispiace che la gente stia salutando
io dall’esterno ho usato abbastanza C ++
molto esclusivamente attraverso la mia carriera
e ho trascorso 10 anni nei giochi
industria e nell’industria dei giochi C ++
è una scelta abbastanza buona per scrivere
motori e sistemi 3d tornano all’estremo
molto all’inizio come alla fine degli anni ’90 nella mia
carriera era ancora C piuttosto che C ++
ma il C ++ è diventato praticamente lo standard
dopo quello ovviamente lo scripting all’interno
i giochi sono fatti in altre lingue
a volte inferiore e altri bit e
pezzi ma C ++ è un buon posto per
inizio ho lavorato in finanza e finanza
certamente se stai facendo qualcosa di simile
ha un rendimento elevato o un basso
sapore di latenza ad esso C ++ può essere un buono
scelta non troppo dispositivi integrati di nuovo
C è anche una buona scelta per queste cose
ma il C ++ sta diventando sempre più di a
buona scelta perché ti dà il
flessibilità di un linguaggio di alto livello e
tutto il con
i camion che vengono con quello erano ma
essere ancora in grado di scendere e colpire
registri hardware come potrebbe essere necessario
essere in grado di fare e ho giocato su
telefoni cellulari scrivendo decoder MPEG e
cose del genere e C ++ sono state fantastiche
scelta per quel genere di cose e
parlando come dispositivi hardware MPEG
e nei server se sei tu sai se tu
digita una query web in questo momento è quasi
sicuramente sarà gestito da
qualcosa scritto in C ++ sul back-end
ma ma perché ha fatto a scegliere C ++ così
ovviamente la prima cosa che nasce
in mente per la maggior parte delle persone su C ++ è
che è qualcosa in cui scrivi se tu
voglio un codice ad alte prestazioni e lo farò
non fare scuse questo è un evangelico
parlare di C ++ sono altre lingue
disponibile e, in effetti, lo farò
riferimento a loro ma io non sono un esperto
in altre lingue quindi proverò e
mantieni le mie menzioni di altre lingue
troppo concreto e non emotivo
perché sono sicuro che ci siano persone dentro
questo pubblico che ne sa molto di più
quelle lingue di quante ne ho
ti sorprendo le cose sul C ++ che io
pensa di fare una buona scelta sono questi
i tipi di valore cancellano le vite degli oggetti e
quindi terza prestazione quindi prestazioni
ovviamente è una cosa molto importante per
molte delle applicazioni che ho appena
descritto ma ci sono aspetti del C ++
questo lo rende una scelta davvero buona anche
se non hai bisogno di scrivere super
codice performante Ho intenzione di tornare
a questi in alcune diapositive e spiegare a
un po ‘di più su cosa intendo con a
tipo di valore e quale oggetto chiaro
le vite significano ma ormai qualcuno dentro
questo pubblico forse tutti voi siete
pensando ma non è C ++ così orribile
cosa con più pagine di errore
messaggi e tutti gli arresti anomali e il
perdite di memoria e tutta la sicurezza
difetti e tutta quella roba e, naturalmente
sì
in un certo senso era il vecchio C ++
nuovo C ++ è migliore e, naturalmente, perché
è retrocompatibile è ancora possibile
scrivi C ++ vecchio stile e lasciati
aperto a tutti questi problemi ma vado
spero di spiegarti che tu
non dovrebbe farlo più e quello
c’è una scelta migliore per te, quindi cosa
è cambiato nella lingua
Do solo un tavolino qui e lo do
tu i punti salienti di ogni revisione di
il linguaggio che molti di voi potrebbero non sapere
che C ++ è stato aggiornato in modo corretto
spesso penso che abbiamo iniziato
1998 con come la prima versione reale di
C ++ era uno standard e il
punti salienti di questo sono stati utilizzati perdite di memoria
dopo il free si blocca tutte quelle cose ora
ovviamente quelli non sono veramente
mette in evidenza ma voglio provare a fare un
punto qui e poi nel 2011 un nuovo
lo standard per C ++ è stato rilasciato
una riunione di commissione alla fine degli anni 2000
e per quelli di voi che conoscono
queste cose si chiamava C ++ Oh x4
per sempre perché pensavano che fossero
davvero andando a farlo nel
Anni 2000 ma è un po ‘ finita
corse e alla fine divenne C ++ 11 così
ci si va, ma abbiamo ottenuto tutta una serie di
nuove fantastiche funzionalità è la prima cosa
questa parola chiave auto ora se sei vecchio
come me potresti sapere che l’ auto ha sempre
è stata una parola chiave in C ed è come la
opposto di statico ed è anche il
predefinito in modo che tu non possa mai scrivere int I
come un modo non sei mai un auto int I
punto e virgola fino a quando non definisco una variabile
chiamato I ma questo è ciò che significa il
Auto significa che è la memorizzazione automatica è
significa che è in pila ma nessuno
usato così hanno cooptato il
parola chiave e auto ora significa che indovina il
digitare il compilatore quindi se lo faccio io sono uguali
lo zero virgola tipo gli occhi saranno
diverso deriva essere un numero intero e
se faccio Auto I equivale a false quindi lo farò
sii booleano o se chiamo complicato
funzionerà sarà qualunque cosa
funzione complicata restituisce e questo è
molto utile hai probabilmente se sei
come se fossi abituato a programmare in meno
lingue fortemente tipizzati a cui siete abituati
cose come let o altri modi per
Dì solo che ho bisogno di una variabile chiamata X
ed è questa cosa qui C ++ no
debolmente tipizzato quindi c’è un tipo forte
associato a questo, ma l’auto dice
lo elabori compilatore lo capisci
per me e si libera di tanta
il codice boilerplate che vorresti
altrimenti ho bisogno di alcuni esempi
che fino a venire abbiamo range per
quindi prima di questo se volessi iterare
sopra un contenitore o una sequenza di cose
dovresti contare da zero a
il numero di cose nel contenitore o
dovresti usare questi complicati
tipo iteratore tipo cose dove è
come vettore di int Colin: const
iteratore e questo è già un enorme
quantità da digitare e si inizia al
inizio e continui a scorrere fino a quando
sei arrivato alla fine e questo è solo molto
Scomodo quindi otteniamo la gamma quattro così ora
Posso andare su un contenitore andando per
Auto I: contenitore e mi metterò per
ogni elemento in quel contenitore ottengo a
variabile chiamata I e I non aveva nemmeno
per sapere di che tipo fosse perché
la cosa automatica ha funzionato per questo
anch’io
otteniamo lambda e ora posso definire a
piccola funzione in linea dove ne ho bisogno
e quei lambda possono catturare variabili
da copia o riferimento da lì
che racchiude l’ambito e questo è davvero
cosa potente se stai scrivendo
programmazione di stile funzionale in cui tu
potrebbe avere un algoritmo che dice che ho bisogno
combinare un gruppo di cose insieme
e mi piacerebbe fornire la combinazione
funzione ora in precedenza avresti dovuto
definire da qualche altra parte una funzione che è
il modo di combinare le cose funzione e
dovresti fare riferimento ad esso nel programma
nel punto in cui stavi chiamando
ma ora puoi solo definire
in quel punto la funzione stessa e
ancora più importante è possibile catturare
alcuni come le variabili locali o lo stato
fondamentalmente una chiusura
ci siamo mossi che ho appena messo giù
spostalo e c’è un sacco di
macchinario che è stato aggiunto alla lingua
sostenere l’idea che l’oggetto
le vite possono essere trasferite così oh
attraverso la proprietà dell’oggetto può essere
trasferito in modo da poter definire chiaramente quando
Sto dando un oggetto a qualcun altro
e non ne ho più bisogno e questo è
davvero importante con il prossimo punto
quali sono i puntatori intelligenti che posso scrivere e
se lo standard ora fornisce un insieme di
oggetti modello che assomigliano
puntatori ma sotto il cappuccio loro
gestisci attivamente la cosa che sono
indicando così mentre prima si potrebbe
basta int star I uguale a new int e
quindi ricordati di cancellare I quando tu
finito con esso altro hai a
perdita di memoria posso ora rendere unico
puntatore a I e un puntatore univoco dice I
posseduto in modo univoco la cosa che sono
puntando a e quando il puntatore univoco
cade fuori portata e non può essere
o dal compilatore sarà il suo
il distruttore verrà eseguito e il suo distruttore
pulirà il pezzo di memoria che
sta indicando e quello è estremamente
potente significa che posso efficacemente
fidati del compilatore per generare entrambi i
[Musica]
cosa vorrebbe catturare il puntatore che io
ho creato nel mucchio e anche a
garantire che sarà gettato via
quando ho finito con quello è davvero
davvero potente ma per essere in grado
per usarlo efficacemente ho bisogno di essere
in grado di dire bene ho fatto uno di questi
cose e mi piacerebbe darlo a
qualcun altro ora, ma l’unicità di
puntatore unico dice che non posso avere un
copia di lì non ho il permesso di copiare
queste cose perché sarebbe a
unico o è necessario clonare il
l’oggetto punta a quale sarebbe un
operazione costosa o ci sarebbe
essere due puntatori che indicano lo stesso
oggetto e quindi dovrei ricordare
che solo uno di loro è consentito
distruggere e diventa complicato così la mossa
la semantica mi ha permesso di avvolgere un oggetto
e digli che ti sto dando questo ora
e il mio oggetto è morto che è davvero
potente abbiamo anche chiamato questa cosa
contesto / contesto / ci consente di scrivere
compilare il codice temporale o in linea di principio
compilare il codice di esecuzione del tempo e questo è un nuovo
computer portatile e io non ho il torace per farlo
le conferenze sì significa che ho parlato
su questo per troppo tempo se il risparmiatore
prende il via così posso scrivere il tempo di compilazione
codice e se hai mai giocato in giro
con trucchi come il preprocessore perché
hai bisogno di una costante questo è il
disponibile in fase di compilazione quindi ora tu
potrebbe scrivere senza macro orribili
puoi scriverlo nella lingua che sei
già scrivendo sarà vedremo un
un po ‘di questo lungo la linea ma
questo è un concetto piuttosto potente e
sarà costruito in futuro
abbiamo Atomics atomic sir una lattuga
accedere alla memoria in un modo che è thread
più thread sicuri se tu se lo sei
attento otteniamo un modello di memoria che
filettatura permette di essere in realtà ben
definito
abbiamo letterali definiti dall’utente che
ci sono tonnellate di roba è stato enorme
riavviare alla lingua e in tre
anni dopo abbiamo un’altra revisione
della lingua che ci dà un sacco di cose
di materiale incluso il tipo di reso
deduzioni quindi ora non ne ho nemmeno bisogno
dì che cosa ritorna la mia funzione, posso solo
fare Auto
myfunc e poi basta tornare sette
è come se immagino lo volessi
questo per tornare e dentro
che ovviamente salva la digitazione ma in
qualche codice generico è molto prezioso
cosa che non so forse non so cosa
il risultato di ciò che ho intenzione di restituire
è perché è basato su quello che ero
dato quindi è un concetto potente e il
Supporto lambda ancora più bello così ora abbiamo
può effettivamente catturare cose e muoversi
li possiamo rinominare nei Lambda
siamo in grado di fare alcuni bit e pezzi che
permettimi di usare più efficacemente lambda
e Landers è diventato ciò che loro stessi
contesto di contesto e che è giusto
un’altra cosa capace di piegare la mente che posso scrivere
codice generico usando lambdas e lo sappiamo
possono essere eseguiti in linea di principio a
compilare tempo e il risultato è solo essere
alimentato e potrebbe essere solo un numero così
è piuttosto potente e io ho un
un mio amico ha fatto una presentazione
dove hanno scritto ha scritto a
compilare il parser JSON time che è giusto
noci comunque non importanti usando lambda
C ++ 17 questa è la versione più recente
dello standard che abbiamo se Const X
tana che è essenzialmente un se
dichiarazione che viene eseguita dal compilatore
con un’espressione costante qualcosa
che può essere valutato al momento della compilazione
e funziona un po ‘come l’hash se se
hai fatto di nuovo gli hack del preprocessore
prima ora posso avere un pezzo di codice
è gentile e generico e forse ne prendo un po ‘
tipo di tipo T che non conosco
dì un modello di tipo T e poi posso
in realtà hanno bit di codice condizionali
quello dice bene se T è un int che io sono
farò questa cosa e se T è un doppio
Posso fare quest’altra cosa e il
la cosa importante è che la roba sia
nella dichiarazione if deve solo essere
possibile non deve essere
semanticamente corretto quindi se il fallimento
caso se la clausola else no
effettivamente gestito dal mio se non sta bene
formato per qualunque tipo sia, forse
è come se sapessero che dicono se T è un
puntatore tipo quindi dereferenziare ora di
Certo se T non era un tipo di puntatore
non sarebbe codice valido il compilatore è
permesso di buttarlo via adesso e così
ci dà un modo potente per scrivere
modello meta programmazione tipo di molto
funzioni di alto ordine senza ricorrere
ricorrere ad alcuni dei vecchi
tecniche che probabilmente hai visto
lungo la strada che dà il voluminoso
messaggi di errore che ho accennato al
all’inizio abbiamo anche avuto un sacco di
nuove cose nello standard alcune
tipi di dati algebrici
variante opzionale c’è un qualsiasi tipo
che potrebbe contenere tutto ciò che è vista stringa
come una finestra in un’area esistente
che ad Alexis piace guardare una sequenza di
byte come una stringa senza come copiare
e queste sono cose molto molto
potente quindi questi ne abbiamo molti
cose fantastiche che scendono dai piloni
quello che sto cercando di dire qui e in C ++
20 che è già in cantiere
avremo concetti che speriamo di essere
otterrò degli intervalli che ci permettono di
mi piace quasi come un pipe basato
programmazione che hai sentito al keynote
come i tubi UNIX sono una cosa dimenticata
e non sono d’accordo per aver usato i buick
tubi tutto il tempo e sarebbe pari
più fantastico essere in grado di prendere una distanza
di valori pieden attraverso qualcosa che
li raddoppia e li convoglia
qualcosa che li ordina fuori li condurrà
attraverso qualcos’altro e poi ottenere ottenere
una gamma dalla fine e dire bene questo
è come una mia pigra valutazione delle cose
così che si spera che arrivi
anche le co-routines che possiamo mettere in rete
programmazione più appetitosa e speranzosa e
queste cose stanno già iniziando a
apparire in compilatori che è sorprendente
quindi voglio solo darti una rapida
esempio di come il codice potrebbe apparire diverso
Non so se questo è che è che
abbastanza leggibile non so se posso fare
molto sulla dimensione del carattere, quindi mi scuso
in anticipo e andrò attraverso questo
super veloce, non ci proverò e
spiegare perché ho già accertato
che la maggior parte della stanza non è al momento
fare lo sviluppo in C ++ ma questo è come
un vecchio modo di iterare su un array
il principale è il tipo di aspetto principale qui
questa variabile orribile che dovevo definire
quello dice che sai che questa è la cosa
questo è il tipo di cosa che sono
iterando con e questo è semplicemente orribile
quindi la prima cosa che potremmo fare è solo
sostituirlo con Auto che è così bello
Non devo ricordare ciò che il mio stupido
il tipo è o quanti due punti o meno di
o maggiore di quanto ne ho bisogno, ma anche
meglio non ho bisogno di iterare su questo
più posso usare l’intervallo per così allora
diventa molto più bello di
certo se tu fossi un funzionale
tipo di programmatore che potresti conoscere
che esiste una funzione built-in per C ++
chiamato accumulare che ti permette di
dì bene, ecco l’inizio di
qualcosa che si può iterare
ecco la fine di qualcosa che voglio
per aspettare qui è il
valore iniziale basta aggiungerli tutti o
accumularli tutti nel qual caso tu
potrei scrivere qualcosa di simile così io
menzionato prima sull’essere lambda
permettendoti di scrivere cose in linea
è l’opposto di quello che c’è il mio
funzione in alto lì che è
accumulando e in questo caso
perché sto facendo una radice quadrata media
scusa, non ho detto prima di aver bisogno
prendere la somma parziale e aggiungere il
quadrato della cosa che sta vivendo
ad esso per tipo di ottenere la mia somma del
piazze prima che io abbia radice quadrata così io
significa che non è male in questo caso ma
se hai una grande base di codice tentacolare
avere un sacco di funzioni
ovunque tu lo sappia
caricamento cognitivo in modo da poter scrivere
questo che probabilmente non è molto meglio
tutto sommato, ma almeno io ho
ho iniziato e finito da zero e poi
c’è il mio lambda questo blocco nel
al centro c’è solo dice hey ho solo bisogno
una funzione proprio qui che fa questo
per favore
quindi le cose sono migliorate un po ‘
lì lo spero
C ++ ha cambiato C ++ si è evoluto molto
e alcune cose come la smart
i puntatori sono una specie di cambi di gioco che tu no
più deve preoccuparsi di usare dopo
libero oo come perdite di memoria e varie
cose del genere se si può fare affidamento
totalmente su puntatori intelligenti per gestire il
memoria per te allora sei in un bene
posto già ma perché dovresti scegliere C ++
quando ce ne sono tanti altri buoni
lingue là fuori intendo in particolare
cose come la ruggine sono davvero buone
scelte per questo e sono molto emozionato
riguardo la ruggine e probabilmente penso che forse
Sto parlando di turno qui, ma io
Chissà se un sacco di accelerazione
C ++ è lo sviluppo è venuto da simili
il fatto che ora c’è un genuino
concorrente questo è C ++ quindi voglio parlare
un po ‘ sul perché li penso
i tipi di valore sono la prima cosa che ho detto
io sono elenchi di proiettili davvero
importante quindi qual è il tipo di valore che è
passato un oggetto che è passato per valore
Non prenderò alcun riferimento a questo
questo a questa cosa è come in
solo un numero intero o una coppia di numeri interi o
qualcosa di piccolo forse lo sai 16
32 byte di dati per i quali è
più economico solo per copiare in valore
piuttosto che avere qualcosa in memoria
da qualche parte che io continuo riferendosi di nuovo a
e se vieni da come gestisci
lingue come Java in particolare è
difficile pensare a tutto ciò che non è
un riferimento perché ogni oggetto che
ti sei mai occupato di un nuovo dub
oggetto che vive nell’heap da qualche parte
che si sta indicando ma c’è un
sorta di categoria di problemi che vengono
con programmazione basata su riferimento e
quello è che non sai chi altro ha
un riferimento a quell’oggetto e tu lo sei
molto difficile per te ragionare
se o quell’oggetto sta per
cambia sotto i piedi quindi se hai
una funzione che prende un riferimento
a un oggetto e forse ne hai un po ‘
tipo di ascoltare una cosa callback e tu
come la tua scrittura scrivendo il tuo codice e
la tua funzione ti esegue un po ‘di lavoro e
allora tu dici oh ammetto il mio qualcosa
interessante evento accaduto e lo so
qualcuno si è iscritto a ciò che hanno fatto
qualcosa con esso e poi proseguo
con il mio codice per tutto quello che sai tutto tuo
i riferimenti sono rimasti invariati
qualcos’altro sai che l’ oggetto
puntato verso l’ alto è stato modificato in qualche modo
e questo è ciò che rende difficile
la ragione per cui il valore passa così
liberati di quello che hai la tua copia di
quello è davvero bello in C ++
i tipi non hanno affatto spese generali
letteralmente il quattro o otto o sedici
byte che si trovano in un registro da qualche parte
o in pila da qualche parte e questo significa
che non c’è nessun sovraccarico che io sia
passare un inter e ma non è un int
è il mio tipo e il mio tipo può avere
comportamento in modo da poter definire cosa significa
per aggiungere due dei miei tipi insieme può
posso scrivere per gli operatori di streaming
posso permettermi di farcela da sola
sapendo che in realtà è ancora solo un
Valore a 32 bit che verrà trattato
come un intero da qualche parte e loro sono
davvero utile per cose come posizioni
codici di errore prezzi quantità volte
qualsiasi cosa dove sarebbe davvero veramente
Davvero pessimo se hai confuso le cose
significa che ho visto che ho lavorato in finanza per a
di tempo molto lungo e non avete mai desidera ottenere
i tuoi parametri a proposito
la funzione che vi mostrerò in un
secondo e sai che è solo un
molto di più qual è la parola oh Dio ho avuto un
buona parola per questo e il mio cervello andato
Vuoto, non abbastanza caffè, sai che sei
modellando il tuo dominio dicendo questo
è un tipo di questo piuttosto che giusto
dicendo in qualcosa nella tua nella tua
firma della funzione che dici no è a
la quantità è come oh questo è quello
a portata di mano sto documentando che è così e così
che C ++ è una forte tipizzazione significa che io
otterrà un errore se per esempio haha se
Dovevo scrivere una funzione chiamata buy
condivide e prende un puntatore con char
al simbolo ci vuole un doppio per il
prezzo e mi fermerò qui e
dire mai e poi mai usare il doppio per
prezzi questo è puramente qui un codice slide
Sarò linciato se qualcuno dovesse mai vederlo
vede questo nel codice di produzione e un in
quantità lì e poi chiamerò
la mia funzione con comprare azioni vuole comprare
ottocento quote di Google per nove
centosettantacinque dollari proprio e
il compilatore mi permetterà di fare questo e in
molto molti casi
anche darmi un avvertimento che qualcosa
è andato avanti perché whoops I got the
i parametri nel modo sbagliato intorno all’800 sono a
numero a doppia precisione completamente valido
e 970 5.0 può essere facilmente forzato
in un numero intero e sai di Microsoft
il compilatore penso che vinca sia tu
come restringere qui con l’avvertimento
livello alzato su clang otterrete
alcuni degli avvertimenti qui, ma è come
è il tipo di cosa che potresti
immagina di fare bene ed è così
il tipo di cosa che potrebbe essere molto
molto costoso per ottenere il modo sbagliato
in giro così e se invece l’avessi scritto
in questo modo ho usato i miei piccoli collant piccoli
il mio prezzo nella mia quantità
sapendo che sono ancora solo a
registri il valore in modo da non rinunciare a nessuno
spettacolo qui e poi ci provo e faccio
questo ancora così io lo compro 800 a 975
e ora il compilatore mi dice che l’ho fatto
fatto un errore ed è grandioso ed è
il messaggio non è il migliore giusto io
significa che stavo cercando di piacere come sto cercando di
girare questo per essere come C ++ è fantastico e
tutti i messaggi di errore incontrati che vedi
nel tuo passato sono stati tutti riparati ma
non è del tutto vero ma non lo è
terribile mi sta dicendo che come il
secondo argomento qui non ho potuto girare
quella quantità che mi hai dato in un prezzo
come whoops è un errore costoso
scongiurato e quindi questo è ciò che un tipo di valore
potrebbe sembrare che sia scritto proprio come un
classe normale o una struttura sono solo
andando a evidenziare alcune altre cose nuove
che sono nuovi in C ++ nel
implementazione di un tipo di valore questo è un
posizione bidimensionale usando floating
valori in punti per la X e la y e così via
la prima cosa che dico è come posso
inizializza la mia X & Y
nella mia struttura e di nuovo se voi ragazzi
questo non è familiare con C ++
notizie per noi so che Java ha avuto da allora
per sempre e l’inizializzatore qui è
l’inizializzatore predefinito che ho appena usato
qui parens aperti e chiusi che lo faranno
Significa che inizializziamo a zero ma io
potrebbe anche essere fatto float x uguale a zero
o float x è uguale a 10 o qualsiasi altra cosa
volevo che il valore predefinito fosse così
molto carino, lo salterò e vieni
torna ad esso questo è il costruttore che
Dice ok se vuoi fare un
posizione con una posizione preformata con
una x e una che so già allora
puoi costruirne uno con una x e una ay
e sto solo inizializzando la X
con la X e la y con l’ampia I
sarebbe passato ora che è abbastanza bello
non appena inizio a definire il mio
costruttori C ++ dice ok arrivare a te
vuoi fare da solo la costruzione
Non permetterò a nessuno di prendere posizione
senza usare uno dei costruttori
che ottieni
ma io sono andato a tutte queste attenzioni
questa cura per assicurarsi che piaccia
verrebbe inizializzato a zero per impostazione predefinita
giusto quindi voglio tipo di ottenere che quel
comportamento indietro Sto per dire no no no il
costruttore vuoto quello che non lo fa
prendere qualsiasi argomento a tutto ciò che mi consente
per andare solo in pausa P è solo predefinito
riportare indietro quella banda e riprenderla
sarà predefinito inizializzato in x
uguale a zero y uguale a zero e proprio come a
esempio qui sotto è come come me
inizia ad aggiungere comportamenti che sto dicendo
questo è come aggiungere una posizione a me
dare una nuova posizione così per quelli no
familiarità con gli idiomi in C ++
uccello di contesto l’inizio è uno dei
nuove funzionalità di C ++ 11 che dice look in
principio questo potrebbe essere fatto al momento della compilazione
tempo e se dovessi fare qualcosa in
qui che non era in linea di principio di compilazione
tempo fattibile se dovessi allocare memoria
qui o per gettare un’eccezione su a
percorso in cui verrebbe effettivamente eseguito
dal compilatore sarebbe il compilatore
avrei bug fuori e dire no, non posso farlo
Non posso farlo al momento della compilazione
quindi è completamente inutile in questo
caso, sto solo andando ad esporlo qui, lo sono
restituendo un oggetto pausa sono il
operatore più questo è quello che succede
se aggiungo io sono l’altra pausa qui
quello che mi manca è stato aggiunto a me e tu lo farai
notare che lo sto prendendo in considerazione questo valore
è il punto di valore di queste cose
tipi posso garantire che si adatta
un registro o due registri o qualsiasi altra cosa
e verrà solo da me e sii veloce
e sto restituendo una nuova posizione usando
il costruttore che ho definito sopra solo
aggiungendo le cose insieme e
poi la cosa che voglio davvero
attira la tua attenzione su non è C ++ quello
questo coso non funziona su nessuno
la registrazione comunque è la Const al
fine di quella linea lì così la console
operatore di pausa extra più poli altro
Const penso che sia abbastanza unico per
C ++ forse arrugginisce pure forse chiunque
chi è un esperto linguistico qui significa
che l’oggetto è questo metodo
essere chiamato è per sé costante
la durata di questo metodo non posso
muta l’oggetto qui è che è a
grande suggerimento per me come programmatore che sono
non è permesso di cambiare me stesso e io sono
dicendo anche ai miei chiamanti che puoi
chiama il mio metodo e niente di interessante
accadrà all’oggetto sarà ancora
essere lo stesso oggetto in seguito
penso sia una cosa utile e
qualcosa di cui mi manchi quando ne faccio
tipo di lavoro lato Java o cose del genere
quello dove dove ottengo un metodo e io
sai che otterrai il metodo che potresti
potenzialmente colpire il tuo dentro
oggetto e catena
cose così io koala è una cosa carina
di vederci e poi lo farebbe
altri tutti gli altri operatori e tu
avere un buon valore digitare un rapido esempio
della vita dell’oggetto chiaro che io
ho parlato prima, quindi ho parlato di questo
quando un oggetto cade fuori dal suo ambito
il distruttore viene eseguito e quasi tutto
le lingue hanno qualche nozione di quando il mio
l’oggetto è morto mi piacerebbe che tu facessi
qualcosa per me che Java ha finalizzato
e c-sharp probabilmente ha qualcosa
Giusto diritto sto guardando la folla
nel caso qualcuno possa correggermi di nuovo
ho detto che non sono un esperto di niente
a parte benissimo non vedo nemmeno lo spaz
ma qualunque cosa sia così bella che il problema
con finalizza è che vengono eseguiti quando
il netturbino o quant’altro
meccanismo è usato per tenere traccia di quando un
l’oggetto non è più necessario solo si rende conto
che quell’oggetto è irraggiungibile e
è grandioso ma potrebbe non essere un buon momento
per te così per esempio qui mi sono inventato
una funzione di interrogazione del database qui e questo
è il peggior codice è il codice diapositiva e tutto
questo tipo di sciocchezze, ma su questo
eccomi questa mitica connessione DB
obiettare che non esiste da nessuna parte
è fatto solo ma sto costruendo
uno e sto dando un nome hardcoded
del server per connettersi a chiamato
server e porta 9000 o simili
i parametri significano che non ha molta importanza
ma lo sai che se stai parlando con a
database da qualche parte dietro le quinte
ci sarà probabilmente un TCP
connessione in modo da creare un socket a
connessione è successo alcuni probabilmente
alcuni buffer sono stati assegnati al tuo
lato e probabilmente sul database ora
stai prendendo risorse su questo
database remoto c’è una connessione
sul lato del database che è quello
occupando parte della sua RAM ed è come
Dio il suo buffer e le sue allocazioni
quel lato quindi è costoso
cosa pesante da fare
e ovviamente in un codice reale che avresti incassato
in qualche modo e fa il pooling di connessioni
e anche qualcos’altro, ma va bene
mi piace scivolare bene e poi chiamerò
query e restituirò la query così
Sono delegato andando fuori a qualunque cosa
la query sta per essere eseguita presumibilmente
la query sul database e mi dà un
stringa del risultato come il peggio
rappresentazione sempre di una query ma
qualunque cosa e ho intenzione di restituirlo
al mio chiamante e che è grande per quanto riguarda
quella connessione al database e tutto
le risorse ad esso associate in un in
una lingua gestita probabilmente
devi fare qualcosa dove tu
chiamare esplicitamente anche qualcosa
a loro piace i vestiti conducono vestiti o o
avresti come un mago o
alcuni degli altri tipi di I’m only
familiarità con Python in questo particolare
cosa in cui non lo fai con open o foo
come X e induci il blocco e poi
alla chiusura del blocco poi alcuni
il metodo magico viene chiamato sull’oggetto
con cui suoni e che è grandioso ma
devi ricordarti di farlo e questo
significa che posso scrivere il database di codice
codice di connessione come questo che c’è
solo un modo per lasciare un penzoloni
riferimento a meno che non appena quel con
l’oggetto non è disponibile per nessuno
più poi quella connessione è chiusa
le risorse sul mio sito vengono pulite
e le risorse e il lato remoto
saranno puliti pure e ovviamente
c’è un sacco di cose da fare
con Eric controllo e eccezioni e
roba così evidentemente, ma riesco a truccarmi
codice di merda come questo e si deve
un po ‘come per inventare gli altri bit per
me un altro esempio ora questo è una specie di
mostrando il trasferimento di proprietà
di cui stavo parlando prima è come
questo questo esempio qui dove ho un
documento e un documento ha elementi e
gli elementi sono come una base virtuale
classe e questa è una classe astratta e
classe di interfaccia per le persone che provengono da
co-op java mondi il problema con quelli
oggetti è che io non so quanto grande
sono perché tocca al chiamante
il chiamante può effettuare qualsiasi implementazione
che si conforma a quell’interfaccia e loro
può fare qualsiasi oggetto a loro piace e dare
a me come a loro quindi non posso memorizzare un
obiettivo me stesso direttamente così non posso
avere una serie di loro e non posso solo
avere un vettore del denaro da avere
riferimenti a loro sul mucchio e di nuovo
non appena inizi ad avere riferimenti
alle cose sul mucchio devi essere
attenti a cui responsabilità è quella di
pulisci quei riferimenti a quegli oggetti
quindi qui quello che ho fatto è che ho conservato il mio
Conserverò la mia lente se il mio clicker
funziona in un vettore che è a dire a
crescente gamma di indicatori unici per a
obiettivo in modo che il puntatore unico sta per
essere il ragazzo che sta andando a guardare dopo il
allocazione e disallocazione o meglio
la deallocazione in questo caso di quelli
LM obietta che il problema è per quelli
i puntatori unici non possono essere copiati perché
ancora una volta sono unici quindi come facciamo?
noi come facciamo a ottenere cose dentro di loro nel
primo posto perché qualcuno ne ha uno e
mi daranno il loro Blair
il loro puntatore e poi devo tipo di
beh, ho bisogno di averlo in qualche modo senza
copiandolo e il modo per farlo è
con questo
doppio e commerciale cosa qui ora lo farò
dimmi che non è una sintassi molto buona
per nessuno tranne questa doppia e commerciale
qui è chiamato un riferimento al valore r e
ciò di cui questo è fondamentalmente un riferimento
un oggetto che qualcun altro sia
ha promesso che non stanno andando da usare
di nuovo o è un valore temporaneo e
qual caso comprano costruzione voi
sappi che quell’oggetto sta per morire
comunque ciò mi permette di rubare il
i contenuti di quell’oggetto mi scusano e
quindi come fondamentalmente nuke l’oggetto che
è venuto da ora non sono in realtà te
non lo vedo in questo codice qui è
tutto nella libreria standard di questo
punto ma sto accettando che sono io
dicendo come quando chiami il mio annuncio di metodo
mi stai dando quell’oggetto che tu
il puntatore di bisogno ora è mio e quindi
perché ora la mia funzione è proprietaria del mio annuncio
funzione che ne è proprietaria, quando io la do a
il metodo sul posto indietro del
espansione dell’array quegli oggetti sono giusti
ci devo dire bene ho finito con
ora ho finito con quello che devo
spostalo nell’argomento del chiamante per
che il primo argomento per quello
funzione quindi è solo un esempio di
come viene monitorata la proprietà e
trasferito ora nel moderno C ++ finalmente
non saresti in grado di andare via senza
dire qualcosa sulla performance e io
mi rendo conto che sto iniziando a finire il tempo
ma ho inventato qualcosa usando il mio divertente
piccola lezione di pausa che ho scritto prima
solo per vedere quanto è bello il modo
bene il compilatore potrebbe fare con esso e
qui sto usando come il più funzionale
modo in cui ho potuto pensare di trovare il
punto medio di un gruppo di posizioni che
vale a dire accumularli tutti e aggiungere
tutti insieme e poi dividersi
li per il numero di essi che trova
come la media di tutti i punti che
è se non mi sbaglio nel mezzo
punto e ovviamente non ho potuto fare un discorso
senza avere un clic su questo così questo
è una visione interattiva di questo e di te
non posso davvero vedere oh puoi vederlo bene
quindi stesso codice e solo per dare qualcosa
tu intendo che non c’è nessuno di buono
capire cosa sta facendo qui noi
non lo faccio davvero , ma quello che vorrei
sottolinea che quell’enorme blocco di v
mods cose qui il compilatore è in grado di
approfittare del fatto che lo sa
il layout di memoria di quell’array di
oggetti non ho fatto nulla
particolarmente speciale hai visto tutto il
il codice è attivo sulle diapositive ma il
il compilatore è abbastanza intelligente da notarlo
hai XY e poi il prossimo
scusa XY del primo punto e il
il secondo punto in quell’array sarà il
il prossimo XY e così via, quindi non lo faremo
hai un flusso di xyxy in memoria e
si scopre che questo ha le CPU
istruzioni che passeranno semplicemente al volo
strisce di numeri e poter aggiungere
loro in parallelo l’un l’ altro usando
queste istruzioni vettoriali quindi il fatto
che è allineato in questo modo significa che
il compilatore può trarre vantaggio
del layout di memoria che può assumere
vantaggio dell’architettura e può
scrivere generare codice che è praticamente
il più velocemente possibile e penso
per altre lingue dove quelle cose
non sono garantiti memorizzati contigui
è molto difficile per ottimizzare jits e
cose per approfittare di ciò che so
ci sono cose che vengono giù la linea I
pensa per Java in termini di layout ma
ma e ora ci siamo, ma aspetta
c’è più del mio tono di vendita e io sono
per farli esplodere perché io
vorrei avere il tempo di averne un po ‘
domande alla fine
compilatori ci sono molti compilatori per
scegli da
Clang ha ora è come probabilmente il migliore
uno per andare al giorno d’oggi è solo
incredibilmente ben sviluppato è incredibile
messaggi di errore e supporta un intero
un sacco di strumenti che ti permette di
interrogare e fare come refactoring
operazioni sul tuo C ++ come Google
hanno davvero gettato il loro peso dietro
questo pure così Google ora sono una specie di
suggerendo che se stai usando qualcuno di
le loro librerie quindi ti piace solo scegliere
l’ultima versione della libreria e
vivi continuamente alla testa
versione di quello e ogni volta che fanno a
rompere il cambio API che stanno per
fornire uno strumento basato su come clang che
convertirà e sposterà argomenti in giro
e fare ogni sorta di cose intelligenti su di esso
quindi è una specie di cosa interessante
che questo abbia il clang del compilatore
ci ha permesso di fare GTCC ovviamente è un
classico e sia ICC di Intel
compilatore e compilatori di Microsoft sono
facendo un ottimo lavoro nel tracciare il
cambiamenti più recenti nella lingua e
GCC e clang che le fatture notturne avranno
quasi tutte le cose che sono anche
appena discusso sugli elenchi del ciclo di mailing
su cosa sta arrivando in c ++ 20
disinfettante quindi ti ho fatto girare questa storia
è del tutto impossibile ora avere
qualsiasi tipo di errore di memoria nel tuo
programma usando ovviamente i puntatori di file
non è proprio vero, c’è sempre un
modo di distruggere questa roba, ma abbiamo
i disinfettanti ora così se ne hai uno
hai mai usato valgrind o sentito parlare di
valgrind i disinfettanti sono come un
versione di valgrind che compila in
il tuo codice in modo che i compilatori stessi
hanno bandiere che dicono che generano rimbalzato
controlla tutto ciò che tiene
traccia di quali cose sono vive e quali
le cose sono morte, assicurati che io possa
genera un messaggio di errore in fase di esecuzione e
rallenta il programma ma a
runtime dicendo hey hai fatto qualcosa
quello era brutto e il problema ovviamente
bene e ci sono vari tipi di
disinfettanti abbiamo accesso alla memoria
c’è sicurezza del thread di comportamento non definito
un sacco di cose che vengono ma io
proprio come visualizzare un esempio di quello
accadrebbe qui , ecco il mio terribile
pezzo di codice che è leggermente
sorprendere il compilatore in realtà
compila senza alcun preavviso
ma ho una serie di dieci e leggo
l’ undicesimo elemento che penso
in realtà due alla fine di questo ora se
dovevi guardare il codice assembly
generato bene dimenticando il fatto che
ottimizzerà tutta la dannata cosa
probabilmente se tu guardassi il
assemblea avrebbe letto della fine di
quella matrice in pila e quello è
probabilmente non causerà il crash
quindi è come se fosse rotto, ma è così
probabilmente non creperò nemmeno quello che tu
ho capito è se hai questo tipo di
l’errore è un vuoto buco di sicurezza nella tua
programma dove stai permettendo qualcuno
leggere su di esso la memoria che non lo erano
dovrebbe essere in grado di leggere con il
disinfettanti e perdonare la mancanza
di tutto questo, ma voi la cosa come tre
dal basso qui con il grande verde
linea qui ottengo questo errore al punto
che succede il programma lo ferma
va whoa, cowboy, te ne sei andato
la fine della serie qui sei
frugando nella pila da qualche parte
dove non dovresti essere
probabilmente hai un errore e questo è
semplicemente fantastico c’è ancora più output
da quello in basso che ti dice tutto
il tipo di altri bit e pezzi che
stanno andando avanti nel tuo programma
tempo e quindi se sei decente
casi di test nel tuo codice
e dovresti avere e sei preparato
per costruire il debug ed eseguire tutti voi
i tuoi test con il disinfettante in poi
sai che diventerai molto bravo
indicazione se hai fatto qualcosa tu
non dovrebbe averlo fatto nemmeno da
incidente e per quello che vale
anche se rallenta il tuo programma
è stato in grado di eseguire un trading abbastanza completo
sistema di debug con questa sanificazione
su e ancora essere in grado di piacere eseguirlo e
non come timeout quindi è abbastanza veloce
sui computer stupidamente veloci di oggi
gli editori sono migliorati ci sono
plugin per tutto ciò che conosci il tuo VI
se sei un utente VI può avere
è automatico il completamento del clang
disponibile e consente come una lingua
server per C ++ che è fantastico
leone marino è tremendo se lo sei
usato IntelliJ o uno qualsiasi dei JetBrain
prodotti ora hai IntelliJ per C ++
che è brillante la comunità
C ++ nell’ultimo tipo di tre o quattro
anni che penso abbia davvero colto
lassù c’è un po ‘di vero il
membri del comitato degli standard
stanno mettendo fuori come linee guida di base
affermando chiaramente come va bene, abbiamo bisogno
per supportare queste vecchie cose, ma tu
non dovresti usarli più tu
dovrebbero usare questi idiomi e questi
idee e c’è una libreria che va
accanto a quello che ti permette di migliorare
aderire alle raccomandazioni che
hanno dato c’è un molto inclusivo
La comunità C ++ che ha un sacco di ha un
cosa vuol chiamare canale discordia
c’è un canale allentato ce ne sono alcuni
le migliori pratiche ci sono molte
informazioni là fuori ci sono tonnellate di
cose su YouTube se sei interessato
nelle migliori pratiche di dimensioni del morso o
vorrebbe video di cinque minuti circa
come hey ecco una nuova funzionalità di C ++ lui
non sapevo che è davvero preso
di recente e così che cosa stai aspettando
dovresti dare un C ++ in questo momento
grazie a tutti abbiamo dieci minuti
per le domande Penso sì credo di
scrivi dieci minuti e ne abbiamo uno
domanda nell’app ma se qualcuno ha
una domanda ora non essere timido leggere l’uno
dal dio è una delle retrovie
sì ciao, così veloce la domanda era se
Sono un po ‘consapevole di ruggine cosa faccio
vedo che sono consapevole della ruggine, sì, intendo
scritto come per i programmi giocattolo lì
e ho guardato il simile dal mio
punto di vista Amo le prestazioni e
le cose quindi mi piacciono i raytracer e io lo ero
come confrontare voi con il mio raytracer C ++
e io sono tipo oh sì, sembra carino
davvero buono, quindi Russ ha quasi tutto
delle cose che sembravano perse perdute
porta in totale onestà per voi è
leggermente più leggermente è molto
più severo riguardo al prestito che io
so che ho detto che è come muoversi
la proprietà intorno a essa è molto più severa
quel fronte che ti permette di essere
nella situazione in cui se il tuo codice
compili probabilmente non cadrai
afaul di tutto ciò di cui non hai bisogno
disinfettante come tale in Russ perché se il
compilatore viene compilato compilatore
probabilmente stai bene
mentre con C ++ è ancora possibile
giocare veloce e libero che è una specie di
parte dell’appello perché a volte tu
conosci i tuoi modelli di accesso ed è
molto difficile da provare anche
correttore statico che lì il percorso che
è trovato dalla costruzione del tuo
il programma non può realmente accadere così sono
molto eccitato per la ruggine non lo so
abbastanza su di esso per commentare più di
che però penso che porti più
delle cose che C ++ ha altre
domande nella stanza
Mi chiedevo da qui quindi la domanda
era noi usiamo disinfettanti in bollette di debug
ma non nella nostra produzione in generale
sì anche se so che Google lo sono
utilizzando alcuni disinfettanti in alcuni di
i loro componenti principali solo per
tipo di sicurezza dei motivi di controllo così
come abbattere cose da traboccare di
come interi con segno e senza segno e
alcune delle cose strane che il compilatore
può fare ciò che penso che costruisca
quelli in componenti centrali simili del
Sistema operativo Android solo per ottenere il
protezione da come sono
le prestazioni non sono così importanti come no
schiantarsi e non avere una sicurezza gigante
buco quindi abbiamo una domanda tramite il
app che siamo – il mio più grande problema con
iniziare è capire il
ecosistema come si avvia un nuovo progetto
e aggiungi dipendenze per quanto riguarda
distribuzioni e sistemi di generazione che è
sì che è evidente per la sua assenza
in questo discorso temo sia la storia
non ancora buono per C ++ la cosa migliore in
termini di sorta di alzarsi e
iniziato con HelloWorld
Suggerirei di catturare leoni marini
Community Edition e solo dicendo file
nuovo progetto e tipo di gioco
con quello è un buon modo di
per iniziare crea un aspetto a
progetto in background e cose del genere
ci sono molti strati di
le cose che stanno succedendo lì non sono un
fan di questo me stesso ma certamente lo ottiene
stai rapidamente funzionando in termini di
aggiungendo dipendenze c’è un paio di
attuale come best-of-breed
sistemi di gestione dei pacchetti per C ++
c’è qualcosa chiamato Conan che non ho
l’ho usato ampiamente, ma ha funzionato
abbastanza bene da seguire il tutorial
ma sì, con il comitato stanno bene
consapevole che questo è un problema ora e in
fatto come l’ultimo incontro che hanno
mettere insieme un nuovo gruppo di lavoro da provare
e fare quel processo di onboarding
molto influenzando gli strumenti attorno al C ++
molto meglio perché è paragonato a
ruggine voglio dire che è quello che è dove
la ruggine brilla, voglio dire, io questo è un
nuovo portatile e io
Avrei bisogno di mettere un sacco di
le cose in cui metto la ruggine e io solo
cliccato sul link e digitato attraverso
il mio guscio e io avevamo la ruggine e io
ho appena eseguito uno dei miei progetti e
scaricato tutte le dipendenze e questo
li ha costruiti tutti e poi ha funzionato il mio
un’applicazione come questa è così
dovrebbe essere per C ++ ma non è ancora lì
si, mi dispiace, non è la risposta
che la domanda che volevo sono certa
ma quale sarebbe una ragione convincente per
avviare un nuovo progetto e C ++ trovo
mi sto chiedendo, intendo che hai appena sentito un
grande richiamo alla lotta contro
entropia butta via il vecchio codice sì
con cose nuove che è molto vero così
sì, l’entropia che hai menzionato –
dal keynote penso che sia un
vero problema ma l’entropia di un uomo è
componente core di un’altra persona e
ci sono ancora dei codici nei sistemi
su cui ho lavorato è piaciuto venire
da 10 anni prima del mio arrivo e
quelli sono probabilmente scritti in C o in anticipo
C ++ ed a volte è bello pagare
quel codice e basta pomparlo e
non ci sono problemi di interoperabilità
è solo una funzione come le altre
funzione quindi ci sono alcune cose da fare
essere detto per quello che ha detto che conosci il
la storia grezza è piuttosto buona e tu sai
è l’interoperabilità è credo
abbastanza bene – sì, è il mio più grande
lamenta con C ++ tutti i vecchi modi di
sparare al piede sono fermi
sono ancora validi, sì, ci pensano
il molto penso che il puntatore automatico abbia
in realtà è stato tolto ora era quello che
fu il primo tentativo abortito di fare
questi puntatori intelligenti e semplicemente no
lavoro e c’erano alcuni orribili
i problemi erano lì così ma più
domande del pubblico
tdd mi sento di raccomandare di usare il catch the
credo che sia chiamato e penso
ha una modalità BDD e TDD di farlo
è un’intestazione La libreria Oni è carina
facile abbastanza semplice da usare bene
oh uno là ciao così il supporto delle linee guida
una sorta di linee guida qualunque dove
loro dove tornerò un paio di
diapositive dove siamo le linee guida principali
quali queste avranno le diapositive
collegamenti a loro e sono abbastanza buoni
di dire questa parte
non toccarlo più ma sono a
enorme documento ora direi che il
la stragrande maggioranza della libreria standard è
in realtà va bene non ci sono problemi
con esso significano cose come Auto
puntatore che è simile a quello
problema abbagliante che è stato in realtà
rimosso o ha un avviso di deprecazione
o qualsiasi altra cosa , penso che tu sia carina
va bene con quella spinta è di alta qualità
anche un pezzo di software ci sono
altro è lì penso che sia probabilmente l’impulso
il migliore a raccomandarlo come a
generale come qui sono alcuni
algoritmi e dico che questo è un altro
cosa che è un po ‘arrogante
debole su di te come tu vuoi dire hey I
voglio solo cambiare il mio caso
stringa ho la mia corda e voglio
maiuscole sei come ah ecco questo
snippet di codice che lo fa con a
si alzò trasformando questo per alzarsi e
sei come no no no non mi legherò a
maiuscolo, per favore, è quello che sono usato
in ogni altra lingua ragionevole
mai ma queste cose arriveranno
giù per il luccio oh penso che le persone lo siano
iniziando a capire che è reale
barriera all’adozione per le persone è se
non puoi semplicemente tuffarti e fare le cose
vuoi farlo subito, allora lo sei
andando molto rapidamente ad andare qualcos’altro
altre domande
va bene, nel qual caso grazie
molto Matt grazie mille – fantastico
grazie vieni e prendi ci sono alcuni
adesivi del compilatore Explorer qui se
vuoi venire a prenderne uno
Please follow and like us: