Press "Enter" to skip to content

GOTO 2013 • ClojureScript: Lisp’s Revenge • David Nolen


okay, questo discorso si chiama chiusura
sceneggiatura lisps vendetta che ho effettivamente dato
una versione di questo discorso alcune volte questo
uno sarà effettivamente un pochino
diverse cose sono accadute in
la comunità degli script di chiusura che sono
molto eccitante che sono felice di essere in grado
condividere con voi oggi in realtà basta
è successo qualcosa in cui forse dovrei
hai ridonato questo discorso chiudendo il tuo
sceneggiatura tawny puttana vendetta non sono sicuro
se tutti conoscono Tony
Hoare ma alla fine del discorso tu
sarà così sono sicuro che tutti voi lo sapete
a proposito di Lisp in una certa misura, ma vado
per dare una breve introduzione in ogni caso in modo
John McCarthy ha inventato Lisp nel 1957 per
risolvere il problema di artificiale
intelligenza e questo era perché lui
sorta di linguaggi di programmazione rilevati
e decise nulla che fosse
disponibile era abbastanza buono per affrontare questo
problema difficile molto interessante quindi noi
liste inventate ma allo stesso tempo lui
interpreti inventati meta di alto livello
programmazione della garbage collection dinamica
linguaggi di programmazione funzionanti
programmazione di programmazione con ricorsiva
funzioni ricorsive e così via
giusto per il quale è abbastanza incredibile
lui a farlo tutto in una volta, quindi cos’è
Fico su Lisp e io il motivo per cui penso
Il Lisp è ancora attuale oggi è quello
Lisp è una di queste lingue che io
pensare si inserisce in un bel posto nel genere
di rapporto tra semplicità e espressività
Potenza vorrei davvero sostenere che la maggior parte
la lingua principale è un po ‘di più
di un trade-off lì ovviamente altro
lingue che hanno questa bella semplicità
rapporto di potenza ma Lisp è sicuramente io
pensa un classico esempio di questo è questo
una pagina dalla lista 1.5 utenti
il manuale in fondo alla pagina è Alan
Kay Alan Kay si riferiva a questo come
Equazioni di esso software di Maxwell
definisce eval e applica e questo è carino
bello perché è tutto ciò che serve
bootstrap a Lisp un elenco completamente funzionale
sistema così veloce da 10 anni al 1967
Stanley Kubrick fa un film dal 2001
un’odissea nello spazio e in questo film appare
un’IA molto capace chiamata Hal 9000 che io
pensa che tutti abbiano familiarità
sembra avere incredibili poteri incredibili ma
Naturalmente non ha giocato fuori piuttosto che
molto bene, c’era molto entusiasmo
sull’IA e tu sai andare avanti
per il 2013 oggi non c’è ancora niente del genere
Hal 9000 ma ancora anche dato che io
non pensare che qualcuno avrebbe potuto prevedere
sono lo stato di una sorta di software
sviluppo oggi non penso nel 1957
o 1967 persone che lo vorranno davvero
ho pensato che qualcosa del genere
internet si sarebbe verificato o che a
molti di noi sarebbero programmi di programmazione
applicazioni distribuite sul web così
anche se non abbiamo il compito
costruendo questo ai che suona ancora
incredibilmente difficile, abbiamo ancora molto
compito difficile, dobbiamo progettare
sistemi distribuiti che sono anche robusti
un programmatore JavaScript è in realtà
progettando fondamentalmente un prodotto distribuito
sistema perché hai il tipo di
fonte asincrona di eventi che è
l’utente e devi comunicare dentro
un modo sincrono con il server
e direi che molto del
gli strumenti che stiamo usando oggi sono
in realtà non si adatta bene a questo compito
la maggior parte delle lingue non sono state progettate con
con l’idea che quasi tutto
lo faresti è interessante sta andando
essere asincroni e, naturalmente, se lo è
la luce asincrona è molto probabile che sia
sarà concomitante quindi andrò
Ho intenzione di loop back in queste idee
ma poi andiamo a fare un corto
introduzione alla chiusura probabilmente alcuni di
hai sentito parlare di questa chiusura è un
linguaggio di programmazione dinamico è una lista
ma si rivolge alla JVM creata dai ricchi
Hickey è molto bello ma la cosa
riguardo alla chiusura sono gli obiettivi di chiusura
la JVM e ci sono molti posti ora
dove JVM non può essere eseguito e lo farà
probabilmente non ha mai corso e quindi è arrivata la chiusura
il clojurescript del 2007 uscì nel 2011
e l’idea di Rich qui era così bene noi
vuole essere in grado di indirizzare telefoni e web
browser e tutti questi luoghi in cui il
JVM semplicemente non può raggiungere ora questo è
in realtà non è questo non è un nuovo
idea nel 2011 quando ne è uscito io
significa che Google aveva fatto questo per
Erano anni che avevano ragione
compilando java in JavaScript anche tu
ora hai dattiloscritto che è Microsoft
una sorta di superset di JavaScript che
aggiunge tipi
hai CoffeeScript che è davvero
popolare tra gli sviluppatori front-end voi
avere un dardo che in realtà è diverso
linguaggio come VM diversa ma in ordine
per quello per loro davvero farlo
lavoro perché nessun altro browser sta andando
implementare integrare quella VM che hanno
essere in grado di compilare JavaScript così io
sicuramente vedere il futuro del web
essendo molte lingue a cui mirare
JavaScript ma se lo faremo
giusto se stiamo per compilare effettivamente
il JavaScript c’è, ovviamente, un sacco
di problemi tecnici che devono essere
risolto in modo che per ogni sviluppatore
in realtà voglio adottarlo così una cosa
quello strano successo con la freccia era quello
quando il dardo è uscito con il compilatore dart2js
quali hanno generato JavaScript
sai che c’era un sacco di trolling
su questo perché HelloWorld era 15.000
linee di codice JavaScript alcune persone
erano come chi userà questo ma di
Certo che stavano criticando
qualcosa che era molto sotto
sviluppo
Ho provato di recente a compilare Hello World
dart2js ora genera circa 40 50 linee
per ciao rel che è abbastanza ragionevole
E per quanto riguarda vicino lo script che cosa
quanto bene lo facciamo su questo
particolare che in realtà penso non sia
un benchmark molto interessante che generiamo
due linee di codice che è piuttosto interessante
e questo è abbastanza recente che usiamo
il compilatore di chiusura di Google e il
Il compilatore chiuso di Google è un ordinamento
di molto utilizzato nel mondo front-end
e fa l’eliminazione del codice morto, quindi il nostro
le dipendenze sono abbastanza pulite nel
libreria interna quindi non dobbiamo
genera molto codice se in realtà digiti
ciao mondo come programma di script di chiusura
ancora una volta che è punto di riferimento non interessante
però perché tutta l’unica cosa che
davvero importa è per non banale
programma quanto codice generi
per programmi non banali e per
perché produciamo output che è
ottimizzato per Google chiusura siamo
in realtà è molto bravo e ce l’ho per
da molto tempo l’altra domanda è questa
lento qual è il costo, quindi questo è
qualcosa che dart2js
anche deve affrontare e loro hanno
effettivamente fatto davvero molto bene se lo sono
intenzione di usare una lingua diversa e
questo linguaggio mi dà semantica migliore
o semantica più ricca ce ne sono alcuni
costo implicito giusto intendo cosa siamo noi
pagare per ottenere questo presumibilmente più bello
questa lingua non è OpenGL questo è questo
questo è lo script di chiusura questa è una porta
di notch non vero creato minecraft lui
fatto un JavaScript molto piccola JavaScript
dimostrazione
ed è puramente un computazionale
benchmark ancora da aggiornare
300 punti di dati in circa 16 scusate
300.000 punti di dati in circa 16
millisecondi al fine di ottenere un telaio
valuta bene, quindi chiudi il tuo copione
come ho preso non solo codice il codice JavaScript
che era efficiente e ben scritto e io
detto Ken, il nostro compilatore genera codice
è abbastanza veloce quanto il
JavaScript originale questo è leggermente
un po ‘più lento ma non abbastanza
per essere interessante è come forse il 10%
okay e poi un’altra domanda va bene
così è bello ciao mondo piccolo te
generare un buon JavaScript
per quanto riguarda i tempi di compilazione come quello che è il
costo per averlo questo sai
un altro passo così qui ho una chiusura
file script aperto che ho intenzione di demo
più tardi in basso puoi vedere
che abbiamo auto build così abbiamo
per pagare per questo il costo della JVM
avvio per iniziare la compilazione
processo, ma una volta avviato lo facciamo
compilazione incrementale e puoi vedere
ci vuole meno di un decimo di secondo
e qui ci sono alcune cose carine
esempio cosa succede se faccio questo errore io
fatto un refuso questo non va bene lo farebbe
non essere un errore in fase di compilazione in
JavaScript giusto così abbiamo cercato di a
molti errori che avresti avuto
JavaScript scompaiono così la funzione dell’epoca di T
sono davvero importanti in chiusura
script a differenza di JavaScript quindi sto passando
3 argomenti da bloccare quando bastano
due lasciatemi ottenere errori su questo
anche
quindi questo è abbastanza veloce
tempi di compilazione e errori molto precisi
per quanto riguarda l’ ordine e scusa dovrei girare
a proposito, ma manca un errore di battitura su
nomi di funzioni e nomi di variabili ok
posso fare bug in modo che sia pulito che ho mostrato
hai qualche capacità di debug ma quando
sei in produzione come stai
in realtà per infettare questa roba e questo è un
buona fonte di lamentele se hai guardato
a CoffeeScript CoffeeScript per molto
lungo tempo detto genererà leggibile
JavaScript non viene generato
JavaScript a tutti i JavaScript noi
produrre è molto brutto , è solo il
l’unica cosa che proviamo a fare è renderla veloce
non siamo interessati ad essere leggibili
quindi davvero
per risolvere questo problema da questo
la fonte originale per il compilato
fonte così di tre settimane fa noi
in realtà hanno mappe di origine e la nostra fonte
le mappe sono probabilmente migliori di altre
mappe sorgente che sono là fuori che è
perché in realtà possiamo mappare
codice di produzione codice di produzione è
sta per essere minimizzato sta andando
essere il codice morto eliminato proprio di più
compila tutti i compilatori JavaScript
lo fanno è dispiaciuto JavaScript qualunque
la tua lingua ad alcuni di JavaScript tutto
lo fanno è che ti danno la mappa sorgente
per il primo livello di compilazione quindi noi
in realtà prendere due mappe di origine
e li uniamo e questo è quello che noi
effettivamente uso quindi questo è che sto facendo funzionare alcuni
Test nucleo asincrono che parlerò
in breve
quindi qui vediamo alcune cose che noti
qui io
curiosamente hanno clj s come il file
estensione posso cliccarlo salta a tutti
i luoghi in cui questi test
le espressioni hanno funzionato correttamente e questo è questo
è che funziona anche se siamo andati
attraverso la compilazione avanzata proprio questo
è un codice compilato avanzato e lo siamo
ottenere posizioni sorgente accurate, okay
così così che suona piuttosto bene
ogni ho questo credo ogni
compilato in linguaggio JavaScript per
consegnare ciò che stiamo tentando di poco
consegnare e quindi dovresti dire bene
ok questo è bello, questo sembra convincente
ma chi lo usa così come ho detto questo
è il discorso di chiusura che vorrei
avrebbe potuto dare due anni fa così il
la storia è abbastanza buona che abbiamo circa 2.300
github Watchers abbiamo 58 contributori
che è davvero buono per un open source
progetto che ha due anni , chiudi il tuo
lo script è la seconda build più popolare
strumento così motore di linea è la vera build
strumento ma è spiacente è il più
popolare plug-in il secondo più popolare
plug-in che è davvero fantastico quale
significa che è stato molto apprezzato da
la comunità di chiusura e stiamo vedendo
sempre più interesse a causa delle cose
come Cori di sincronizzazione che parleremo in
un po ‘ c’è anche un O’Reilly molto magro
prenota se sai chiudere facendo chiudere
lo script che non non c’è molto
conoscere la lingua è più o meno il
lo stesso è solo come si costruisce come si fa
compilate i programmi bene così questo è il
passo, ma come quello che fa in realtà
sembra come si usa questo
sistema
quindi diamo un’occhiata
qui a questo quindi posso scrivere alcuni s
le espressioni qui oops sì come un bene
e ciò che è interessante è che questo è un
ripple che conosci proprio come il
increspature che hai visto prima del
la differenza è che in realtà sto correndo
questo ribelle contro Chrome, quindi cosa c’è
sta succedendo sto compilando il
JavaScript combinato chiusura script
JavaScript che lo invia a Chrome
valutare e quindi stampare il risultato così
se vado così, c’è un io c’è un
div un riquadro rosso su quella pagina e poi
stiamo andando a vedere il div qui così posso
in realtà dal mio file sorgente interagiscono
con il browser che è piuttosto utile
va bene così semantica quindi cosa stiamo dando
tu su qualcosa come JavaScript noi
in realtà non proviamo a preservare
Semantica di JavaScript e a meno che noi
assolutamente per l’unico posto dove
noi facciamo numerix e se qualcuno vuole
ho domande a riguardo a cui posso rispondere
più tardi ma praticamente tutto il
semantica cerchiamo di preservare la nostra chiusura
la semantica per esempio 0 non è falsie
la stringa vuota non ti falsifica
non è necessario scrivere alcun assegno in giro
questo sono solo due valori falsi in
chiusura e questo è chiodo e falso e
questo è vero per lo script di chiusura che abbiamo
corretta scoping lessicale proprio così se il tuo
funzionale se ti piace funzionale
programmazione ti diamo scope lessicale
non devi affrontare il pazzo
regole di scoping che esistono in JavaScript
un’altra cosa che facciamo è che noi
non abbiamo muto immutabile che non abbiamo
locali mutabili quindi un errore molto comune in
JavaScript è impostato su un ciclo per te
avere una funzione e lo farai
esegui quelle funzioni più tardi e tu
chiudere alcuni valori nel ciclo
e poi tu li esegui in seguito
e il tuo programma non è corretto e
questo perché quei locali sono mutabili
e stavano diventando mutati con ciascuno
iterazione e così quelli che hanno chiuso
le variabili non sono quelle che ti aspetti
questo non è vero per uno script di chiusura
perché non abbiamo abitanti locali mutevoli quindi
qui posso fare fondamentalmente con
immutabile o sorta di equivalente di a
array mutabile qui ho un aiuto per
invocare ogni funzione ho un ciclo dieci
volte aggiungo una funzione e tu ne noti
Sto solo registrando il valore di I in
JavaScript
questo produrrebbe dieci nove e noi
non avere questo problema, quindi questo
tutto il pensiero su loop e chiusure
facciamo semplicemente la cosa giusta, ok
l’altra cosa è drammatica
diverso da JavaScript è quello
chiusura e quindi script di chiusura
sottolinea la programmazione con valori così dentro
JavaScript hai valori immutabili
avere stringhe e tu hai numeri e noi
sono molto felice che queste cose
non cambiare ancora il resto del
il linguaggio è estremamente mutevole e questo è
non è vero per chiusure di chiusura e chiusura
il tuo copione fornisci un ricco gruppo di
collezioni che puoi usare come valori
e questo perché non puoi mutarle
quindi ecco una mappa hash che sto per stampare
estrarre la mappa hash con un nuovo valore chiave
coppia proprio lì e sto andando a stampare
fuori il valore di X e eccoti
posso modificare la cosa che non ho
so che non dovevo copiarlo che avrei avuto
per clonarlo faccio cose nette proprio questo
significa che non lo fai non puoi fare alias
tutti questi tutti questi problemi che hai
attorno alla mutabilità ora puoi ragionare
sulle tue collezioni esattamente nel
allo stesso modo in cui ragionate su stringhe e
numeri e potresti pensare bene
come fate voi ragazzi a ricordarlo bene?
Ho detto che gli script di chiusura non rallentano così noi
in realtà sono in grado di scrivere molto
script di chiusura di basso livello e noi
implementare strutture dati persistenti
che erano veramente veramente in realtà
innovato da riempire Bagwell e poi Ricky
li ho modificati per la chiusura ma i nostri
le collezioni immutabili sono molto efficienti
quindi non devi preoccuparti in generale
circa il costo di lavorare con loro ora
l’altra cosa che è bella è quella volta
hai collezioni immutabili e tu
può trattarli come valori certe cose
sono veramente belli come una qualità
giusto così normalmente quando JavaScript
i programmatori usano la qualità che sei
parlare di te spesso deve piacermi
Sto parlando di valore o sto parlando
sull’identità, stai sempre pensando
che cosa sta succedendo qui nel recinto
copione
si tratta sempre di valori, quindi devo
mappe di hash le chiavi sono state definite a
ordine diverso chiaramente ho dovuto
allocare a oggetti diversi ma
l’uguaglianza solo funziona e che è
avendo fatto un sacco di programmazione web
questa è la tua programmazione lato client
è abbastanza carino, lo spediamo anche con molti
collezioni JavaScript viene solo
con oggetti e matrici quindi, in realtà
hanno matrice immutabile come le cose chiamate
vettori e qui io sono l’aggiunta di quattro a quella
vector abbiamo set reali quindi questo è un
set sto provando ad aggiungere qualcosa che è
già nel set non funziona qui
un altro set e ho intenzione di aggiungere questo
e entra lì perché non c’è
c’è già se vieni da
Obiettivo C o Java o chiacchiere o altro
di queste altre lingue che hanno ricchi
le collezioni si sono abituati a questa nozione
che le Chiavi possono essere chiavi complesse complesse
sono ammessi e quindi è anche vero per
script di chiusura quindi questa è una mappa hash
dove la chiave è un vettore con il
valori 1 2 in esso e posso dire di uscire
di tale hash mappare il valore per la chiave 1
2 quando funziona ok, l’ altro
cosa che facciamo così un sacco di un sacco di chiusura
lo script è solo una semplificazione come
rimuovere qualsiasi fonte di accidentale
complessità dove possiamo così l’altro
la cosa che abbiamo è un’iterazione uniforme, quindi se
hai un JavaScript in Se vuoi
itera su qualcosa che devi
gestire oggetti e array in modo diverso
questo non è vero nel chiudere il tuo script noi
abbiamo qualcosa chiamato prima che abbiamo
qualcosa chiamato riposo posso ottenere il
prima cosa da una mappa di hash di un
vettore da un elenco di un set così tu
può iterare uniformemente tutti i dati tutti i
collezioni e che è anche abbastanza
utile Vado avanti ma voglio parlare
la chiusura di altre cose non è un piccolo
linguaggio ha un sacco di funzioni molto
roba interessante, una cosa davvero fantastica
sono sequenze pigre, quindi se hai seguito
come i flussi Java che stanno uscendo o
hai familiarità con non so pigro
librerie di sequenze o librerie di flusso
lo fa praticamente la stessa cosa qui
Posso fare una lista infinita della parola
vai a una lista infinita delle stringhe
sono di chi posso combinare questi a
flussi infiniti e posso chiedere di ottenere
solo un centinaio di questi valori così
è piuttosto interessante la libreria standard
costruito davvero su un sacco di lotti
della funzione di sequenza utile, quindi se lo faresti
come sottolineatura questo è come sottolineatura
al livello di enth ha molto di più
funzionalità va bene così un posto che è
diverso poiché è di nuovo il clojurescript
non javascript quindi ci sono un sacco di
cose che sono fantastiche in quel javascript
non posso davvero fare o posso ma è un po ‘
un po ‘ più di lavoro ed è un po’ di più
custodie espressive buone così funzioni
non sono primitivi in ​​realtà non lo sono
un costrutto primitivo nel
linguaggio di programmazione di chiusura e sono
anche non primitivo in clojurescript
quindi non solo spediamo un prodotto molto bello
libreria standard spediamo anche tutti i nostri
astrazioni giusto quindi in realtà
fornire qualcosa che è molto simile a
vai interfacce interfacce Java che forniamo
questi protocolli puoi implementare il tuo
i tuoi stessi tipi di dati ti strutturano
può anche estendere i tipi di altre persone e
strutture di dati attraverso questi protocolli
e funzionano magicamente automaticamente
per esempio con la libreria standard
Decido di volere espressioni regolari
essere funzioni come voglio regolari
espressioni letterali per comportarsi come
funziona perché perché non potrei avere un
lista di stringhe che voglio filtrare su a
espressione regolare giusto e voglio
scrivi che conosci in modo funzionale
quindi qui ho esteso regolarmente
espressioni per implementare la funzione
protocollo e qui ho una lista di
stringhe e una su un’espressione regolare
letterale e posso filtrare Posso filtrarlo
se lo cambio alla destra, così è
piuttosto potente e quando guardi
sperimentare sviluppatori di script di chiusura
spesso lo fai per lavorare
con il Dom molto più piacevole va bene così
solo un po ‘più così Interop
Interop è una chiusura piuttosto piacevole come
lingua ospitata sulla JVM e in molto
molto simile chiudere il tuo copione
è ospitato in j / s che vogliamo fare
interagire con un host non troppo
difficile quindi questo è l’elemento get di
Funzione ID che ho usato prima, quindi questo è
come sembra chiamare JavaScript
metodi qui ho una maiuscola
funzione dove prende una stringa ottenere il
primo elemento in alto maiuscolo e poi
chiama sottostringa piuttosto roba standard
destra
quindi funziona così abbiamo davvero molto
di caratteristiche che sono in qualche modo
in arrivo con la sceneggiatura di Ekman sei così per
esempio voglio prendere una parola chiave e io
voglio convertirlo in una proprietà CSS così
solo per mostrarti come si presenta se
Vado di colore di sfondo questa è una chiusura
parola chiave dello script vado a prendere un cammello
stringa di casi in modo che io possa usarlo per fare
La proprietà CSS cerca solo le ricerche
rompere questo qui è che converto il
parola chiave in una stringa ho abbandonato il : I
diviso su – e poi abbiamo
compito distruttivo così è
qualcosa che è previsto per lo script ACMA
sei così posso chiedere il primo
componente di quella divisione dell’array e
quindi posso impacchettare il resto di
la matrice in un’altra variabile locale e
quindi posso applicare stringa lascio il
primo elemento da solo e io capitalizzo tutto
gli altri componenti e questo mi dà
carcassa di cammello ma loro non dovevano
scrivere molto codice per farlo bene
ed è molto in uno stile funzionale
che è abbastanza bello ok, quindi voglio cosa
Voglio mostrare qui è quello per esempio
quando lavoro con il Dom che ho
tutto questo roba Dom e voglio essere in grado
per portarlo in script di chiusura
astrazioni quindi è più amichevole per
io per lavorare con il Dom, per esempio io
vuoi togliere gli stili da un elemento
e voglio ottenere qualcosa che posso
trattare come se fosse una mappa hash quindi tutto il
le funzioni della mappa hash dovrebbero funzionare su questo
cosa così qui ottengo lo stile calcolato
per un elemento e poi posso farlo
funziona come una funzione così come
implementando l’ interfaccia per fare
ricerca di parole chiave in modo da poter ottenere il
Stili per la scatola e poi ottenere il
colore di sfondo a destra non l’ ho mostrato
molto codice come tutto il codice
che ti ho mostrato è tutto ciò che ho fatto
fare questo lavoro posso anche usare il
stile orientato alla funzione in cui ho il
parola chiave prima e ho capito
Posso ottenere la larghezza ci sono molti
fantastici combinatori nella libreria standard
Posso dire che voglio giustapporre la larghezza
e l’altezza in modo che torni un vettore di
la larghezza e l’altezza perché il
gli stili sono una funzione e l’ho fatto
implementare l’interfaccia di funzione che posso
avere una lista di proprietà CSS che voglio
estrarre e gli stili funziona esattamente come
funzione così posso andare avanti
ma spero che tu veda ciò che è chiuso
il tuo copione non è solo un linguaggio
spedisce abbastanza astrazioni in modo che tu possa fare
lavorando con librerie esterne esterne
api puoi farcela a vivere un’esperienza a
molto più bello quindi questa è roba nuova noi
questa è una foto di una ragazza abbastanza giovane
Tony Hoare e ha inventato qualcosa
chiamato comunicare sequenziale
Procede così andando avanti, penso che cosa
vedrai che penso che tu sia
sento molto le parole reattive, penso
la gente sta per ottenere sempre di più
interessato a Erlang perché penso
stiamo iniziando a capirlo
la programmazione asincrona è troppo difficile e
gli strumenti che attualmente abbiamo davvero
non sono così grandi che dobbiamo farlo
scrivere troppo standard per fare ciò che noi
dovrebbe considerare di essere roba di base così
Tony Hoare ha inventato questa astrazione
chiamato CSP è molto una sorta di
astrazione orientata al messaggio da trattare
con la complessità della concorrenza
è diventato molto popolare di recente
a causa di un linguaggio divertente chiamato go
che è stato creato da Rob pipe e poi
altre persone che vanno è abbastanza
si sa ciò che si potrebbe pensare
andare l’aspetto CSP di go è molto bello Rob
Da allora Pike è ossessionato dal CSP
gli anni ’80
è stato ogni lingua che è stato
fare in realtà onestamente sembra un
variante di andare e ha parlato di
qualcosa di molto interessante nel
Anni ’80 che era ci sono interessanti
possibilità tra CSP e UI
programmazione e penso che ci siano
in realtà alcuni davvero incredibili
opportunità lì e ne mostreremo alcuni
di quello odioso così ricco che hai deciso di te
so che voleva davvero vedere queste idee
quello è andare abbracciando messo in recinto
e script di recinzione e così loro
rilasciato un async nucleo della carta libreria che
implementa CSP e ora abbiamo CSP
script di recinzione in esso ed è carina
cool così in CSP in pratica hai
elabora processi indipendenti e loro
se stanno per comunicare il
comunicare attraverso i canali e hanno messo a
messaggio su un canale e poi su
altro processo può leggere quella cosa
la principale è la grande idea principale con CSP
che è un è sincrono
comunicazione
Stile asiatico se scrivo su un canale e
non c’è nessuno all’altro capo del mio
il processo si bloccherà, quindi se scrivo
qualcuno deve leggere , questo significa
quel diritto è Anna Reed è una specie di a
rendezvous il canale è un rendez-vous
tra due processi e questo è
in realtà estremamente importante ed è
cosa ti permette di ragionare sul tuo
programma se stai scrivendo nel CSP
stile così qui ho un canale che sono giusto
facendo una variabile di primo livello che ho a
funzione di supporto per il rendering di alcuni HTML
non è così interessante qui è dove
diventa interessante ce l’ho che sembra
come un ciclo infinito proprio così quando tu
scrivi , stai dicendo che questo è un
operazione asincrona è quasi come
iniziare una discussione anche se lo sappiamo
che JavaScript non ha discussioni
tutti sanno che non ci sono discussioni e
JavaScript singolo threaded qui posso
ho l’illusione di poter iniziare un
processo indipendente quindi dico andare e io
dire per sempre questo è un canale di timeout
e quando il canale di timeout si chiude
questo può progredire e lo faremo
scrivi 1 il valore 1 su questo canale
che abbiamo dichiarato qui e questo sarà
scrivere su quel canale ogni 250
millisecondi abbiamo un secondo processo
che scriverà su quel canale ogni
secondo e terzo processo che scrive
ad esso ogni uno e mezzo secondi così
Qui si vede che questo è ciò che sta succedendo
quindi anche se non ho discussioni ho
mostrato che non ci sono callback sembra
che in realtà ne abbiamo tre
processi indipendenti che avvengono nel
browser quindi vediamo un altro ne vediamo due
meno e vediamo tre meno perché
sta correndo il più lento e quello che è
bello di questo è quaggiù
quando raccolgo quando raccolgo tutto questo
dati tutto è semplicemente questa linea giusta
qui a destra sto dicendo leggere un valore off
quel canale modo che io possa avere molti scrittori
a quel canale e posso raccogliere tutto
i risultati in questo processo che è
facendo il rendering quindi non voglio
potrebbe parlare di questo più ma voglio
mostrare che questo è effettivamente utile per
meno trucco meno esempi banali anche
anche se è carino, così ho
un post sul blog o una serie di post sul blog
di cui parlo molto di questo
e ho passato circa una settimana a cercare di vedere
si può effettivamente utilizzare questo per costruire interfacce utente
e se lo si usa per costruire interfacce utente lo è
in realtà più semplice quindi una cosa è
in realtà sorprendentemente difficile da scrivere
è correttamente una casella combinata di completamento automatico
in realtà è un enorme dolore scrivere
jQuery si tratta di circa 500 a 600 linee di
codice mutevole e molto stato molto
sai che questa bandiera è quella bandiera
imposta che hai a che fare con ie
le questioni sono sparse su tutta la faccenda
è orribile quindi questo è fondamentalmente
implementa la stessa cosa allo stesso modo
è di livello generale di funzionalità
circa 200 righe di codice questo il
pagina precedente che hai visto così core asincrono
funziona davvero con IES fino a ie6 a destra
quindi la pagina precedente funziona perfettamente
IE6
questa pagina che ti sto mostrando corre
ogni browser incluso IE 8 è l’unico
la ragione non funziona prima perché
Ero troppo pigro per sistemare i CSS, non è un
non è un problema JavaScript, quindi se vado così tutto
questa roba funziona come Mouse se registro
giusto tutto questo è roba simile
davvero anche se sembra intuitivo
sembra molto semplice se hai mai fatto
qualsiasi seria interfaccia utente che programma quello che ho
appena mostrato molto velocemente è in realtà
davvero difficile da ottenere e così è stato
fatto puramente in stile CSP e
creato un programma molto compatto e un
programma che è molto più facile da ragionare
Ok, quindi ho quasi finito ma io
hai ancora una cosa così è sempre
divertente perché mi piace davvero il plug-in
programmazione con programmazione dinamica
lingue penso che siano piuttosto interessanti
penso che siano molto flessibili soprattutto
sul front end però capisco
che a volte ha un po ‘di più
più garanzie sono belle e decisamente
sul retro avendo statico e
le garanzie possono essere davvero belle cosa c’è
è bello quello che sta per essere
possibile per gli script di chiusura e chiusura
quindi c’è un giovane gentiluomo molto intelligente
Sergente Ambrose Boehner
ha iniziato una specie di IndieGoGo
Kickstarter piace qualcosa durante il fine settimana
questo ultimo fine settimana e ha rilanciato abbastanza
soldi per iniziare a fare il suo progetto in
due giorni che ha effettivamente lavorato su
questo per due anni sono stato il suo google
Il mentore di Summer of Code su
tipo di chiusura per due per due estati ma
è davvero grandioso e ti permette di farlo
programmazione digitata in modo da poter prendere un
programma di chiusura non tipizzato o chiudi il tuo
programma di script e puoi aggiungere
tipi così lui questo è un esempio così qui
puoi vedere che questa è roba di Dom così io
puoi digitare le mie interazioni con il Dom
dovresti anche essere in grado di vederlo
c’è qualche menzione di come voglio a
unione nil e qualche elemento h2 così così
tipi o core.typed se lo si utilizza
correttamente non avrai il puntatore nullo
eccezioni quindi qui abbiamo una funzione se
hai una certa familiarità con i generici o
se hai familiarità con Haskell o
standard ml hai questa idea di come a
tipo generico di un tipo di parametrico
polimorfismo parametrico, quindi qui diciamo
stiamo facendo una dichiarazione che stiamo dicendo
per ogni tipo sarà una funzione
che prende quel tipo e restituisce il
lo stesso tipo si scopre che tecnicamente
questo dovrebbe essere solo l’identità giusta
questa è l’ unica funzione che potrebbe
in realtà faccio questo e quindi immagino di averlo fatto
questo errore ho che ho questo io
creare questo tipo di firma e quindi io sono
dicendo che ho una funzione chiamata
la mia identità ci vuole una X poi cosa fa
lo fa provare ad aggiungerne uno così esso
ovviamente non può essere l’identità che non è
possibile giusto perché non funziona
per tutti i tipi quindi ho intenzione di richiedere
tipo di tribunale e ho intenzione di controllare questo
namespace quindi ci vuole un secondo perché
è di nuovo un work in progress quindi noi
deve caricare la libreria di Let e caricare
la funzionalità di script di chiusura ma come
appena caricato è in realtà molto
più veloce quindi non ci facciamo andiamo esso
dice che stiamo provando a sapere che dà un
errore abbastanza prolisso che ti dice
cercando di fare qualcosa con i numeri quando
lo dici quando hai detto che il tipo era
per ogni tipo quindi se cambio questo e
è molto più veloce perché è caricato così
è roba abbastanza nuova ma io
penso che le persone lo useranno così core
tipo è effettivamente già utilizzato in
produzione
ci sono molte persone che stanno investendo
in realtà è la ragione per cui Ambrose ha colpito
il suo obiettivo era così veloce perché lì
erano così tante tante aziende e
le startup gli davano soldi per farlo
i lavori come d3.js esattamente come vuoi
chiamare se si desidera chiamare un metodo
in d3 userai il punto
notazione ma non devi davvero farlo
questo te stesso ci sono parecchi d3
in gente come piace mettere d3
e la sceneggiatura di chiusura insieme quindi c’è
lavoro precedente che è stato fatto su questo così io
cercherei solo degli esempi di chiusura
script in d3 e copia gli schemi
che trovi
[Applausi]

Please follow and like us: