Press "Enter" to skip to content

GOTO 2014 • Immutability: Putting The Dream Machine To Work • David Nolen


Va bene cominciamo quindi il mio discorso è
chiamato
immutabilità o mettere il sogno a
è la macchina su cui si basa questa conversazione
applicare l’immutabilità alle interfacce utente
queste idee non sono nuove sono state
applicato al disco un bel po ‘se si utilizza
git git usa strutture dati immutabili
e alberi immutabili sotto il cofano
i sistemi come ZFS la funzione duplicazione D è
sulla struttura di condivisione
Sono anche Dropbox utilizza questo trucco lascia
il motivo Dropbox e scala perché
hanno anche D duplicazione di file nel file
nuvole così, ma non penso che nessuno
pensato davvero per l’applicazione di questo
alla progettazione di programmi di interfaccia utente e
speriamo che questo discorso ti convincerà
che è una buona idea non è necessario
adottare questo commercio all’ingrosso, ma potrebbe esserci
problemi che incontri nel tuo
applicazioni dove potresti realizzare
dopo questo discorso l’ immutabilità potrebbe
essere uno strumento utile , quindi lavoro a fondo
setta Sono stato uno sviluppatore JavaScript
prima di quello per circa nove anni di lavoro
per lavorare per le startup ero al
New York Times per quattro ho lavorato su alcuni
cose divertenti come le elezioni del 2012, quindi a
sacco di JavaScript recente ho lasciato a
unire le forze con cognate e cogniti
la tecnologia è una società che fa un bel po ‘
di consulenza con aziende Fortune 500
usando il loro particolare stack succede
essere chiusura di chiusura come open source
linguaggio di programmazione è un Lisp è
sottolinea l’immutabilità che manteniamo anche
script di chiusura quando sono al comando
sviluppatore ho lavorato su di esso per 3
anni ormai che è un dialetto di chiusura
che compila in JavaScript abbiamo anche
un prodotto chiamato atomico che è un aratro
applica lo stesso tipo di idee a
database quindi è un database relazionale
e sono ottimizzato per il cloud
che utilizza strutture dati immutabili su
disco ma non ho intenzione di parlare troppo
molto sulla chiusura di chiusura script o des
Tomic oggi mi piacerebbe parlare di questo
l’ idea più ampia perché penso che abbia
implicazioni molto più ampie di qualsiasi altra cosa
lingua specifica se non hai letto
questo libro e sei coinvolto nell’interfaccia utente
programmazione penso che dovresti probabilmente
corri al negozio di libri e prova a trovarlo
fuori stampa purtroppo non è in
stampare più ma si può ottenere uno economico
ritorno su Amazon questo è fantastico
libro che ho incontrato perché Alan è venuto
accennato sul suo mailing list del
fondamenti del nuovo calcolo lui
suggerito perché la gente stava chiedendo
come ha fatto il tipo di stato attuale di
programmazione orientata agli oggetti e
le interfacce utente diventano e questo è un
ottimo tipo di storia di quel tempo
è una specie di centro attorno a questo
l’uomo interessante JCR Licklider non lo era
un programmatore di computer era in realtà un
psicologo e chi ritiene che
i fattori umani in psicologia giocherebbero a
ruolo enorme ha scritto due testi molto famosi
uno era chiamato l’uomo computer
simbiosi così indietro quando i computer erano
principalmente principalmente utilizzato solo da grandi
corporazioni e dai governi per
facendoti sapere le simulazioni di armi lui
immaginato un futuro in cui le persone lo farebbero
hanno il loro computer e tutto il
i computer sarebbero collegati in rete ed è stato
la sua visione e il suo tipo di incanalamento di
soldi del governo soldi del governo degli Stati Uniti a
i posti giusti che permettevano l’ordinamento
di rivoluzione informatica per accadere così se
hai mai sentito parlare di Douglas Engelbart
madre di tutte le demo in cui ha dimostrato il
primo word processor il primo video
conferenza il mouse tutto questo era
perché JCR Licklider credeva in
Douglas Engelbart e pensò che lui
avevo una forte idea del futuro così
Lickliter 54 anni fa ha scritto questo libro
ups o documenti cartacei molto brevi che ho chiamato
il figlio del computer uomo pregiudica dove lui
delinea tutte le cose che pensa
ciò deve accadere per l’interattivo
la rivoluzione informatica per aver luogo è
in realtà abbastanza interessante ma l’ho letto
come due o tre mesi fa e
qualcosa mi ha davvero sorpreso che io
pensare è davvero rilevante oggi
in realtà predice il mio discorso 50
anni 54 anni prima che lo facessi
in particolare sta parlando di come
dati di struttura in applicazione e lui
sottolinea che la memoria dell’albero
Struttura inventato da Ed Fredkin sarebbe
essere molto utile e in fondo è così
è una struttura dati ad albero molto semplice
in cui la struttura è condivisa e
vedremo che questo è un grande effetto
questo discorso sarà davvero abbastanza
un po ‘sulle strutture dati e poi
vedremo queste strutture di dati dentro
azione
verso la fine del discorso così lui ma lui
preso soldi e dato soldi a persone come
John McCarthy John McCarthy più o meno
inventato la codifica dal vivo proprio così
prima di reppare Lisp, ha inventato la spazzatura
collezione
conosci la programmazione funzionale
programmazione con funzioni ricorsive così
è molto influente alla sua destra
Ed Fredkin che era una specie di college
dropout è diventato un pilota da combattimento e poi
era una specie di hacker hardware che era
il ragazzo che potrebbe programmare questi molto
i primi computer a fare cose impossibili
in modo che potessero crearli prima
prototipi interattivi ma lui ha inventato
l’albero qualche volta tu sarai udito
chiamato prova solo a distinguere tra
albero ma la parola TR cioè M viene da
recupero e quindi dice il modo corretto
pronunciare è albero così lo farò
continuare ad usare questo anche Lickliter
creato la cultura in cui il denaro potrebbe
essere finanziato verso luoghi come Xerox PARC
questo è Alan Kay, lo sai a volte
anni ’70 un parco di fronte a un alto
probabilmente sta facendo una chiacchierata
nonno della forma moderna dell’oggetto
programmazione come lo conosciamo in quel giro
1979 hanno inventato in pratica sai
interfacce utente dinamiche e sai che sono venute con
queste idee model-view-controller
non è cambiato molto in realtà
carica una moderna conversazione breve e tu
può caricare il browser classe il sistema
browser che mostra tutte le classi che sono
funzionando al runtime e troverete il
parole Model View controller 35 anni fa
A lungo, il concetto era davvero venuto
su una sorta di inventato da un norvegese
programmatore informatico presso RIT Varin skog
ed è stato un po ‘ modificato da Adelle
Goldberg e altri e questo è stato approvato
intorno e questo più o meno ha modellato
la nostra idea di programmazione dell’interfaccia utente per oggi
longshadow Voglio dire che le persone sono ancora
scrivendo framework MVC in competizione
ogni lingua quindi in modo molto astratto
livello voglio dire penso che questo sia questo
vero perché penso che MVC sia molto valido
avete una sorta di modello di dati che
rappresenta il dominio che l’utente
ti interessa sapere che devi presentare il
gli utenti non possono vedere le strutture dati giuste
persino i programmatori riescono a malapena a vedere i dati
strutture quindi è necessario avere un po ‘
visualizzazione e questa è la vista e
spesso dove le cose si fanno estremamente
complicato è il controller che è
come coordinate ciò che l’utente vede
sul dominio che vogliono
manipolare in cui sei rappresentato
la macchina ma vorrei discutere
le implementazioni lasciano molto a desiderare
quindi questo è il più direi
parte controversa del mio discorso e questo è
perché oggi la NBC lo sai
progettato principalmente intorno a stateful
oggetti oggetto e programmazione sorta di
sai che hai questa nozione
incapsulare stato e oggetti ma anche
nel catturare lo stato di incapsulamento di Clapp
e gli oggetti hanno problemi molto seri se
hai fatto qualsiasi multi-thread
programmazione sei ben consapevole di questo così
questa è la struttura dei dati parte te
potrebbe essere come una vera struttura di dati
parla ma spero di poterlo fare
interessante non perché dubito di molti
hai visto come i dati persistenti
le strutture funzionano così non sono queste diapositive
la mia sono da questo eccellente
persona Zach Allen è un facilitatore a
questa cosa si chiama scuola hacker che è
i programmatori si ritirano come la ritirata di uno scrittore
per i programmatori di New York, quindi sto solo andando
riutilizzare queste diapositive perché sono
eccellente così così anche se sei del
non è orientato agli oggetti
è anche se si vuole continuare a farlo
lato dello stile di programmazione al fine di
capire perché i dati persistenti
esistono strutture devi almeno
calarsi nei panni di un funzionale
programmatore se solo brevemente così siamo
andando a farlo in modo funzionale
programmatori a cui si preoccupano mutabili
oggetti oggetti immutabili non mutabili
oggetti dispiaciuti valori immutabili no
oggetti mutabili e poi non lo fai
davvero cambiare le cose giusto che tu non lo faccia
cambia le cose se vuoi aggiornare a
struttura dei dati è semplicemente restituire a
uno nuovo lasciando quello originale
non modificato
così tradizionalmente nelle persone hanno fatto
questo con copy-on-write sto andando a
dimostrare come puoi farlo
in modo efficiente e vengono chiamati
persistente che è una specie di completamento
di turni la maggior parte di noi quando sentiamo
persistente pensiamo che stai per mettere
su disco o qualcosa ma l’unico
in questo in questo contesto sta solo dicendo
che non stai distruggendo il precedente
valore e sono veloci e questo è
sviluppo estremamente nuovo e all’interno del
decennio scorso e parleremo del
sfondo per quello ma prima che otteniamo
in questo parliamo del
fondamentalmente il più semplice persistente
struttura puoi scrivere quale ragazzi
già sapete che si chiama il
elenco collegato in modo da poter immaginare una lista
con quattro elementi e ne hai alcuni
testa e ogni cella punta al successivo
uno è qualcosa in cui impari
CS 101 e la cosa bella di questo è
che in una sola volta puoi sapere
contro sai costruire una nuova lista di
solo tu sai puoi sapere allocare un
cella e impostando il puntatore sul prossimo
coda ciò che è bello di questo è ora tu
hanno due liste distinte che rappresentano
due valori diversi ma se guardi
il tipo di layout qui sullo schermo
si vede che condividono più del 50% dei
la loro memoria ha diritto al 50 percento dei loro
la memoria è condivisa potresti ottenere la coda
della lista X e quindi potresti contro
un’altra testa su di esso e ora hai
tre valori distinti lo conosci
rappresentano tre valori distinti ma
di nuovo condividono più del 50% di
la loro condivisione strutturale della memoria è così
quali sono le strutture dati persistenti
davvero su quella memorizzazione strutturale
ti dà alcune cose che ti dà
l’efficienza dello spazio ti dà anche a
efficienza computazionale quindi se hai
ha usato strutture dati copy-on-write
vedrai come possiamo essere molto meglio
di opere copy-on-write copy-on-write
quando la tua struttura dati è molto piccola
ma se per esempio hai un grande
l’array copy-on-write ti prenderà
sappi che è su così le idee che sono
in procinto di presentarsi sono stati prima di tutto
ricerca però non provata da Phil
Bagwell ha inventato questi dati
strutture chiamate l’albero della mappa dell’array e
l’albero della mappa dell’array hash e lui e lui
fatto questo credo che l’ultimo
forse entrambi ma all’EPFL che è la casa
di Scala ma era davvero ricco Hickey
chi ha preso questi molto abilmente progettati
strutture dati e quindi inserire un
giro immutabile su di esso e poi
dimostrato che su hardware moderno tu
otterrebbe prestazioni molto migliori di
ti aspetteresti, ad esempio, lo faresti
pensa sulla carta che qualcosa come a
albero delle dita che è un altro tipo di
la struttura dei dati immutabile sarebbe più veloce
ma semplicemente perché la realtà di
tempi di esecuzione moderna di hardware moderni è
semplicemente non è vero
la fonte di dati che mostrerò
completamente soffiare quella roba fuori dal
acqua quindi parliamo del più semplice
uno l’albero vettoriale bitmap e il
ragione per cui sceglieremo questo perché
non è non è troppo difficile da
spiegare ed è una struttura dati che
ti dà le stesse proprietà che sei
usato da matrici in altre lingue
un po ‘ come un ArrayList ad accesso casuale
quindi ti è permesso di aggiungere in modo efficiente
alla fine è possibile accedere in modo casuale e
qualsiasi elemento e ha buone prestazioni
caratteristiche quindi è molto simile
un array tranne che ha questa nuova proprietà
in cui è possibile aggiornarlo molto
efficientemente senza distruggere il
precedente qualunque valore precedente
rappresentato a differenza di matrici immutabili così
i dati vivono sugli alberi
si tratta di un albero prefissato non stiamo Volontà
vedi i diagrammi che spiegano questo
quello è un albero bit per bit e lo faremo
vedere esattamente cosa significa in un secondo
quindi come funziona è fondamentalmente un?
l’ albero vettoriale bitmap persistente è solo un
array di array in cui scegli alcune dimensioni
solo non importa vedremo cosa
la cornice delle dimensioni corrette è ma per ora
ne prenderemo uno piccolo perché
è più facile mostrare i diagrammi così
ne sceglieremo n uguale a quattro
l’elemento di questa matrice punterà a più
matrici della stessa dimensione ciascuna di
questi array indicheranno un altro livello
di array della stessa dimensione e quindi
infine, si colpisce nodi foglia che
in realtà contengono i valori che possono
che vi preoccupate e qui siamo solo
userai i numeri perché è facile
per collegare gli indici ai contenuti così
ora la domanda va bene così
interessante ma come otteniamo qualcosa
fuori di qui, quindi c’è questo bello
proprietà di numeri interi così 106 dicono di noi
voglio trovare 106 elementi che abbiamo
siamo fortunati perché 106 ha un binario
rappresentazione e puoi mascherare questo
numero per trovare la cosa che vuoi
per il particolare fine che abbiamo scelto
qui abbiamo bisogno di un po ‘di massa per bit, quindi se
la prima cosa che faremo è un po ‘
mascherare i primi due bit e quello
ci dice che dobbiamo guardare all’indice uno
questo lo sai zero zero si conteggio
da zero e poi i prossimi due bit
dicci che dobbiamo guardare l’indice due e
i prossimi due bit
dire indice di due e, infine, siamo fuori
bit sappiamo dove era no
Alla fine e lì abbiamo il nostro valore 106
all’indice due, quindi se sai qualcosa
sui runtime moderni questo è estremamente
veloce su JVM e su JavaScript
motori ora e vedremo effettivamente le prove
Ti mostrerò
v8 facendo questo così solo si tratta di a
un paio di accessi come accesso e a
un paio di operazioni così ora che noi
sapere come trovare qualcosa come facciamo noi
aggiorna qualcosa e stiamo andando
per vedere come possiamo fare molto meglio di
copy-on-write
tutto ciò che dobbiamo fare è sostituire il percorso
che ha bisogno di cambiare quindi se vuoi
aggiornare le centinaia 106 elemento e
invece di 106 vuoi mettere il
stringa pippo, dobbiamo sostituire la radice
dobbiamo rimuoverlo rimpiazzare la matrice
il percorso del prossimo livello il prossimo
livello al livello successivo e di nuovo noi
sapere quali sostituire esattamente
allo stesso modo in cui sapevamo come trovare
qualcosa perché l’indice che abbiamo
la cosa che vogliamo sostituire e ottenere
ci dà il percorso, quindi cosa succederà
avremo un nuovo vettore scrivere a
nuovo vettore e lo condividerò
come quello che il 95% dei suoi contenuti tutti questi
altri array che non sono colorati sono
condiviso con il valore precedente e in
l’ultimo in realtà mostrerò una demo di a
editor di pixel che utilizza questo trucco per ottenere
davvero veloce annullare e diffondere così è
piuttosto bello, quindi che dire di queste dimensioni
lunghezza per suona un po ‘arbitraria
è dopo un sacco di test che le persone hanno
ho capito che 32 è davvero buono 32
ha un buon equilibrio tra tempo di ricerca
e aggiorna le prestazioni man mano che aumenti
la dimensione dell’aggiornamento richiede più tempo
anche se i tempi di ricerca sono migliori
quindi abbiamo scelto 32 solo per darti un senso
di quanto è buono che è almeno per il
lo stato attuale del calcolo non lo farà
essere sempre vero e probabilmente lo faremo
per modificarli ma oggi questo numero è
un numero molto buono perché se tu avessi un
vettore persistente che era di sette livelli
profondo che è il 32 al settimo potere
sono 34 miliardi di elementi, anche se ciascuno
l’elemento era come un valore a 64 bit su a
Sistema operativo a 64 bit che occupa circa 256 gigabyte di
RAM
finalmente vedi macchine nel
cloud in cui è possibile eseguire il provisioning a
macchina come quella molta RAM quindi è molto
bene in modo che si possa effettivamente aggiornare
e vector questo grande con al massimo sette
aggiornamenti di array è possibile trovare qualsiasi elemento
in al massimo sette operazioni bit e
Sette
axises di nuovo è molto economico
hardware moderno che sentirai spesso
frase che nessun dato persistente
le strutture non sono da cercare ma
è log 32 n che è piccolo è
efficacemente o 1 ok quindi vediamo una demo
quindi ho detto che stavano bene, andiamo
vedere se sono effettivamente veloci, quindi questo è
una build relativamente recente di v8 e cosa
Ho intenzione di fare qui, sto andando a
costruire un array mutabile su VA e io sono
andando a costruirlo con il suo basic sono
solo e costruiscilo sarà un
mille LM mi dispiace milioni di elementi
solo numeri interi e poi facciamo lo stesso
cosa con un vettore persistente così dentro
Ricordo nel secondo caso che effettivamente
costruire 1 milione di vettori non lo è
lo stesso che spingere sull’array
giusto e vedremo come funziona
questo è un vecchio questo è un 2010
i computer portatili questo ha quattro anni in modo da
non è nemmeno così veloce, quindi dovrei esserlo
piuttosto scioccante non è nemmeno 2 volte
più lento anche se il secondo è
facendo un’incredibile quantità di lavoro
il primo è abbastanza bello, quindi anche solo
questo sarebbe oh sono utilizzabili lì
ci sono molte applicazioni che valevano la pena
meno di 2 X più lento a causa di questi
altre proprietà che potresti ottenere
come si, non è la performance
non fa differenza se lo fossi
scrivere un Jason che fa la vita e io ero
usando jQuery jQuery trova elemento da CSS
L’ID è 165 volte più lento rispetto all’aggiunta
un elemento per un vettore che non sta per
essere il collo di bottiglia nella tua applicazione
ma i programmatori funzionali sono stati
facendo questo gioco per molto più tempo
rispetto ai programmatori di duranio e così abbiamo
molte ottimizzazioni sul posto così per
esempio è molto comune ad esso è molto
comune a voler costruire qualcosa di molto
velocemente, quindi abbiamo un bel risultato
operazione che ti permette di prendere
qualsiasi vettore Tran immutabile in una sola volta
pensato in una cosa mutevole senza
influenzando l’ originale è possibile modificarlo
e poi alla fine quando hai finito
una volta puoi ottenere un persistente
versione di esso
e questo funziona alla grande quindi se ci sei tu
scoprire che le strutture dati persistenti sono
collo di bottiglia e hai bisogno di un po ‘
più perf è possibile utilizzare transitori che è
ciò che chiamiamo recinzione e lì
sono analoghi in altre lingue, quindi come
generale, esegue ora così su questa macchina
con questa particolare build sai che è
più di due volte più veloce di costruire un
vettore immutabile e questo è il tuo potere
stai pensando bene che sono i nostri dati v8
le strutture sono ottimizzate per tutti
Motori JavaScript non v8 in particolare
e così puoi vedere JavaScript questo è
Nucleo JavaScript questo è JavaScript
motore in Safari così puoi vederlo
Il core di JavaScript è molto meglio
costruire l’array ma non è così
importa
abbiamo ancora battuto l’array mutabile in questo
caso usando vettori transienti così buoni
perf così ora che noi e questo è questo
le cose andranno solo meglio
Io sono lo sai che ho seguito
javascript per molto tempo intendo il
quantità di ottimizzazione che è in corso
versato in motori javascript è carina
è probabile che non abbiamo mai visto questo
molti soldi stanno andando in spesso
ottimizzando una lingua c’è un intero
gruppo di ricerca che ha un è nel
progettazione del core JavaScript SpiderMonkey
e v8 è davvero fantastico e il gioco è fatto
andrà solo meglio perché tu hai
questo desiderio di ottenere fondamentalmente il
prestazioni di vedere nei giochi browser
i giochi sono una sorta di guida questo c’è un
intera iniziativa chiamata MJS
firefox ha fatto e l’ altro l’ altro
i motori non vogliono farlo vogliono
raggiungere tale prestazione in modo dinamico
senza ao team questo strano javascript
variante così solo le nostre cose stanno andando
diventa più veloce così bene ora che voi ragazzi
conoscere strutture dati persistenti o
almeno una forma di loro puoi farlo
avrai del reale interessante
realizzazioni come avevo circa sette mesi
fa mi sono reso conto che Facebook di reagire
che ho ignorato e che è stato rilasciato
un anno fa aveva davvero questo fantastico
gancio dove potrei attaccare persistente
strutture dati e fondamentalmente fanno reagire
più veloce di quanto sia fuori dalla scatola se tu
allegare se si utilizzano dati persistenti
le strutture con la reazione è solo più veloce
e vedremo perché e tu puoi
alcune altre cose pulite da questo come
beh, quindi praticamente ci vuole
ClojureScript
e ci vuole reazione e una sorta di spettacoli
che possiamo creare interessanti
interfacce utente efficienti e reattive
che in realtà fanno molte cose difficili
più facile da fare e lo vedremo così se
hai se non hai familiarità con
reagire reagire è una sorta di up and coming a
molte persone sono probabilmente più familiari
con cose come angolare o spina dorsale o
ank come quello ambra ambra ma quelli
quelle cose vanno bene quelle cose
grandi in effetti quelli che probabilmente possono essere
modificato per fare alcune delle cose che sono
dimostrare, ma reagire, è sicuramente
rende l’integrazione di dati immutabili
strutture il più semplice così bene come fa
reagire il lavoro reagire è una sorta di progettato
attorno a questo tipo di partita interessante
rendendo sorta di concetto tu lo sai
sorta di tratta il browser come una sorta di
GPU così in una GPU che davvero non vuoi
invia le singole istruzioni della GPU
perché è molto lento che vuoi
batch il più possibile e inviarne uno
grande messaggio e quindi cosa reagisce
perché è davvero fastidioso da fare
infatti, se mai vedrai molto
le persone con codice Dom ottimizzato fanno questa roba
a mano così reagisce dice che è un modello
progetteremo il nostro framework usando
questa cosa chiamata Dom virtuale e
lo faremo fondamentalmente per voi
reagire appare come un oggetto orientato
cosa ma è stata progettata da
sorta di un programmatore funzionale il
ragazzo che ha fatto questo il concetto originale
era da qualcuno che è un fan di
programmazione funzionale ma ciò che lascia
tu ti lasci prendere i tuoi dati
Dati JavaScript si applica una vista
funzione e quindi calcola un virtuale
Dom se si dispone di nuovi dati che applicare tale
funzione e calcola completamente
nuovo Dom virtuale con cui funziona
un alto livello ce ne sono molti
ottimizzazioni in atto per prevenire
calcolare l’intero albero ed è
non pertinente
concettualmente che è come funziona lo
produce un Dom virtuale come tuo
i valori cambiano che rappresentano l’intero
applicazione e come cambia il Dom
come dice noi possiamo prendere il Dom virtuale
abbiamo calcolato al tempo zero e il
Dom virtuale che abbiamo calcolato alla volta
uno e quello ci darà il minimo
serie di modifiche da applicare al Dom
ciò che è bello di questo è che in questo
mondo diverso da qualunque cosa tu abbia
probabilmente usato prima
Se
Ho appena capovolto quei due dom virtuali
reagire mi darà il retro di
cambia a destra gratuitamente non devo
Faccio che io non faccia nulla, reagirà
calcola semplicemente il gruppo inverso di
cambia e vedremo una demo che prenderà
Approfittate di quello va bene così ho avuto
tipo di ho scritto un ho scritto un post sul blog
come a gennaio ed era molto popolare
era come se non lo sapessi , non penso
ho ottenuto centocinquantamila uniques
in circa una settimana e totalmente cambiato
la prospettiva della gente di reagire è reagire
abbastanza popolare ora ma io ma II tipo di
postulato che facendo annulla come era ora
banale che è classicamente un
i sistemi orientati agli oggetti sono un grande dolore in
il culo che non vuoi aggiungere in seguito
Voglio dire, ho detto che se organizzi il tuo
l’intero stato dell’applicazione ed eseguire a
la struttura dei dati mutabile è gratuita
non c’è niente che devi fare puoi
passare a qualsiasi punto nel tempo nella vostra
lo stato dell’applicazione e reagire sarà in grado
per renderlo abbastanza velocemente così questo
sviluppatore presso Ableton Ableton Live the
software musicale uno sviluppatore UI lì
leggere il mio post sul blog ha detto che tu lo sai
voglio vedere se questo ragazzo è serio
non sembra che tu possa davvero
fai questo e così ha deciso di dimostrarlo
se stesso che potrebbe essere fatto e lui
costruito una piccola applicazione davvero fantastica
è un editor 64 x 64 pixel e cosa lui
è stato messo tutti i pixel per
che disegni la cornice che disegni
in un vettore immutabile e lui
volevo dimostrare di sapere dimostrare
che in pratica ottiene un annullamento infinito
infinito rifare sarebbe memoria
efficiente l’applicazione non rallenterebbe
giù che poteva usare la precisione
strutture dati per farti sapere banale
esportazione di gif animate e così via
e così mi permetta di mostrare che in questo momento così
qui è in esecuzione in loro assicurarsi
questo funzionerà bene così eccolo qui
rende un po ‘più grande quindi è a
piccola e divertente app è ed è così
in realtà un bel po ‘di codice è come me
pensa a un’applicazione da duemila righe
non è semplice, ha speso un bel po ‘di tempo
tempo su di esso ma posso scegliere un colore
Posso disegnare un piccolo alone intorno
questo questo piccolo personaggio divertente sul
lato destro dello schermo che è il
la storia che posso annullare Posso radio e
anche se lo faccio bene, ne faccio clic uno
pixel questi vengono tutti registrati come
Annulla i passaggi e potresti farlo tutto il giorno
e sai che lo sarà
relativamente efficiente che è carina
è bello, è molto , è molto, molto
bello e anche tu qui puoi vedere
che posso scrub posso cancellare la storia
ed è anche reattivo, giusto che sia
in realtà sta usando il fatto
che tutto questo è memorizzato come persistente
strutture dati così probabilmente lo sei
chiedendosi bene quanto fosse complicato questo
parte bene la parte che è la più difficile
e la parte che quando le persone non fanno
loro solo sanno che puoi disfare
sono come se non lo facessimo a noi non importa
non è un grosso problema quindi questo è il suo intero
file per implementare annullare sessanta righe di
codice questa è la riproduzione, questo è annullare rifare
e l’esportazione in gif animate che è
fantastico, questo è davvero fantastico
qualcosa che è classicamente difficile da fare
con strutture dati persistenti carine
semplice e quindi probabilmente lo sei
se sei un mentore di prestazioni sei
probabilmente chiedendo bene di cosa si tratta
utilizzo della memoria quindi questo è il motivo per cui il ghiaccio è giusto
per divertimento ho detto bene che prenderò un
vettore persistente con ha 4096 elementi
e ho intenzione di scattare una foto di migliaia di
in pratica li sto per immagazzinare
in una variabile radice in modo che ottengano
loro sono appuntati in modo che io possa fare un
heap snapshot google chrome dev dev
ha un’istantanea di heap impressionante che mostra
tu esattamente quanta memoria o
L’applicazione JavaScript sta usando e così io
Ho scattato una chat di mille fotogrammi e
poi ho preso un array con 4096
elementi e ho aggiornato a caso ma di
Ovviamente ho dovuto copiare proprio al
copia-su-scrivi ogni array perché se io
volevo lo stesso comportamento che abbiamo avuto
fare per fare un migliaio di istantanee prese
due decimi di megabyte con persistente
vettori sulla destra si vede che
ho preso circa 1,7 megabyte se l’avessi usato
copia-su-scrivi con matrici quindi è quasi
un risparmio di memoria di ordine di grandezza così
non è solo la velocità a sapere che lo è anche
molto efficiente nella memoria quindi ovviamente
le persone spesso fraintendono quello che sto dicendo
è come annullare rifare bene, ecco cos’è
ottimo ma non si applica a tutti
le applicazioni e le persone spesso no
capire che non si tratta di sotto
una ripetizione riguarda lo stato molto potente
gestione se hai modali se tu
avere una forma multi-step in cui l’utente
puoi premere il pulsante indietro che non vuoi
perdere qualcosa e tu non vuoi
devi fare un extra persistente per il
server solo in modo che possano fare clic su
pulsante Indietro e i loro campi modulo sono
precompilati dati persistenti corretti
strutture puoi farlo puoi farlo tu
può passare attraverso il tempo che puoi anche permettere
qualcuno per tornare indietro nella loro forma
cambia il tuo modulo e poi propagare
quelli che cambiano in avanti
storia quindi se hai mai fatto
magia tutto ciò che pensi sia davvero
cool come con fantasia ottenere trucchi che puoi
fai questo in memoria nel tuo interattivo
applicazione quindi è molto più grande di
sotto e – si tratta di uno stato potente
strumenti di gestione per voi estremi
avere cose come un caso estremo di questo
è Elm quindi sono sicuro che molti di voi hanno
visto i colloqui di Bret Victor così bretoni
I discorsi di Victor sono davvero fantastici ma
sono solo prototipi che non sono reali
e così gente alla fine dei suoi discorsi
sono tutti come oh, è quello che voglio ma
in realtà non funziona così è stato
interessante vedere in realtà la
JavaScript funzionale funzionale sociale
e compilare a persone JavaScript
in realtà cercando di fare il vero
la versione di questo ed Elm è a è una specie
di linguaggio di programmazione funzionale il
targa JavaScript quindi sottolinea anche
immutabilità e quindi erano anche in grado
con non troppo sforzo giusto per
modificare il proprio IDE in modo che utilizzino a
strutture dati persistenti snapshot
stato dell’intera applicazione e tu
colpisci un bug e puoi sostanzialmente fermarti
e sta registrando tutto e
hai un cursore e puoi effettivamente farlo
fai scorrere il cursore per vedere quali sono i valori
modifica errata modifica i valori su
vola cambia il tuo programma al volo
verrà caricato a caldo modificando gli stati
che il programma è a conoscenza e tu
sai che puoi modificare e continuare così tutto
questo mi piace ancora che cambierà I
pensa che la gravità sia abbastanza bella così
ci sono molte possibilità non solo
quelli di cui ho parlato, okay, lo sono
praticamente andando quasi verso
Alla fine, quindi se vuoi giocare
con questo nel tuo sviluppatore JavaScript
e ti interessa questo tipo di
cosa ho scritto qualcosa due anni fa
ora chiamato Maury
in realtà richiede
intera libreria standard del clojurescript
e lo presenta come un normale JavaScript
libreria puoi includerla come te
includerebbe qualsiasi altra cosa è carina
bello è un modo divertente per giocare con esso è
in realtà molto popolare nel nodo
comunità ora relativamente parlando
ottiene fondamentalmente 8.000 download al mese
che non è male quindi finalmente le persone lo sono
riscaldandomi quando l’ho annunciato
due anni fa, come sai per un anno
ottenuto download pari a zero, ma ho fatto un
molti discorsi nella comunità jazz circa
e la gente sta iniziando a vedere sì
questo è prezioso a volte e questo è
Facebook davvero fantastico ora grazie a I’ve
stato così tanto sul blog quanto fantastico
immutabilità è quando si accoppia con il tuo
reagire in realtà stanno facendo da soli
struttura dati immutabile idiomatica
libreria così Facebook sta raddoppiando
strutture dati immutabili perché loro
vogliono che gli utenti reagiscano per accoppiarli
con strutture dati immutabili in effetti
se potessi convincere tutto il JavaScript
gli sviluppatori di fare questo voglio dire reagire sarebbe
solo quattro volte più veloce, giusto
sarebbe gratis se tu avessi tutti
utilizzare strutture dati immutabili e
quindi probabilmente ti starai chiedendo se io
usa strutture dati immutabili che è
davvero fantastico, ma devo usare JSON così
come si ottengono strutture dati immutabili?
dal tuo server al client, così abbiamo
già risolto questo problema a livello cognitivo
anche per voi abbiamo una biblioteca fredda
chiamato transito che fa da dorso a JSON
e ho scritto un post sul blog in realtà
cambiare il transito in modo da poter leggere
un valore fuori dal filo e invece di
ottenere matrici immutabili e mutabili
oggetti ottieni i vettori j / s immutabili
e mappa così ed è veloce non è lento
J immutabile ha i ganci giusti così
che possiamo costruire molto queste cose
rapidamente, quindi è un overhead molto piccolo
su JSON e quindi chi lo sta usando così
in realtà prismatico che è abbastanza grande
ora penso che ne abbiano effettivamente dieci
ingegneri o qualcosa che lavora su un
applicazione che mi piace davvero, intendo
la cosa che gli piace è quella ohm
ci dà una buona storia
per ragionare sul codice, sei tu
sapere che non è un codice base dove
tipicamente in JavaScript come non lo fai
sapere cosa sta mutando cosa e nella loro
l’applicazione è che è, è molto chiaro
se hanno bisogno se hanno bisogno di una sorta di
cambio di stato dove sta accadendo la meteora
j / s che è veramente popolare no
in realtà esporta di più– ma loro tu
hanno anche trovato un caso d’uso
Mauri all’interno della dipendenza
sistema di risoluzione il loro gestore di pacchetti
usa un risolutore di vincoli e usa
Maury sotto il cofano in modo che questo per ottenere
come un aumento del rendimento del 50% del cerchio CI
che conosci un semi ragionevole
popolare servizio di integrazione continua
usano tutti usano ohm sul davanti
fine e ovviamente c’è di tutto questo
altre società che utilizzano lo script di chiusura
che sono già venduti
strutture dati immutabili ma è
davvero emozionante vederlo ancora
sta arrivando a JavaScript e JavaScript
sono anche entusiasta come pure in modo
ci sono alcuni collegamenti questi li mettono
saranno disponibili diapositive che raccomando
controllandoli e penso che sia tutto
Devo poter rispondere alle domande
quindi quello che alludevo all’inizio è
che puoi scegliere la tua strategia così
effettivamente dentro a Goya quando sto lavando I
significa che è un’animazione così tutto ciò che è
fare è che è caldo, quindi non è come
smetterai di usare la mutazione giusta
questo non accadrà così ha appena
prende ogni vettore e lo fa saltare
la tela quindi è solo una tua
prendi un vettore che conosci attraversare ogni
elemento e nei quattro anelli a quattro
loop semplicemente muta la tela che userai
le stesse tecniche per l’animazione vanno bene
quindi quali sono le strutture dati
abbiamo le mappe ordinate che abbiamo
serie ordinate abbiamo serie abbiamo mappe
i vettori accodano le liste collegate credo
è già così
siamo anche molto intelligenti intendo così
è che sai che ci piace onestamente
alcune di queste cose che usi
ci sono cinque strutture dati
coinvolto perché vogliamo scambiare il
quello giusto per il particolare particolare
gli utenti usano pattern in modo da non farlo
devi preoccuparti di altre domande
non va bene grazie

Please follow and like us: