Press "Enter" to skip to content

GOTO 2017 • Elixir: The only Sane Choice in an Insane World • Brian Cardarella


[Musica]
quindi, per prima cosa, dici che il titolo
è un po ‘ di una dichiarazione caricata ulteriormente
la strategia per ottenere un discorso accettato è
per te sai dare una sorta di pazzo discorso ozioso
e sperando che risalti e poi io
Sono gravato dal dover difendere il
il titolo parla durante il discorso che faccio
pensa che ci sia del vero in esso
però e spero di essere in grado di farlo
Almeno prendi delle persone dalla mia parte
tradizione quindi mi piace la curiosità prima di
tutti ci sono persone che sono
attivamente sviluppando il loro lavoro di giorno in
elisir nella stanza senza nome amico
non hanno familiarità con l’elisir sono come
cos’è che sono venuto qui per imparare
più a riguardo va bene così tanto
metà della stanza ha familiarità con il liquore
l’altra metà quindi mi è familiare
buon mix va bene come mi è stato presentato
il CEO di Dockyard siamo un software
consulenza e facciamo lo stack completo
sviluppo di applicazioni quindi se il tuo
la compagnia ha un progetto che vogliono
spedire ad una società che ha un molto
buona reputazione di consegnare in tempo
e problemi di compilazione dell’applicazione in preventivo
per favore consideraci così perché l’ infinito
Proverò a definire la follia
in termini di oggi come la quantità di domanda
che viene messo su team di ingegneri
per portare i problemi di oggi su oggi
problemi che stiamo iniziando ad avere
requisiti che possono avere un mix di
sistemi distribuiti che attenuano i tempi di fermo
sistemi di guasto della cella in tempo reale, ecc
questi sono problemi difficili da risolvere
per gli strumenti che abbiamo usato per
negli ultimi anni in cima a quello tuo
i sistemi devono essere veloci e anche loro devono
scala alla domanda sempre crescente come di più
del mondo viene acceso e mobile
il dispositivo sta diventando più veloce
interconnessioni ci saranno
più richiesta si applica alle tue applicazioni
che provengono da una domanda globale ora
la maggior parte come ho detto che stiamo usando
gli strumenti di ieri ma il modo in cui noi
raggiungere nuove idee come gli imprenditori
o manager o team o sviluppatori di parti
in generale, abbiamo preso come il più vecchio
problemi che era come faccio a costruire un
applicazione in esecuzione dinamica e abbiamo
tipo di proiettile giù per ottenere push Roku
giusto in modo che il problema è risolto è
iper ottimizzato e ora che il costo di
costruire quegli out è così nominale ora
i problemi che si sentivano
irraggiungibile prima sono ora problemi
sono alla nostra portata ma lo faremo
ho bisogno degli strumenti per costruirlo così
prima di entrare nella roba da elisir io
voglio fare un passo indietro di 30 anni e
parlare della tecnologia di base di
elisir ed è presto così per quelli di
tu che non hai familiarità con Erlang
era piuttosto una tecnologia che
è stato costruito da Ericsson sul
società di telecomunicazioni fuori dalla Svezia
era come la metà degli anni ottanta, quando io
è stato costruito una cosa è davvero 28 29
anni fa non esattamente intorno al 30 ma è così
era destinato a gestire globale
sistemi di telecomunicazione in modo che il alcuni dei
i requisiti sono quasi come
zero tempi morti quindi se ne hai uno
sistema di telecomunicazione in tutto il mondo si
non posso davvero affrontare i tempi di inattività che hai
per avere fallback devi avere fallito
forme devi avere sistemi che possono
monitorare altri sistemi per garantire che
saranno rimbalzati correttamente te
avere un codice di caricamento a caldo, quindi pensa al tuo
telefono giusto quando è l’ultima volta che tu
ricevuto un aggiornamento dal tuo provider
dicendo che stiamo prendendo in giro la rete
un aggiornamento sai che non accade così
in Erlang puoi effettivamente avere il
sistema in produzione e puoi spingere
il codice si disattiva senza prendere il
server di produzione verso il basso e lo farà
assorbire questi delta di codice e incorporarli
loro nel runtime che è attualmente
vivono in produzione questi sono davvero
incredibile e gentile
si sentono come tecnologie all’avanguardia
oggi che sono stati in giro per molto tempo
tempo quindi se questo è il caso, se lo sono
mentendo così fantastico allora perché non siamo noi
usando la nostra linea, voglio dire che c’è una coppia
diverse potenziali risposte a questo a
molti di loro sono basati sull’opinione ma questo
è mia opinione perché non stiamo usando il nostro
linea è solo in tasse, quindi voglio dire che lo è
contro uno dei motivi, ma Erlang a
il tempo era basato sulla sintassi del prologo
che ha un modo di descrivere secondo me
è come una frase come un simile
struttura di programmazione in cui ogni linea è
eliminato da una virgola l’affermazione è
finito con un periodo ma in un certo senso
è cresciuto nel tempo organicamente e così
qualcosa che dovrebbe sembrare semplice
sembra difficile per quelli che sono
usato per sintassi più moderne nella loro
lingue che ho imparato personalmente
Assemblatore C C ++ tramite Microsoft
assemblatore e poi saltò verso
Ruby e sta facendo JavaScript così io
non voglio pensare a quei passaggi che non ho
fare un passo indietro e tatticamente come se
Sto lavorando nel mio lavoro giornaliero che sto lavorando
con una lingua voglio usare qualcosa
che mi piace mi sembra un po ‘di a
cop-out Penso che alcune persone che forse
ho programmato per molto tempo
possono pensare come tutto ciò
questa è una ragione stupida, ma la prova
è lì e che Erlang ha raggiunto
adozione matematica
nonostante il suo incredibile potere nonostante come
bene le sue soluzioni applicate al
problemi attuali o fare con oggi in poi
il web e questo è il luogo in cui l’elisir ha avuto un
opportunità quindi questo è Joe Armstrong
questa è un’immagine molto più giovane di Jill
Armstrong così Joe dopo l’elisir un sottaceto
versione ma all’inizio nel suo inizio lui
sul suo blog personale ha scritto un link
in fondo comunque è solo un blog
post e lui hanno che sto andando a
controlla questa cosa elisir e una di
le citazioni in là ha riconosciuto il
questione sintattica del suo Langan
ciò che l’ elettricità porta in tavola qui
così ha detto citazione di quale elisir porta il
table è una superficie completamente diversa in
testo ispirato da Ruby, potresti
chiama un non-spaventoso
sintassi del codice plum e caricato extra
goodies così elisir un po ‘di
la storia dell’elisir è che è stata creata
dal nome di un programmatore è Jose a Bellini
e lo era fino a circa due anni fa
da qualche parte lì intorno sul Rubino e
rails core team è venuto a imparare Ruby
attraversato il nucleo centrale delle rotaie era
probabilmente uno dei migliori sviluppatori su
la squadra principale ma mentre stava lavorando
su binari ha visto molti problemi
che il team di base dei binari stava cercando di farlo
risolvere
specialmente intorno alla concorrenza e come
difficile era risolvere questi problemi
con Ruby come il linguaggio che erano
limitato a così non sto cercando di parlare
giù a Ruby a tutti i rubini è fantastico
lingua mi hanno dato una carriera II era
non fare nulla dopo il college e
poi sono entrato in Ruby e ne avevo circa dieci
carriera di anno lavorativo in Ruby così sono
in particolare i binari di cui sono molto grato
per quella tecnologia ma tu conosci noi
non posso usare le stesse tecnologie per sempre
e come ho detto prima come i problemi
diventare più complesso
faremo meglio a risolverli così
tipo di ricerca su come meglio
lui può risolvere questi problemi di concorrenza
dentro le rotaie
josée è tornato a leggere molto
documenti a cui ha sempre avuto interesse
Erlang e lui hanno deciso di sapere Oh cazzate
sto andando a provare a scrivere una sintassi su
in cima alla macchina virtuale di Erlang
il primo passaggio era un po ‘di un
applicazione orientata agli oggetti mi dispiace
sintassi orientata agli oggetti di una compilazione a
il codice byte funzionale Erlang quello
non ha funzionato , quindi ha eseguito il backup e ha detto
come look devo provare a creare un
tutta una nuova lingua o posso solo tipo di
tenere questo come zucchero leggero sopra
della sua linea e questo è dove lui davvero
trovato un buon posto per eccellere con l’elisir
così
l’elisir stesso è lo sai che è un
linguaggio ma sai che è davvero
un linguaggio di livello superficiale che non funziona
molto da solo oltre una volta compilato
la sua linea consente l’ erlang virtuale
nazione per gestire tutte quelle cose così quando
lo si confronta con altri linguaggi come
Scala o altro come la JVM ha un tutto
un mucchio di lingue che funzionano su un virtuale
la macchina Lister è probabilmente meno coinvolta
con i dadi e bulloni sotto il cofano
allora alcune di quelle altre lingue lo sono
elisir probabilmente parte più complessa di
il codice sorgente è in realtà un parser e
tokenizer una volta passato che un sacco
del linguaggio stesso è in realtà
scritto in una leccata, signore, quindi se lo facessi
controlla l’elixir github repo
vedrei penso che sia qualcosa come 80
a nord dell’80% del repository attuale
un elisir stesso dichiarazioni così semplici
che potresti essere considerato come
parole chiave del compilatore come se fossero dichiarazioni
in realtà solo il codice di elisir che sei tu
puoi scrivere la tua dichiarazione se attraverso
un sistema macro che parlerò
circa un po ‘più tardi, ma comunque in modo
vediamo cosa alcune cose
elisir ereditato dalla nostra linea così come se
c’è il 30 trapano testato in battaglia
La tecnologia, se siete qui come
chiedendo come sia una buona tecnologia
per la mia compagnia, così oggigiorno siamo una specie di
sopraffatto dal numero di nuovi
nuove strutture linguistiche stanno venendo fuori
quasi ogni giorno, come se sei
leggendo le notizie degli hacker , lo sai
scherzando come quello che è nuovo
Framework JavaScript questa settimana e noi
tipo di avere questo senso di ansia come
sai dovrei essere l’ ultimo e
la cosa più bella tutto il tempo che penso di essere
una prospettiva di assunzione a volte quello può
essere più facile perché alla gente piace lavorare
con e armeggiare con la cosa più nuova
ma chiunque sia stato un manager in un
società di tecnologia per qualsiasi periodo di tempo
potrei dirti che potrebbe esserci
più facile assumere quando quella persona se ne va
la tua azienda intendo il debito tecnico
che ti lasci alle spalle è molto molto
costoso così io nella mia carriera tendevo a
effettivamente guardati indietro e prova a guardare
cose che hanno
lavorare dal punto di vista della tecnologia come può
ne sfruttiamo il futuro e il nostro
link a me ha molto senso qui così
non è come una nuova lingua non provata
che stiamo assumendo questo significato
questo è il rischio nella nostra organizzazione
qualcosa che viene utilizzato nel nostro
scala globale di miliardi di dollari
aziende in questo momento quando si tratta di
gestire i sistemi distribuiti c’è a
libreria all’interno quindi ho effettivamente il grassetto
James River c’è una biblioteca all’interno
Erlang ha chiamato il gem server e vedremo
esempi di codice su come è facile scrivere
un server gen come è facile lavorare con
fare asincrono e simultaneo
calcolando possiamo ottenere auto-guarigione
sistemi attraverso i supervisori, quindi cosa faccio
significa per auto-guarigione una sensazione di vibrazione
il sistema è quello che riconosce quando
qualcosa va storto e ci rimette
in un buono stato e il supervisore
il modello all’interno di Erlang è molto semplice
idea che finisce per essere incredibilmente
potente e se hai fatto qualsiasi tipo di
programmare dove devi
prevedere come può andare male il sistema e
hanno a che fare fondamentalmente un sacco di errori
memorizzazione nella cache e se dichiarazioni o caso
affermazioni penso che il supervisore
lo schema aprirà gli occhi per
sei basato su un semplice principio
che raggiungerò su quelle inondazioni e questo
posso sentirmi subito domani
richieste e infine un bel tipo di
la cosa sintattica è la corrispondenza del modello
che mostrerò così elisir nucleare così
quelle cose visive che tutte quelle
le cose della nostra posa sono ciò che elisir
eredita e queste sono le cose che
l’elisir aggiunge sopra di esso in modo che aggiunga a
pulire la sintassi familiare se hai lavorato
in Python se hai lavorato in Ruby if
hai lavorato in c-sharp c’è tutto
diversi aspetti di quelle lingue
che Joe ha uno sguardo così ha guardato il
tipo di paesaggio ha detto che va bene
Mi piace molto la sintassi di Ruby, ma c’è
alcune cose che sono sbagliato con esso
alcune cose che non avrei fatto
Mi ha preso tutte le cose migliori che
pensava fossero le cose migliori da
lingue diverse e li ha portati
in una conferenza per la sintassi come amatoriale
sistema di utensili
quindi per un linguaggio che ha appena colpito 1,0 pollici
l’anno scorso e mezzo o forse più vicino
per anni a questo punto, vale a dire lanciato con
uno strumento di esecuzione di attività chiamato è quello
chiamato mix it mix introduce il debugging
strumenti strumenti di documentazione strumenti di pelatura
installazione e dipendenza delle dipendenze
strumenti di risoluzione che generano tutti gli strumenti
queste cose sono già integrate
lingua questa è in una libreria separata
che devi portare qui è solo
qualcosa che come parte del nucleo
lingue fatto parte di esso gruppo incorporato
i test di nuovo attraverso il linguaggio sono cresciuti
come si chiama X unit meta
programmando così meta programmazione per te
e potrebbe essere una lingua diversa
considerato giusto programmazione dinamica
come faccio a dichiarare una classe
dinamicamente o come definisco un metodo
meta-programmazione dinamica ed elisir
è in realtà molto più profondo di così
quindi in realtà cerca di eliminare il
idea di un’applicazione dinamica come il codice
creazione e porta in questa idea che
quello che stai generando è solo essere
generato in fase di costruzione, quindi mi sono dimenticato di farlo
menzionare l’elisir è un linguaggio compilato
Non un linguaggio cattivo ha detto che è in un
linguaggio di tipo runtime
quindi durante il tempo di compilazione i macro che
stai facendo un programma migliore con bene
effettivamente visualizzare la pila in bytecode
e puoi fare l’estensione della lingua
caratteristiche a questo punto così quando ero
misurare la dichiarazione e le cose
come prima, tutto ciò è stato fatto
attraverso il sistema macro il meta
sistema di programmazione in elisir integrato
la documentazione è la documentazione è a
di prima classe dei cittadini all’interno elisir in
Infatti non è solo la documentazione stessa
ma c’è questo concetto chiamato doc
test che non sono riuscito ad aggiungere al mio
diapositive ma i test doc verranno effettivamente instradati
ti permettono di scrivere una piccola piccola unità
prova nella tua documentazione e così via
che quando eseguirai la tua suite di test lo farai
esegui anche i doc-test per assicurarti che
la tua documentazione sta effettivamente mostrando
il codice di lavoro corretto che è veramente
importante così Joe che vogliono essere sicuri
quella documentazione lo sapevi
qualcosa che era veramente
prima di tutto la mente di Alicia
tubi di sviluppo che è un altro
zucchero sintattico e limatura Phoenix che
Non arriverò a oggi ma Phoenix è un
framework web che è probabilmente se tu
ho ascoltato una conferenza che probabilmente è la
motivo per cui hai sentito parlare di elisir così
diamo un’occhiata al pattern matching in questo modo
è una semplice affermazione otto uguale a uno
ma dobbiamo considerarlo in a
conferenza non stiamo facendo ciò che è stato fatto in
altre lingue quindi in altre lingue
starai guardando questo sta dicendo questo
è un incarico ora guarda signore non lo è
un incarico può sentirsi come un
assegnazione perché dopo aver fatto
questo la variabile ha il valore di uno
quello che stai dicendo è che a è uguale a
uno quindi devi guardarlo come un
equazione il lato sinistro sulla destra
lato della mano dell’operatore dell’equazione
perché quello che puoi fare è anche quello
dopo che hai detto che è uguale a te
basta dire che uno è uguale a un entrambi
queste sono affermazioni valide ma solo
dopo aver fatto il primo così
questa è la base della corrispondenza del modello
stai dicendo che alcune variabili sono
uguale a qualche valore questo è anche un valido
dichiarazione quindi questi non sono utenti di array
elenca non c’è concetto di array in a
conferenza ma le liste hanno per lo più lo stesso
scopo c’è un altro tipo chiamato a
tupla che può anche agire probabilmente di più
simile in modo simile a un elenco da a a
array ma comunque in questo caso intendo
questi sono esattamente gli stessi valori giusti
questi hanno l’ uguaglianza puoi andare al
elixir IEX che è il tipo di repple
per una conferenza e la digiti in e
sarebbe una vera affermazione, quindi puoi
fai questo ciò che sto dicendo ora è che a
elencare con una variabile a in è uguale a
una lista con il verbo con un valore di 1
il che significa che a è finito è
pari al valore di 1 per cui se dovessi
scartare una variabile dall’elenco il
il valore di a sarebbe lo sai
una lista una lista rapida ma in questo caso
erano gli abbinamenti del modello o stiamo dicendo
quello basato sul modello il giusto
lato della mano abbiamo modello una mano sinistra
lato e lo abbina ma stiamo dicendo
che questa variabile corrisponde al
valore particolare che annoda quel modello
le partite sul lato destro che otteniamo
più complesso quindi ecco un qui è un due
lista dimensionale e ovviamente tutto il
i valori erano in grado di catturare quelli e
finalmente possiamo farti sapere che vai
fine e qualsiasi gap in modo che possiamo dire che il
il terzo elemento qui è anche un elenco e
se il terzo elemento sulla mano destra
il lato è anche una lista che abbiamo correttamente
pattern match su questo e noi catturiamo
il valore dentro così ciò che finisce
fare è che questo tipo di primer sia giusto
qui ti preparerà per la scrittura
funziona con un elisir così tipicamente
quando sei solo in altre lingue
arrivare a scrivere come uno in funzione
definizione ce ne sono molte altre
lingue che puoi scrivere multiple
definizioni di funzioni che conosci in base a
l’arità dei tuoi argomenti ma in a
conferenza puoi scrivere più funzioni
definizioni con la stessa arità ma hanno
così diversi modelli all’interno di quella zona
qui ho dichiarato due funzioni foo e
metto i valori direttamente dentro
argomenti di funzione e questo è
sintassi completamente valida se chiamo foo
e passo il numero due ad esso è
andando a chiamare la seconda funzione foo
perché guarda i valori lì e
si accontenta solo che dice okay questo
il modello corrisponde a questi valori
corrisponde a modello se dovessi avere un’influenza
con solo una variabile con nome al suo interno
quindi basato sull’ordine che è
definito in esso corrisponderà così tipo di a
prima vinci quindi se dovessi avere l’influenza
e poi barrare sopra quello blu
sarebbe un matcher avido e che
uno voleva sempre solo il
Ordina quello che cerchi ma se lo metto
infine, se passassi in blu, lo farei
passare a quello e quindi la variabile
nella discussione sarebbe
avrebbe quel valore sembra che tu sia intelligente
abbastanza che se si dovesse mettere il
matcher avido
sopra una funzione che altrimenti dovrebbe
la corrispondenza ti avviserà quando compili
e dire che questa funzione su questa linea
corrisponderà sempre e quindi funzionerà XYZ
non può mai essere non può mai essere abbinato fammi
backup per un secondo, quindi questo modello
finisce per essere davvero molto potente
perché quello che fa veramente è un po ‘
rompe la logica della ramificazione proprio così
potrebbe avere funzioni che hai scritto
i nostri metodi che hai scritto in altri
lingue in cui siamo passati nel
funzione ora ne hai alcuni come veramente
cattiva se dichiarazione in là per tipo di
sai rompere i condizionali o
potrebbe essere necessario sacrificare il vostro
denominazione delle funzioni creando fondamentalmente a
un sacco di nomi di funzioni diverse che
sai forse le cose sono difficili e
linguaggi di programmazione che cosa finisce
volere che tu faccia non è così tanto
offuscare la logica condizionale ma
almeno ti permette di dare un pulitore
modello per avere ramificazione nel tuo
codice e avere funzioni specializzate per
gestire le cose
i tubi ti permettono di ripulire pasticci come
questo quindi sono molto colpevole di questo e dell’altro
lingue che potresti provare a ripulire a
un po ‘facendo qualcosa di simile
quindi prendi la funzione più interna
assegnato a una variabile e tu tieni
passandolo giù e giù e giù e
giù bene questa è un’altra caratteristica che
anima elettrica quindi è piping e la strada
funziona che prende il valore
sei piping e lo inietterà come
il primo argomento nel
la funzione corrispondente significa no
quindi se conosci il risultato della cattiva presa
il valore del mondo ciao viene convogliato
il primo argomento da escludere e il risultato
di bar viene convogliato nel primo
argomento di foo
il modello che inizia alla grande per te
il tuo nel tuo codice di elisir è quello
inizi a scrivere davvero per
la componibilità è così giusta per te
le funzioni finiscono per corrispondere a questo
semplice idea che il primo argomento
dovrebbe essere quello di effettuare
per portare valore in effetti elixir avvolge a
sacco dell’API di Erlang e riscrive
l’argomento ordine per cercare di garantire che
il valore primario che viene passato è
sempre il primo argomento da consentire
funzione facile inizia sì un sacco di per
funzione facile piping la scalabilità così
quello era tutto sintassi quelle belle cose e
c’è una sintassi molto più interessante
insegno ma sono limitate in tempo la vostra
lunghezza VM noto anche come il raggio che faccio
non ricordare ma sta al
momento in cui l’Erlang VM è quasi un
sistema operativo su se stesso il suo primario
scopo è quello di monitorare e programmare il suo
i propri processi così all’interno e se
sei confuso su come cambiare o
L’elisir di Lang me lo faccia sapere e io lo farò
okay spiegami un po ‘di più ma di nuovo
Erlang è il sistema di base di
lezione di elisir dipende dal nostro
lunghezza e così tanto di questo tipo di
roba di basso livello sono le nostre caratteristiche del nostro
la vita ma un docente ottiene tutto così
dentro nella nostra lunghezza hai l’idea
che si tratta di un linguaggio molto concomitante così
puoi creare molto piccolo ed economico
processi molto facilmente e tutti quelli
i processi sono monitorati e programmati da
l’Erlang VM così come lo è
il tuo sistema operativo controlla e
programma i processi del sistema operativo o
Lang VM controlla e pianifica da solo
processi così farà in modo che quando
questi processi muoiono che il giusto errore
il codice viene segnalato se i processi
sono una specie di consumare un sacco di risorse
probabilmente li sta distribuendo all’interno
il sistema come ha detto così è
contribuendo con loro può effettivamente
distribuirli su tutta la CPU disponibile
core questo è un enorme guadagno in termini di prestazioni se
hai qualcosa che è abbastanza CPU
intensivo e succede automaticamente
Quindi, fintanto che si sta eseguendo il vostro
applicazione in modo concorrente e
utilizzando i processi quindi tutti i processi
otterrà il costo di Shoojit essere disponibile
a voi cavi per il PM di Erlang
quindi una delle implementazioni più popolari
obiettivi in ​​generale in questo momento è Roku e
tutti si stanno chiedendo se il punto è
ancora una specie di difficile risposta da dare
noi il dritto qualcosa ha difficoltà a
risposta diretta a un elisir il problema
essere risolto ma non abbiamo un
storia di distribuzione impressionante ancora non c’è
quelli decenti ma non quelli fantastici e così
il motivo è che puoi ottenere
spingere Roku
ma Roku non è un buon obiettivo di schieramento
per una leccata signore e la ragione per quello
è perché Heroku divide le tue CPU tu
puoi pagare per il sistema dedicato che conosci
dove otterrai un multi-core
Box Roku ma poi si sta pagando un sacco di
soldi per me ora penso che sia
meglio andare con come un Rackspace o un
Nota LED o qualcosa del genere così
si ottiene quelli lavoro corso dedicato ad un
un costo migliore basta affrontare il
mal di testa per l’implementazione per ora così bello
è che i processi di Erlang sono
incredibilmente economico rispetto alle operazioni
e processi così ogni processo è a
un po ‘più di un kilobyte, quindi puoi
girare su tonnellate di loro è stato un molto
subacqueo molto affascinante molto rapidamente e
per di più ogni processo porta il suo
proprio garbage collector
quindi ciò che dipende dal significato per te è
che in altre lingue dove hai un
singolo thread il nostro thread principale e il
la raccolta dei rifiuti finisce per accadere
potrebbe essere un segno di sonno che potresti essere un
netturbino generazionale ma in
ogni evento deve ancora fermare il mondo
e fa il suo lavoro mentre si sta raccogliendo
tutta la spazzatura ora se ne prendi un’altra
linguaggio con un centro di oggetti e
rispetto ad una letteratura di Erlanger
applicazione con lo stesso numero di
oggetti questi oggetti possono essere distribuiti
attraverso più processi e se tu
processo viene eseguito contemporaneamente e ha il suo
proprio netturbino quindi la superficie
area in cui è effettivamente supposto
per ripulire la propria spazzatura è molto
molto piccolo in modo che la raccolta dei rifiuti
processo va molto molto veloce in cima
che quei processi sono lì
non sono attualmente garbage collection sono
ancora in esecuzione quindi questo è dove Erlang
ne prende un sacco
da perché non è molto le sue strade principali
non essere bloccato da alcuna spazzatura
raccolta di un unico garbage collector
piuttosto così tanto il processo funziona
processo tipo di abilità all’interno di Erlang
è stato evidenziato attraverso il lavoro che dipendente
del nostro Chris McCord che ha creato il
La struttura di Phoenix stava facendo con
WebSockets a Phoenix quindi era in giro
come all’inizio 1,00 Phoenix qualcuno è venuto
in uno dei canali o un IRC e
ho detto hey ho provato a scalare fino a 60.000
connessioni simultanee e iniziato gentile
di bombardare su di me
quindi Chris ha iniziato a curiosare e
dopo una settimana ha ottenuto fino a due milioni
connessioni simultanee e a quel punto
Ho pensato che questo era abbastanza buono che è il
una scatola che è una scatola ha una tonnellata di
memoria ma è una scatola di Rackspace quella
è stato in grado di scalare fino a due milioni
connessioni concorrenti non lo sono
solo collegamenti fittizi seduti lì
non facendo niente in realtà
simulare vere conversazioni reali
messaggio passione tra di loro il
latenza per la distribuzione di un messaggio
attraverso tutti i due milioni di socket web a
quel punto è stato fortunato due secondi così tu
puoi immaginare di sapere in tempo reale
sistema di comunicazione che sta trattando
a molte persone piace pensare
rilassato come non riesco a immaginare quanto
il lasso di soldi sta pagando alla potenza del server
adesso perché ne conosco altri
la tecnologia di base è PHP , non so se
questo ulteriore aspetto delle cose in tempo reale
ma so che fa parte del loro stack
ma vorrei solo essere intendo che non lo era
sorprendendo che stessero usando Erlang
in qualche modo, ma non so cosa
se non lo fossero, posso immaginare di poterlo fare
immagina solo una cosa del genere
potrebbe davvero ridurre il loro costo se
stai facendo tutto ciò che è un
sistema di messaggistica in tempo reale
immediatamente può iniziare a vedere il
benefici di questo dalla nostra attività
prospettiva e come si può davvero portare
il vostro tempo grande testa quindi cerchiamo di
guarda un case study specifico su uno
società che è stata in grado di avere enormi
risparmio di infrastrutture passando da
una lingua oltre all’elisir
e un dolce rapporto così hanno avuto un
gap reale di otto anni e qui ci sono
ecco l’architettura di quel vero tocco
per chi non ha familiarità con
rapporto di candeggina è un sito Web di notizie sportive
così fanno un sacco di rapporti che hanno
un sacco di video quando li ricordo
mi piace anche un sacco di notifiche push
giusto così una grande cosa nelle notizie sportive
il mondo è chi spinge lo sport chi è
spinge prima le notizie sportive
prima di ciò che erba, se hai avuto
a CBS Sports e ESPN e Yahoo Sports
e qualsiasi altra applicazione sul telefono
hai un rapporto di candeggina lì
prendere a volte fino a pochi minuti come
se si candeggina segnala persona inserisce
il botto rapporto ci sono voluti pochi minuti
per te per ricevere quella spinta
notifica ti dirò di cosa si trattava
poi hanno avuto centocinquanta
otto di noi in casi che supportano questo
applicazione anche a questo punto loro
i server erano pieni zeppi di richieste
ci sono molte volte in cui erano
fumando troppe richieste e loro possono
ottenere risposte fuori di loro e questo sei tu
so ovviamente il grosso problema lì
i team di ingegneri erano abbastanza grandi e
supportare ciascuna delle loro app ciascuna
proprie app individuali con la nostra app principale
il piccolo tocco di otto anni e così via
c’è un sacco di spese generali per il personale
ogni applicazione e avevano più
strategie di caching complesse le virate
sai che non stai mettendo un problema facile
per risolvere e ottenere qualcosa sul posto
quello che funziona bene può essere costoso
a volte così dopo questo è dopo
si sono trasferiti alle elezioni o alla fenice
avevano un quinto di un numero di AWS
istanze per una delle loro applicazioni
sono passati da venti server fino a
due e l’unica ragione per cui avevano due è
perché il secondo era lì per
la ridondanza ora stanno facendo la media su
tempi di risposta da dieci a trenta millisecondi
il picco medio più grande è il più grande
circa 400 millisecondi e ne hanno uno
picco anomalo di 800 millisecondi questi
i numeri sono buoni annunci di sei mesi fa
quindi non so se sono cambiati molto
ma quali rapporti sono stati carini
vocale nel loro elisir nel caso di Phoenix
studi quindi immagina che siano ancora pre
simile su alcuni di quello hanno il
un ingegnere per applicazione ora e noi
avremo tempo per capire perché è così
importante e come è possibile e
anche loro non fanno cache, quindi altri
esempi ti ho promesso la spinta
cosa notifica così quale rapporto è andato
da come tre minuti per entrare
spingere le notifiche verso il basso come all’interno
tre secondi quindi tutti loro
gli abbonati ricevono una notifica push
quasi immediatamente quando quando il
il giornalista pubblica effettivamente l’articolo
quindi il valore aziendale restituisce quale rapporto
per questo è che se sei in competizione
con altre applicazioni sul telefono di essere
il primo a pubblicare un articolo
sei tu per ottenere la spinta
notifica che stai calcolando tutto questo
altre applicazioni spingono le persone a spingersi dentro
la tua notifica push e per portarti
torna alla parte macellata in modo da poter iniziare
ottenere bulbi oculari sulle pubblicità quindi è molto
importante essere il primo lì così
guarda, signore, sai che l’hai portato, lo sai
valore commerciale significativo per loro
quasi immediatamente altri esempi e
questi sono più esempi di Erlang ma gentili
di dimostra la scalabilità quale DAP
è un esempio classico all’interno del nostro link per
quelli che potrebbero non avere familiarità con
WhatsApp è un sistema di messaggistica
giusto così hai il testo del telefono ma
è dappertutto su Internet
sono famosi perché Facebook ha comprato
loro penso che fosse Facebook ma lo erano
ma per un sacco di soldi, così hanno comprato
per come diciassette miliardi di dollari o
alcuni come loro e hanno avuto un
team di ingegneri di meno di venti
persone così erano in grado di svilupparsi
costruisci un gioco scalato a miliardi
di connessioni al minuto con un molto
piccola squadra relativamente e perché
sono in grado di costruirle in scala
così in alto si conosce la quantità di ritorno
hanno capito che quando sono stati comprati
fuori con un’età significativa un uccello è un
buon esempio ma open source
la loro applicazione online è un assegno
uno degli usi di Riot Games sta mentendo
eternamente per loro per i loro messaggi
sistema come League of Legends che è
Bene proprio qui dopo
okay, i drogati vanno bene
lavoro non avevi idea di quanto tempo mi ci è voluto
per arrivarci destra va bene
quindi questo è un semplice server gemma che conosci
quello che stiamo per fare è creare un
impilare in modo da puntare davvero sul mio puntatore
ma penserei che questo sia in realtà un
vero tipo di prima lezione completa
potrei averti mostrato, ma l’idea qui
è che abbiamo semplicemente un modulo modulo
solo un namespace quindi non abbiamo
classi non abbiamo oggetti per il
tutta la lezione non è orientata agli oggetti
linguaggio è una programmazione funzionale
linguaggio ma lo spazio dei nomi ci consente
per organizzare le nostre funzioni in questo modo
quindi non abbiamo questo lo sai
spazio monolitico neo quindi dobbiamo evitare
nome collisioni nomi di funzioni principali
evento enorme gen server ci permette di portare
in alcune funzionalità del server gen
modulo così ora otteniamo del codice iniettato
nel nostro modulo automaticamente e iniziare
collegamento ci consente di creare il nuovo processo
quindi in questo caso la nostra funzione di collegamento iniziale
sta chiamando un link di avvio di gen server
funzione il trattino basso nel modulo urlo
solo via di riferimento si va al college
sta per essere lo stato del modulo stack otago
lo stato di partenza del server gen così
in questo caso abbiamo intenzione di passare un
lista vuota questo sarà il nostro
stato iniziale e quindi opzioni lo faremo
ignora per ora quindi ci sono due funzioni
qui gestire chiamata chiamata maniglia cap halo
ci consente di chiamare un server gem
è una richiesta di blocco e quando tu
lanciato un gem server è fondamentalmente solo un
licenzia e dimentica di cercare la maniglia
chiama stiamo usando alcuni pattern matching
qui e lo diremo su a
richiesta pop puoi ignorare il secondo
argomento da per ora è sufficiente sapere che
tutto ciò che inizia con il trattino basso è
un argomento che viene ignorato dal
compilatore se hai un argomento che è
non sottolineando non usarlo si ottiene a
avvertimento dicendo che anche argomento inutilizzato
e poi solo intatto e c’è un modo
per noi di fare riferimento alle parti di una lista
quindi hai una testa, una coda e una testa
sarà un primo elemento e coda come
il resto della lista così in questo
caso se passassimo avessimo uno due tre
un albero sarebbe uno e poi il tè lo farebbe
essere due e tre dovrebbe essere un singolo
il valore del tè sarebbe una lista che pubblicherà
quindi stiamo spingendo nella lista a questo
punto e vogliamo che gli diamo il la
conosci la richiesta che stiamo spingendo
e poi gli diamo un valore che vogliamo
spingi sopra e poi T è lo stato e
quindi in fondo abbiamo una risposta nessuna risposta
piuttosto e fondamentalmente stiamo fingendo
la testa sopra alla on the stack quindi
il modo in cui finiamo per usarlo è che noi
possiamo chiamare il link di inizio che passiamo a quello
stato iniziale con una lista vuota e noi
tornare indietro questa risposta dice va bene e
questa è una specie di semantica con in Erlang
per cose che stanno andando bene a dire
Va bene si conosce alcune delle cose che
non andate bene potremmo avere un errore ma
il secondo argomento all’interno della tupla è
un secondo elemento è piuttosto il pozzo
simile a un pin operazione questo è
sarà il nostro riferimento a questo
dato processo così in questo caso siamo
andando a virare al server gem così cast
di nuovo è un fuoco e dimentichiamo così passiamo a
il maiale perché abbiamo bisogno che unico
identificativo al nostro server gem
processo e stiamo andando a fare la spinta
faremo un saluto sul
impilare e poi finalmente facciamo un
richiesta di blocco perché stiamo aspettando
risposta dal server e chiamiamo
un maiale che passa perché è necessario
fai riferimento al gem server e chiama pop
questo è gen server in un po ‘in a
poche parole si tratta di un sistema molto semplice che
ti permette di conoscere il tipo di astratto
dal sistema più complesso all’interno dell’elisir
ogni processo ha la sua casella di posta e tu
può fare messaggio anche riferimento ad altri
processi nei messaggi passati e questi
i messaggi possono essere processati
segnalazione elaborata in modo da poter costruire
qualcosa come gen server da solo
ma gen server ti dà davvero questo
bel tipo di strato astratto per trattare
con il messaggio che passa voi ragazzi pensate a
un po ‘ come un server web, così hai
il tuo server web ti ha insegnato a dargli un
richiesta e dà la tua risposta
così supervisori e
l’albero o il supervisore è rassegnato
l’albero lì, quindi guardiamo indietro al nostro
gem server per un minuto quindi diciamo noi
ha iniziato di nuovo e abbiamo fatto la spinta
nel bene che è grande, ma cosa succede se abbiamo
gli ho dato una richiesta con richiesta di qualcosa
che in precedenza non abbiamo trovato cosa
stiamo andando a finire per ottenere questo è
errore indietro e la cosa più importante
è l’ultima parola sulla prima frase
sta terminando così quando si verifica un errore
nel nostro processo il processo muore
fuori e questo ci porta in uno dei
più importanti aspetti e idee all’interno
Erlang che si chiama lascia morire e come
quelle cose o potresti sapere di andare
attraverso un sacco di problemi cercando di
capire come qui è diverso
modi in cui la mia trama può essere applicata alla mia applicazione
errore e dovrei provare a catturare
quegli errori e gestirli con grazia
ma in Erlang capiscono che c’è
conosci quasi permutazioni infinite
che questo può accadere quindi l’unico stato
puoi riportare la tua domanda a
quello che hai appena garantito di avere un buono
lo stato è quando l’hai iniziato inizialmente
quindi perché non lasciarlo solo morire e poi solo
riavvialo quindi sei tornato pulito
stato di nuovo così anche se proprio qui noi
può vederlo con il o il processo
anche se provo a chiamarlo il pit è
non definito ora il processo è andato è
non più disponibile quindi i supervisori
questo è un aspetto come il disegno di un bambino
ma questo è stato fatto da un adulto Hey the
sito web appreso un po ‘di calma di Erlang
è un po ‘come lo sai divertente facciamolo
dì per aver imparato la nostra linea ma l’idea
ecco che hai tutto il nostro verde
i supervisori e tutti gli azzurri sono viola
e daltonico può dire la differenza
ma i nostri lavoratori così l’idea si dispone di un
supervisore che sta guardando gli altri
supervisori o guardando i lavoratori e quello
supervisore guarda altri supervisori e
lavoratori in modo da avere questa profondità infinita
trattare potenzialmente all’albero e quindi se
un lavoratore muore quindi i supervisori lo sono
guardando è notificato e il
supervisore può decidere ciò che vuole
fare con quel lavoratore vuole farlo
riavvia quel lavoratore vuole solo
tienilo morto o no
risalire l’albero ulteriormente se il tuo
Riesling un lavoratore lì diverso
strategie in cui è possibile riavviare il
operaio , riavviamo quel solo lavoratore
guardiamo tutti i fratelli lavoratori
e uccidere quelli e poi riavviare
tutto a cosa mettere tutto
dentro di te conoscono i processi dei fratelli
di nuovo in uno stato pulito , quindi questi sono tutti
diverse opzioni che hai per lavorare
con supervisori ed elisir lavoro così
ho dovuto metterlo nei giocattoli bene così
il supervisore definito sembra un po ‘
simile al server gemma quindi tu
supervisore abbiamo il link di partenza su
questa la differenza qui è questo init
la funzione viene chiamata dopo il
il supervisore inizia dopo il collegamento iniziale
così supervisore mi dispiace un certo collegamento ottiene
chiamato passa in questo stato che era il
ultimo argomento su questo e poi lo sono
creando questa lista chiamata bambini che
sono solo i processori per bambini supervisori
questo è il monitoraggio che ottieni questo lavoratore
funzione dal modulo supervisore
sopra e sto passando come il primo
argomento il nostro stack che in precedenza
definito e quindi sembra un po ‘
un altro hai davvero visto cosa sta succedendo
lì ma c’è la lista con due
argomenti in esso è il primo argomento
sta per essere lo Stato che ci riposiamo inizio
il nostro server della nostra palestra con il secondo
argomento è off le opzioni che abbiamo avuto
solo un valore predefinito e per il quale sei in lista
in precedenza la ragione di ciò è
perché il lavoratore inizia nel
contesto del supervisore ora non lo facciamo
ottenere l’ accesso al pin e quindi dobbiamo dare
è una specie di nome unico che possiamo
identificarlo in modo che possiamo fare riferimento
così in questo caso stiamo passando al
opzione del nome e la chiamiamo semplicemente mia
stack e poi chiamiamo supervisione possiamo noi
dargli la lista dei bambini e il
la strategia qui è one-to-one che puoi guardare
lassù c’è un po ‘di bene
documentazione su lezione su cosa tutti
le strategie significano bene quindi se dovessimo
avvia il nostro supervisore ora di nuovo sembra
simile a quando abbiamo iniziato la nostra gemma
server torniamo ai box non lo facciamo
ne hai davvero bisogno, se lo stai usando
all’interno di un altro sistema su cui puoi resistere
ad esso ma per gli scopi di questo siamo
non usare di nuovo comunque, quindi ora siamo
chiamare il gem server per chiamare il cast
quindi di nuovo lo stiamo facendo
un incendio se riceviamo richieste in palestra
server per inserire il valore del flusso su
lo stack ma invece di fare riferimento al
pit, stiamo andando a fare riferimento all’unicità
identificatore per il quale era il mio stack così tu
tornare indietro ok
e ora chiameremo Pater e
chiamato pop otteniamo che vicino è fantastico
ora chiameremo lo stesso
funzione che è venuto uno prima che
ha causato la morte e oh è morto, ma il
supervisore ci avvia oh credo di
in realtà ha avuto il tuo tocco e quello
si ha la morte sull’altro schermo
scusa oh ora devo passare attraverso tutti i miei
passaggi di nuovo Va bene così questo è questo è quando
lo uccidiamo proprio qui e ma questa volta
invece quello dovrebbe essere dispiaciuto che sia il
la sintassi è solo un ragazzino che dovrebbe
dì il mio stack che dovrebbe anche dire il mio
studiare è un errore di complicazione quindi
appena sopra il mio stack, quello che troviamo è
che il supervisore ha visto che il lavoratore
morì e poi iniziò automaticamente
considerando che in precedenza se si richiama indietro
le diapositive precedenti che quando ho provato a
gatto quando ho provato a spingere un nuovo elemento su
lo stack per il gem server non è più
in grado di farlo perché non c’è più
disponibile il processo era morto fuori il
la differenza qui però è una cosa da fare
essere consapevoli è che si riavvierà
con il suo stato precedente mi dispiace
con lo stato in cui il supervisore
è di trovarci ci sono strategie per
andare in giro e c’è il
concetto di un agente all’interno dell’elisir
fondamentalmente quando installi la tua gemma
server puoi averlo ma puoi spingere
tutto ciò che tutti quei valori in un agente
che vivono al di fuori del server gem e
allora quando i Jets moriranno mai, puoi esserlo
popolarlo con il tuo stato popolato
dall’agente okay, quindi questo
l’ultima parte è più basata sull’opinione e altro ancora
soggettivo che obiettivo ma è uno
la cosa che ho vissuto non la lascia
ti sei evoluto negli ultimi quattro anni e
qualcosa a cui ho pensato molto
e che tipo di impatto questo significa
team di ingegneri e la domanda I
posa sai che il linguaggio del pannello ti rende
felice quando sono entrato in Ruby per primo
il
tipo di inquilini principali di rubino era quello
il rubino ti rende felice, c’è una lingua
è stato scritto per farla finita con
questa idea che la fine qui doveva essere
lo schiavo del computer e tu
sapere che il computer dovrebbe fare il
lavora per noi
quindi abbiamo questo bello sai bello
guardando la lingua ma tu conosci come noi
indicato ha le sue posizioni così con
letteratura ho trovato che effettivamente ha preso
questo argomento un po ‘più lontano o a
un po ‘più lontano e la ragione di ciò è
conosci alcune delle cose che obiettano
programmazione orientata porta in olp e
ecco il tipo di hopi classico
struttura e tu sai questa idea che oh
sono solo oggetti e abbiamo
eredità e noi possiamo avere oggetti
ereditare da altri oggetti è così pulito
ha molto senso ma sai già
quante persone hanno visto questo in un libro e
poi un anno o due da ora questo è quello che
hanno davvero avuto sì qualcosa come
questo è assolutamente incubo
succede a tutti e questo perché
sai che P ti dà un sacco di corda e
questo è vero per qualsiasi lingua ed è
un po ‘ come il mio argomento contro
javascript in generale è che dà
troppa flessibilità e limiti
sono in realtà migliori c’è potere in
limitarti e cosa puoi fare
conosci uno di quelli che non conosco
sanno se andranno a vedere che, ma
l’ idea di base qui è che tu sai come
conosci i programmatori sai che siamo seduti
lì e noi sappiamo che abbiamo almeno
un’ora a noi stessi possiamo costruire
questo incredibile stato nella nostra testa
esattamente cosa sta succedendo e poi tu
sapere una volta che siamo interrotti non c’è più
giusto e così che lui che finisce per essere
il grande problema di object-oriented
il programma è stato così tu hai questi
oggetti che stanno trasportando lo stato intorno
non sono immediatamente accessibili ma
sepolto nella memoria da qualche parte mentre
la programmazione funzionale è proprio lì dentro
la tua faccia l’ idea di dati e dati
non hai un classico puro
linguaggio di programmazione funzionale
non dovresti essere in grado di accedere
qualsiasi cosa al di fuori del diverso
funzione che siete attualmente in ora
acceso signore sulla nostra linea viola questo a
un po ‘attraverso il suo passaggio dei messaggi di processo
quindi non è puro al 100% ma al suo interno
processo è completamente puro, penso di me
qualcuno mi ha corretto prima sul
messaggio che passa la cosa così qualcosa vuole
a me correggere su hanno completamente puro
il processo lo apprezzerei
ma tu conosci la lista di essere funzionale
linguaggio di programmazione questo ha un enorme
vantaggio non solo sulla tua capacità di
impara velocemente se sai che abbiamo preso
ingegneri di rotaie esistenti e abbiamo dato
loro danno loro l’elisir di programmazione
prenota come l’ atomica che viene pubblicata
da programmatori pragmatici, se lo sei
interessato alla conferenza, lo consiglio vivamente
che tu lo leggi la prima parte di esso
era di circa duecento pagine e
introdotto trasmettere idee di funzionale
programmare la sintassi entro una settimana
non è uno scherzo entro una settimana
rendere i contributi a una Phoenix
applicazione che non è per dire che loro
erano ingegneri di letteratura esperti all’interno
una settimana per non dire che avrebbero imparato
tutte le sfumature di distribuire
programmazione settimanale ma proprio quella
conosci l’ idea della programmazione funzionale
finisce per essere molto molto semplice e
molto molto facile da imparare il motivo
perché in parte piace la programmazione funzionale
forse ci vorrà un po ‘ per capire ora
come si sta vedendo un sacco di articoli su
programmazione funzionale dovuta in parte a
limitazioni della memoria, quindi non lo sei
passaggio di valori per riferimento all’interno
programmazione funzionale che stai passando
di passare tutto per valore e così via
che finisce per essere la copia della memoria
l’allocazione della memoria al giorno d’oggi è la memoria
abbastanza economico e quindi questo è meno di un
preoccupazione ma indietro quando ne avevi 16
megabyte di RAM sì, lo sapevi
quello che riguardava era difficile
in modo da sapere si poteva vedere il valore di
un linguaggio orientato agli oggetti che era
memoria mutante al volo, ma poi
oggi il valore è non c’è davvero
perché quello che inizia davvero non è così
ci va tutto bene comunque mi fermerò
roaming perché penso che sto ricevendo
vicino al tempo dirò solo di imparare
usa un po ‘di elisir è un linguaggio fantastico
e solo per
mettermi ancora ancora CEO di dottorato
con sede a Boston utilizziamo framework Phoenix
consulenza elisir e anche energia come
consulto e puoi trovarci al dr.
calmo quindi grazie mille il lik
protocollo di supporto per sir solo programmazione
nella struttura di classe quindi non ci sono
classi in elisir
ci sono moduli ma sono solo dei pilastri
cosa intendi per perfetto lavoro
già programmando un turbo quando tu
hai provato a scrivere una lezione
struttura e devi estenderlo e
in base alla corrispondenza del modello, quindi non c’è
un’idea di un non è davvero tanto
l’ereditarietà nell’elisir è più simile
le nostre estensioni di classe hai moduli
e puoi effettivamente avere quei moduli
per trovare funzioni di tempo compilato che
emetterà Erlang ASP e così quando tu
guarda che usiamo gen server c’è a
compilare la funzione del tempo all’interno del gen
modulo server che emetterà l’ASP
codice che viene iniettato nel modulo
che lo stai usando così è solo si
c’è un modo per riutilizzare il codice ma è
non è attraverso un non è attraverso a
più come l’ estensione classica della classe
stile ma è fatto in questo modo
che spinge tutto il lavoro per costruire
il tempo va bene, grazie a tutti e no
dimenticare di scrivere in app ha un grande
giorno

Please follow and like us: