Press "Enter" to skip to content

GOTO 2018 • A Cartoon Quest: New Adventures for WebAssembly • Lin Clark


[Musica]
ciao a tutti
Sono Lynn Clark e realizzo cartoni in codice
e lavoro anche a Mozilla dove trovo
armeggiare con i linguaggi di programmazione
come JavaScript e ruggine e con le cose
come il webassembly che è bene che sarò
parlando di oggi e voglio solo
ti faccio sapere se hai qualche domanda
come sto andando attraverso il discorso che puoi
metterli nella app di go-to o, naturalmente
chiedili alla fine prima di iniziare I
voglio far sapere alla gente che questo discorso è
un po ‘diverso dagli altri discorsi
L’ho dato va a fondo, no
andare abbastanza in profondità come altri discorsi
Ho dato ma penso che tu sia ancora
mi piacerà così prima di tutto quello che è il web
assemblare quale assemblaggio è un modo di
esecuzione di linguaggi di programmazione diversi da
JavaScript sul web fino ad ora se
volevi fare qualcosa su una pagina web
come eseguire un calcolo o un cambiamento
qualcosa nel Dom l’unica lingua
che potevi usare era JavaScript ma
ora che c’è il web assembly puoi farlo
usa altri linguaggi come C o C ++ o
ruggine li compili al web assembly
e quindi puoi eseguirli sul web
pagina proprio come avresti JavaScript ora
Vorrei avere il tempo di andare più in dettaglio
sulle basi di come assemblaggio web
funziona perché è piuttosto affascinante
ma sfortunatamente anche questo discorso
pieno zeppo di futuro che io davvero
non posso parlare troppo di quello che sta succedendo
nel presente ciò che già esiste in
Infatti è così pieno zeppo che non posso
anche approfondire su tutte le cose
che sono in questo discorso ma mi piace
dando più profondità quindi ho postato un
articolo due settimane fa puoi trovare su
il blog di hack e che copre un sacco di
la roba con collegamenti extra per darti
più quella profondità ora i primi
i collegamenti in quell’articolo sono una serie
Ho pubblicato prima webassembly
ha iniziato a essere attivato per impostazione predefinita in
browser nel marzo del 2017 che potresti avere
visto questo è uno dei
illustrazioni da quella cosa che
Ho notato e ho trovato interessante
da quando ho iniziato a parlare di web
il montaggio è quindi questo equivoco
che le persone hanno e l’idea sbagliata
è l’assemblea del web che è atterrato
browser nel 2017 che abbiamo chiamato
il prodotto minimo vitale o il
VP di webassembly la gente pensa che sia così
è la versione finale di web sembly loro
pensa che quello sia il web assembly
avremo fino in fondo
futuro e posso capire dove quel
equivoco viene dal web
gruppo di comunità di assemblaggio è davvero
impegnato a retrocompatibilità così
l’assemblea web che crei oggi
continuerà a lavorare nei browser in
il futuro ma questo non significa quello
la sua funzionalità completa non significa
quell’assemblea di web ha tutto il
caratteristiche che sta per avere e in
Fatto questo è lontano dal caso ci sono
così tante funzionalità che stanno arrivando sul web
assemblea che sta andando fondamentalmente
modificare il tipo di cose che puoi
fare con il web assembly penso a questi
le caratteristiche future sono simili all’abilità
albero in un videogioco che abbiamo riempito completamente
nella vista dall’alto di queste abilità ma
c’è ancora questo intero albero delle abilità
di seguito è necessario compilare per sbloccare
tutte le applicazioni in modo diamo un’occhiata a
cosa è stato compilato già e poi
possiamo vedere ciò che deve ancora venire così
molto all’inizio della storia del webassembly
inizia con unscripted
che ha reso possibile l’esecuzione di codice C ++
sul web trasponendolo a
JavaScript e che ha reso possibile
portare basi di codice C ++ di grandi dimensioni per
cose come giochi e desktop
applicazioni al web ma risulta
che è stato generato automaticamente
era ancora molto più lento di quando
quello stesso codice era in esecuzione nativamente a
il colpo di intuizione ha risolto questo sebbene uno
di Firefox il JavaScript di Firefox
ingegneri motori ha visto come poteva
fallo correre veloce e questo ci ha dato
assam j / s una volta gli altri produttori di browser
ho visto quanto veloce di j / s potrebbe andare loro
iniziato ad aggiungere ottimizzazioni ai loro
anche i motori, ma non era la fine
la storia è stata solo l’inizio
c’erano ancora molte cose
i motori potrebbero fare per renderlo più veloce ma
non potevano farlo in JavaScript stesso
invece avevano bisogno di una nuova lingua
che è stato progettato specificamente per essere
anche compilato e quello era assemblaggio web
quindi quali competenze erano necessarie per questo
prima versione del web assembly per ottenere il
prodotto minimo vitale che potrebbe
effettivamente eseguire codice C e C ++ sul web
bene le persone che stavano lavorando su cosa
l’assemblea sapeva che non volevano solo
per supportare C e C ++ ne volevano molti
lingue diverse per essere in grado di
compilare per il web assembly alla fine così
avevano bisogno di una compilazione agnostica del linguaggio
obiettivo avevano bisogno di qualcosa come il
linguaggio assembly che cose simili
le applicazioni desktop sono compilate per
come x86 ma questo linguaggio assembly
non sarebbe per un fisico reale
macchina sarebbe per un concettuale
macchina e quell’obiettivo del compilatore doveva
essere progettato in modo che possa funzionare molto
veloci applicazioni di assemblaggio web altrimenti
correre sul web non starebbe al passo con
aspettative degli utenti per liscio
interazioni nel gameplay e c’è
anche caricare gli utenti di ton avere certe
aspettative su quanto velocemente qualcosa
caricherà così per le applicazioni desktop
l’aspettativa è che caricheranno
veloce perché sono già installati
sul tuo computer per applicazioni web
l’aspettativa è anche che lo faranno
caricare piuttosto veloce perché web
le applicazioni sono solitamente progettate in questo modo
che non devono consegnare troppo
dati sulla rete quando si combina
queste due cose anche se diventa difficile
le applicazioni desktop sono solitamente carine
basi di codice di grandi dimensioni quindi quando sono sul
web c’è molto da scaricare e
compilare quando l’utente accede per la prima volta
URL quindi avevamo bisogno del nostro target del compilatore
essere compatto in modo che possa andare oltre il
web velocemente la lingua è quella destinazione
anche il web assembly deve essere in grado
usare diversamente la memoria dal modo
che JavaScript utilizza la memoria di cui avevano bisogno
essere in grado di gestire direttamente il proprio
memoria per dire quali morsi vanno insieme
e questo è perché lingue come C e
C ++ ha una funzione di basso livello chiamata
puntatori si può avere una variabile che
non ha un valore in esso, ma invece
ha l’ indirizzo di memoria di un valore quindi se
si sta andando a sostenere i puntatori
il programma deve essere in grado di scrivere e
leggi da indirizzi particolari ma tu
può avere il programma che hai scaricato
dal web solo accedendo byte in
memoria volente o nolente che usa qualunque cosa
indirizzi che vogliono così per
creare un modo sicuro per dare accesso a
si usa la memoria come un programma nativo
dovevamo creare qualcosa che potesse
dare accesso a parti molto specifiche di
e nient’altro per fare quest’arma
utilizza semplicemente un modello di memoria lineare e
questo è implementato usando queste cose
chiamato array tipizzati che è fondamentalmente
proprio come un array come un JavaScript
array eccetto che solo questo array
contiene byte di memoria così quando sei
accedendo a te stai semplicemente usando l’array
indici che puoi trattare come se
erano indirizzi di memoria e questo
significa che puoi fingere questo
array è memoria C ++ quindi con tutti questi
le cose sul posto si potrebbe eseguire desktop
applicazioni e giochi nel tuo browser
come se fossero in esecuzione nativamente sul tuo
computer e quello era praticamente il
set di abilità che era quello di webassembly
rilasciato come MVP è stato davvero un MVP a
Prodotto minimo vitale consentito
alcuni tipi di applicazioni per funzionare
e potresti averne visto uno
queste applicazioni abbiamo avuto questo arch a
J si confi qui a Berlino alcuni
mesi fa ed è stato anche un github
universo che sta andando all’altro
conferenze che puoi programmare puoi
programma le animazioni sullo spazio usando
web assembly quindi se ne hai la possibilità
dovrebbe controllare questo
anche se l’MVP ha aperto un po ‘d’uso
casi anche se c’erano ancora una miriade di
altri per sbloccare il prossimo conseguimento a
sbloccare è applicazioni più pesanti
puoi immaginare se qualcosa di simile
Photoshop era in esecuzione nel tuo browser
se potessi caricarlo istantaneamente
qualsiasi dispositivo come te con Gmail che abbiamo
ho già iniziato a vedere cose come questa
ad esempio, il team di AutoCAD ha fatto
il loro software CAD disponibile nel
browser e adobe hanno realizzato lightroom
disponibile tramite il browser tramite web
assemblaggio pure ma ci sono ancora a
alcune caratteristiche che abbiamo bisogno di mettere in atto
per assicurarsi che tutte queste applicazioni
anche il più pesante dei pesi massimi
le applicazioni possono funzionare bene nel browser
così grande da cui abbiamo bisogno di supporto
computer moderni multi-threading
avere più core è fondamentalmente come un
testa che ha più cervelli che possono
tutto sta lavorando sullo stesso problema a
nello stesso tempo e quello può fare le cose
andare molto più veloce ma per fare uso di
quei core che devi supportare
threading a fianco di threading c’è
un’altra tecnica che utilizza moderna
hardware e che ti permette di
elaborare il
in parallelo è sim D single
istruzioni multiple dati con sim D
è possibile prendere un pezzo di memoria
e diviso in diversi
unità di esecuzione che sono un po ‘ come
core e poi hai lo stesso bit di
codice la stessa istruzione corre su tutto
di quelle unità di esecuzione ma lo faranno
ognuno agisce sul proprio pezzetto di
dati
un’altra capacità hardware quella
webassembly deve trarre il massimo vantaggio
di è indirizzi di memoria indirizzamento a 64 bit
sono solo numeri quindi se la tua memoria
gli indirizzi sono lunghi solo 32 bit
hanno solo così tanti di memoria che si rivolge
può avere solo indirizzi sufficienti per 4
gigabyte di memoria lineare ma con
Indirizzi a 64 bit hai 16 exabyte
ora ovviamente non ne hai effettivamente 16
exabyte di memoria effettiva nel tuo
computer così il massimo è soggetto a
comunque molta memoria il tuo sistema può
in realtà ti danno, ma questo prende il
limitazione artificiale sullo spazio degli indirizzi
fuori dal webassembly
per queste applicazioni non solo
ne hanno bisogno per correre velocemente anche se abbiamo bisogno
tempi di caricamento per essere ancora più veloce di loro
già lo sono
ci sono alcune abilità di cui abbiamo bisogno
in particolare per migliorare i tempi di caricamento uno
il grande passo è fare la compilazione di streaming
per compilare bene un file di assemblaggio web
ancora in fase di download webassembly era
progettato specificamente per consentire facile
compilazione streaming in Firefox noi
in realtà lo compiliamo così velocemente più velocemente
rispetto al suo arrivo sulla rete
questo è praticamente fatto compilando dal
tempo hai finito di scaricare il file e
altri browser stanno aggiungendo lo streaming a
un’altra cosa che aiuta è avere un
compilatore più livelli per noi e Firefox che
significa avere due compilatori il primo
il compilatore di base entra nel più breve tempo possibile
mentre il file inizia a scaricare e il file
il codice che genera è veloce ma non è un
cento per cento più veloce che potrebbe essere
per ottenere quel tocco in più di prestazioni noi
eseguire un altro compilatore chiamato
ottimizzazione del compilatore su più thread
sullo sfondo ora questo prende un
più a lungo da compilare ma genera
codice estremamente veloce, quindi una volta fatto
scambiamo la versione di base con
la versione completamente ottimizzata e lo siamo
anche lavorando su una nuova ottimizzazione
compilatore chiamato gru lift
è progettato per compilare il codice rapidamente
possibile compilare il codice in parallelo in a
funzione per livello di funzione allo stesso
tempo il codice che genera diventa uniforme
prestazioni migliori rispetto alla nostra attuale
ottimizzando il compilatore e questo è nel
versione di sviluppo di Firefox in questo momento
è disabilitato di default ma una volta noi
abilitarlo, arriveremo al punto
codice ottimizzato ancora più veloce e quello
il codice funzionerà ancora più velocemente ma c’è un
trucco ancora migliore che possiamo usare
rendere non abbiamo compilare a tutti
nella maggior parte dei casi con web assembly se
si carica lo stesso codice sui carichi della pagina
compilerà allo stesso codice macchina
non ha bisogno di essere cambiato in base a
qualunque sia il flusso di dati attraverso il
codice come JIT javascript ottimizzato
la compilazione significa che possiamo
memorizzare il codice compilato nel HTTP
cache poi quando la pagina si sta caricando e
va a prendere il file wasm invece di
tirando su il file stesso
estrarrà la macchina precompilata
codice da quella cache, quindi salta
compilazione completamente per qualsiasi pagina
hanno già visitato questo nel
cache e ci sono altri modi in cui noi
può accelerare ulteriormente laddove noi
puoi saltare ancora più lavoro quindi rimanete sintonizzati su
guarda cosa succede per migliorare il carico
tempi in cui siamo con il supporto di questi
hai pesato le domande in questo momento
per il threading abbiamo una proposta è
praticamente fatto ma un pezzo chiave di questo
i buffer di array condivisi dovevano essere girati
nei browser in anticipo rispetto a prima
anno e saranno accesi
di nuovo spegnerli era solo un
misure di sicurezza temporanee per ridurre il
impatto del problema di sicurezza dello spettro
questo è stato scoperto nelle CPU in precedenza
anno ma i progressi sono stati fatti quindi rimani
sintonizzato per quello SCIM D è sotto molto
sviluppo attivo al momento woz I’m
64 per questo abbiamo una buona immagine di
come funzionerà è abbastanza simile a
in che modo x86 il nostro braccio ha aggiunto il loro supporto
Indirizzamento a 64 bit aggiunto lo streaming
compilazione quasi un anno fa in Firefox
e altri browser stanno lavorando su questo
anche ora e abbiamo aggiunto anche la nostra linea di base
compilatore intorno allo stesso tempo e alcuni
altri browser hanno aggiunto lo stesso
tipo di architettura nell’ultimo anno
in Firefox ci stiamo avvicinando
supporto di atterraggio per HTTP implicito
il caching e questi altri miglioramenti sono
in discussione anche se questo è tutto
ancora in corso
già vedere alcuni di questi
applicazioni pesanti in uscita
oggi perché webassembly già dà
queste applicazioni le prestazioni che
hanno bisogno ma una volta che queste caratteristiche sono
tutto a posto che sarà un altro
successo sbloccato e più di questi
applicazioni pesanti saranno
in grado di venire al browser
ma quale assemblaggio non è solo per i giochi
e per queste applicazioni pesanti
è anche pensato per la bravura con regolarità
sviluppo web per il tipo di web
sviluppo che vengono utilizzati dagli sviluppatori web
per i piccoli moduli tipo di web
sviluppo dove il piccolo web assembly
i moduli possono essere introdotti in luoghi
dove assemblaggio web senso quelli
piccoli angoli della tua app in cui l’app
deve fare un sacco di elaborazione pesante e
che potrebbe essere eseguito più velocemente con il web assembly
e ancora questo è un caso in cui alcuni di
sta già accadendo che tu sei già
vedendo piccoli moduli di assemblaggio web essere
incorporato nei luoghi in cui ti trovi
piccoli moduli che fanno molti lavori pesanti
come il parser nelle mappe di origine
libreria utilizzata negli strumenti di sviluppo di Firefox
e nel web pack riscrivendo questa fonte
Analizzatore di mappe in assemblaggio web che il team ha visto
un aumento di velocità undici volte e una parola
elaborando un’accelerazione media di 86
tempi più veloci con l’assemblaggio web nel loro
nuovo parser ma per questo tipo di
usare per essere veramente diffuso per le persone
per essere davvero a proprio agio farlo noi
bisogno di avere un paio di cose in atto
quindi per prima cosa abbiamo bisogno di chiamate rapide tra
javascript e web assembly perché se
stai integrando un piccolo modulo in
un sistema JavaScript esistente c’è a
buone probabilità che tu abbia bisogno di chiamare
tra le due lingue molto
avrai bisogno di quelle chiamate per essere veloce ma
quando il webassembly è venuto fuori per la prima volta
le chiamate non erano veloci, questo è il posto dove arriviamo
di nuovo a quell’intero MVP i motori
aveva il supporto minimo per le chiamate
tra i due hanno appena fatto le chiamate
lavoro non li hanno fatti veloci così
i motori devono ottimizzare qui
recentemente finito il nostro lavoro su questo in
Firefox ora alcune di queste chiamate sono
in realtà più veloce di non in linea
JavaScript JavaScript chiama e altro
i motori sono tutti
lavorare su questi miglioramenti
ci porta ad un’altra cosa però quando
stai chiamando tra JavaScript e
assemblaggio web spesso è necessario passare i dati
tra loro è necessario passare valori
in una rete semplicemente funziona o ritorna
valore da esso
questo può anche essere lento e può essere
difficile anche ce ne sono un paio
motivi per cui è difficile uno è perché a
nel momento solo quale assemblaggio
capisce i numeri questo significa che tu
non può passare valori più complessi come
oggetti come parametri è necessario
convertire quell’oggetto in numeri e
quindi mettilo nella memoria lineare di te
passare webassembly la posizione in lineare
memoria ma è un po ‘ complicato
e ci vuole del tempo per convertire il
i dati nella memoria lineare, quindi abbiamo bisogno di questo
per essere più facile e veloce un’altra cosa
quello di cui abbiamo bisogno è l’integrazione con il
supporto del modulo ES integrato nel browser
adesso se avvii un web sembly
modulo devi usare un’API imperativa
quindi chiami una funzione e questo dà
si esegue il back up del modulo ma questo significa che
il modulo web assembly non è realmente
parte del grafico del modulo degli script Java in
per usare l’ importazione e l’esportazione come te
fai con i moduli JavaScript necessari
hanno che l’integrazione solo di essere in grado di
importare un’esportazione non ci ottiene tutti i
anche se abbiamo bisogno di un posto dove andare
distribuire questi moduli e scaricarli
da loro e strumenti per raggrupparli
qual è il NPM per il web assembly bene
che dire di NPM qual è il pacchetto web o
pacco per il web assembly bene e riguardo
pacchetto web e pacchi questi moduli
non dovrebbe apparire diverso dal
le persone che li usano così non c’è
motivo per creare un intero separato
ecosistema abbiamo solo bisogno di strumenti per
integrarsi con loro ce n’è uno in più
cosa che dobbiamo fare molto bene in
applicazioni JavaScript esistenti e
questo è il supporto per le versioni precedenti di
browser anche quelli che non sanno cosa
il web assembly è necessario per essere sicuri
che non devi scrivere il tutto
seconda implementazione in JavaScript solo
quindi puoi supportare ie 11 quindi dove siamo
su questo bene chiama tra JavaScript
e il web assembly sono veloci e Firefox
ora e altri browser stanno funzionando
su di esso
per lo scambio di dati facile e veloce lì
sono alcune proposte che ti aiuteranno
questo ora come ho detto prima
motivo per cui devi usare la memoria lineare per
i tipi di dati più complessi sono perché
webassembly capisce solo i numeri il
solo i tipi che ha sono in sabbia galleggianti
con i tipi di riferimento propongo questo
cambierà questa proposta ne aggiunge una nuova
digita le funzioni di webassembly
come argomenti in cambio e questo tipo è
un riferimento a un oggetto dall’esterno
webassembly quindi un oggetto javascript ora
perché questo semplicemente non può operare direttamente
su questo oggetto per fare effettivamente le cose
come chiamare un metodo su di esso sarà ancora
è necessario utilizzare alcuni codice JavaScript per incollare così
questo significa che funziona ma è più lento di
deve essere per accelerare le cose
c’è una proposta che siamo stati
chiamando la proposta di binding dell’host
anche se i nomi potrebbero cambiare
presto lascia un modulo di campionamento web
dichiarare a quale colla deve essere applicata
importa ed esporta in modo che quello
la colla non ha bisogno di essere scritta dentro
JavaScript e tirando questa colla da
JavaScript nel web assemblare la colla
può essere ottimizzato completamente quando
chiamando l’ API del web incorporato ce n’è uno
più parte dell’interazione che possiamo
rendere più facile e che ha a che fare con
tenere traccia di quanto tempo è necessario per i dati
rimani in memoria se hai dei dati in
memoria lineare a cui j / s deve accedere
allora devi lasciarlo lì fino a quando
il JavaScript legge quei dati ma se
si lascia in lì per sempre si dispone di
ciò che è chiamato una perdita di memoria come si fa
sapere quando è possibile eliminare i dati come
sai quando JavaScript è fatto con esso
attualmente devi gestirlo
te stesso una volta che il JavaScript è fatto
con i dati che il codice J deve chiamare
qualcosa come una funzione gratuita da liberare
il ricordo ma questo è noioso e
incline agli errori per rendere questo processo più semplice
stiamo aggiungendo i deboli riferimenti a JavaScript
con questo sarai in grado di osservare
oggetti sul lato JavaScript e poi
effettuare la pulizia dal lato del gruppo Web quando
quell’oggetto è garbage collection così
queste proposte sono tutte in volo nel
nel frattempo l’arrugginito sistema eco ha
creato strumenti per automatizzare tutto questo
tu e quel polyfill le proposte che
sono in volo uno strumento in particolare è
degno di nota perché altre lingue
può usarlo – si chiama wasm bind gen
quando vede che dovrebbe essere il tuo allenatore di ruggine
fare qualcosa come ricevere o restituire
determinati tipi di valori JavaScript o
Oggetti Dom che creerà automaticamente
il codice della colla JavaScript che fa questo
per te così che non ne hai nemmeno bisogno
pensaci e perché è scritto
in un modo indipendente dalla lingua altro
le catene di strumenti linguistiche possono adottarlo
integrazione del modulo quattro es abbiamo il
proposta praticamente fatta e sono ora
lavorare con i fornitori di browser per
implementalo e per il supporto di toolchain
ci sono strumenti come Waze e pack in
l’ecosistema della ruggine che automaticamente
esegue tutto il necessario per il pacchetto
anche il codice per NPM e i bundler
lavorando attivamente su supporto finalmente per
compatibilità all’indietro c’è il wasm
allo strumento j / s che acquisisce un file wizened
e sputa il suo equivalente J ass ora
questa J non sarà veloce ma almeno
significa che funzionerà in età avanzata
versioni di browser che non lo fanno
capire l’assemblaggio del web, quindi stiamo arrivando
vicino a sbloccare questo risultato e
una volta che lo sblocchiamo apriamo il percorso per
un altro – cosa sta riscrivendo le parti grandi
di cose come framework JavaScript e
assemblaggio web e l’altro sta rendendo
possibile per la compilazione tipizzata staticamente a
Le lingue di J per compilare semplicemente web
invece per esempio avere lingue
come Scala J o ragione o olmo o
Kotlin compila il webassembly per entrambi
questi casi d’uso webassembly ha bisogno di
supporta le funzionalità linguistiche di alto livello
per prima cosa guardiamo alla riscrittura di parti di
Framework JavaScript questo potrebbe essere buono
per un paio di motivi, ad esempio, prendi
reagire una cosa che si potrebbe fare è
riscrivere l’ algoritmo di diffusione Dom e
ruggine che ha molto ergonomico
supporto multi-threading e così via
potrebbe facilmente parallelizzabile
si potrebbe anche accelerare le cose da
allocare la memoria in modo diverso nel
Dom virtuale invece di creare un mazzo
di oggetti che devono essere spazzatura
raccolti potresti usare una memoria speciale
schema di allocazione della memoria per esempio voi
potrebbe usare uno schema di allocazione di bump che
ha un’allocazione estremamente economica e tutto
subito l’ assegnazione di D in modo che potesse
potenzialmente contribuire ad accelerare le cose e
ridurre l’ utilizzo della memoria ma avresti ancora bisogno
per interagire con oggetti JavaScript
cose come componenti da quel codice
non puoi semplicemente scrivere tutto a
memoria lineare perché sarebbe
difficile e inefficiente quindi è necessario
essere in grado di integrarsi con il browser
GC allo stesso tempo perché anche se
stai gestendo il Dom virtuale
struttura e memoria lineare siamo ancora
avere molti di questi oggetti di J che
hai bisogno di referenziare le cose
come componenti che devono essere gestiti
dalla VM JavaScript alcuni di questi
Gli oggetti JavaScript devono puntare ai dati
e memoria lineare e qualche volta i dati
e la memoria lineare dovrà puntare a
gli oggetti JavaScript se questo finisce
creare cicli può significare problemi per
il raccoglitore di rifiuti vuol dire il
il netturbino non sarà in grado di dirlo
se gli oggetti vengono usati più così
non saranno mai raccolti così web
l’assemblaggio richiede l’integrazione con il GC
per assicurarsi che questo tipo di croce
le dipendenze dei dati linguistici funzionano e questo
aiuterà anche il collegamento che è il
compilato a J come la ragione di Scala J
ed elm perché usano gli script Java
garbage collector quando essi elaborati a
Jess perché l’assemblea web avrà
supporto per lo stesso GC di JavaScript
quello integrato nel motore
queste lingue saranno in grado di compilare
al web assembly e basta usare lo stesso
garbage collector non dovranno
cambiare il modo in cui GC funziona nel loro linguaggio
anche bisogno di un migliore supporto per la gestione
eccezioni alcuni linguaggi come la ruggine fanno
senza eccezioni ma altre lingue
come C ++ Jas o l’ eccezione c-sharp
la manipolazione è a volte usata estesamente
è possibile gestire le eccezioni di polyfill
attualmente ma il polyfill rende il
il codice funziona molto lentamente, quindi il default
è quando si compila al web assembly
attualmente da compilare senza eccezioni
maneggio
ma dal momento che JavaScript ha anche delle eccezioni
se hai compilato il tuo codice per non usarlo
eccezioni potresti avere un’eccezione
ancora gettato in opera se chiami
Una funzione di una funzione JavaScript e
genera un’eccezione e lingue come
la ruggine sceglie di abortire in questo caso così noi
è necessario rendere questo lavoro migliore di un altro
cosa che le persone lavorano con il gelsomino
compili di linguaggi Jazz sono abituati a
avendo un buon supporto per il debug dei dentali
in tutta la mangiatoia
i browser rendono facile il passaggio
JavaScript abbiamo bisogno dello stesso livello
supporto per il debug di web assembly e
i browser troppo e, infine, per molti
lingue funzionali che devi avere
supporto per qualcosa chiamata chiamate di coda
ora non ho intenzione di ottenere troppo in
i dettagli su questo ma fondamentalmente a meno che
si chiama una nuova funzione senza aggiungere un
nuovo stack frame in pila quindi per
lingue funzionali che supportano questo
non ci occuperemo anche di webassembly
quindi dove siamo su questo per la spazzatura
collezione ci sono due proposte
attualmente in corso gli oggetti digitati
proposta per JavaScript e GC
proposta per il web semplicemente oggetti digitati
renderà possibile descrivere un
struttura fissa dell’oggetto e questo è
sarà discusso in un prossimo
tc39 incontro le web assembly che GC farà
è possibile accedervi direttamente
struttura e questa proposta è sotto
sviluppo molto attivo con entrambi
questi in posizione sia javascript che web
il montaggio saprà che aspetto ha un oggetto
Mi piace e posso condividere quell’oggetto e
accedere in modo efficiente ai dati memorizzati su di esso
il nostro team ha già già un
prototipo di questo lavoro ma andrà
prenditi un po ‘di tempo per farli passare
standardizzazione quindi probabilmente lo siamo
guardando a volte l’anno prossimo
la gestione delle eccezioni è ancora in
fase di ricerca e sviluppo e
c’è lavoro ora per vedere se può prendere
vantaggio di altre proposte come la
tipi di riferimento proposta che io
menzionato prima per il debug c’è
attualmente qualche supporto e browser dev
strumenti per esempio, si può fare un passo attraverso
il formato testuale di web assembly e
Firefox questo debugger ma non lo è ancora
ideale vogliamo essere in grado di mostrarti
dove ti trovi nel tuo vero codice sorgente
non nell’assemblea la cosa che noi
bisogno di fare per quello è capire come
le mappe di origine sono di tipo Mappe di origine
cosa funziona per il web assembly quindi c’è un
sottogruppo della comunità degli assemblaggi web
gruppo che sta lavorando per specificarlo
e anche la coda chiama la proposta
in corso una volta che tutti sono a posto
avremo sbloccato JavaScript
quadri e molti compilati per J’s
lingue in modo tale che siano tutti risultati
che possiamo sbloccare all’interno del browser
ma che dire al di fuori del browser ora
potresti essere confuso quando parlo
al di fuori
browser perché non è il browser cosa
usi per vedere il web e non è quello
proprio nel nome web assembly ma il
la verità è le cose che vedi nel
browser l’HTML e CSS e JavaScript
sono solo una parte di ciò che rende il web
lì nella parte visibile c’è quello che tu
utilizzare per creare un’interfaccia utente in modo che
sono i più ovvi ma ce n’è un altro
parte davvero importante del web che
ha proprietà che non sono così visibili
questo è il link ed è molto speciale
tipo di collegamento l’innovazione di questo link
è che posso collegarmi alla tua pagina senza
dovendo metterlo in un registro centrale
e senza doverti chiedere nemmeno saperlo
chi sei io posso solo mettere il link
c’è questa facilità di collegamento senza
eventuali sviste o colli di bottiglia
abilitato il web che abbiamo oggi
questo è ciò che ci ha permesso di formarli
comunità globali con persone che noi
non lo so, ma se tutto ciò che abbiamo è
il link ci sono due problemi qui
che non abbiamo affrontato la prima
vai a visitare il sito e lo consegni
qualche codice per te come fa a sapere cosa
tipo di codice che dovrebbe fornire a voi
perché se tu stai correndo su un Mac allora
hai bisogno di un diverso tipo di macchina
codice di quello che fai per Windows è per questo
hai diverse versioni di programmi
che compri quando corri per eseguirli
diversi sistemi operativi dovrebbero a
sito web ha una versione diversa del
codice per ogni possibile dispositivo n
invece il sito ha una versione di codice
il codice sorgente e questo è ciò che l’ argento
all’utente poi viene tradotto a
codice macchina sul dispositivo dell’utente la
il nome per questo concetto è la portabilità così
è fantastico da cui puoi caricare il codice
persone che non ti conoscono e tu no
sapere che tipo di dispositivi stai utilizzando
ma questo ci porta ad un secondo problema
se non conosci queste persone di cui
pagine web che stai caricando come fai a sapere
che tipo di codice che stanno dando
tu
potrebbe essere il codice dannoso che potrebbe essere
cercare di assumere il controllo del tuo sistema no
questa visione del web che esegue il codice da
chiunque sia collegato a te, significa questo
devi fidarti ciecamente di chiunque altro
sul web questo è dove l’altra chiave
concetto dal web
arriva e questo è il modello di sicurezza
che chiamerò fondamentalmente la sandbox
il browser prende la pagina l’altra
codice della persona e invece di lasciarlo
correre volenti o nolenti nel vostro sistema,
lo mette nella sandbox e mette a
un paio di giocattoli lì dentro che non lo sono
pericoloso in modo che il codice possa fare un po ‘
cose ma lascia il pericoloso
cose al di fuori della sandbox quindi
l’utilità del collegamento è basata su questi
due cose portabilità la capacità di
fornire il codice per gli utenti e farlo girare su
qualsiasi tipo di dispositivo che può eseguire a
browser e la sandbox la sicurezza
modello che ti consente di eseguire quel codice
senza rischiare l’integrità del tuo
sistema quindi perché fa questa distinzione
importa perché fa la differenza se
pensiamo al web è qualcosa che
il browser ci mostra utilizzando HTML CSS e
JavaScript o se pensiamo al web in
termini di portabilità nella sandbox
perché cambia modo di pensare
web assembly puoi pensare al web
il montaggio è solo un altro strumento nel
la cassetta degli attrezzi del browser che è
un altro strumento nella casella degli strumenti del browser
ma non è solo quello che ci dà anche noi
un modo per prendere questi altri due
funzionalità del web la portabilità
e il modello di sicurezza e portarli a
altri casi d’uso che ne hanno bisogno anche noi
può espandere il web oltre i limiti
del browser ora potresti star pensando
che questo è già successo con nodejs
ma come è oggi non lo capisco
noi lì non ci danno pieni
portabilità e non ci dà il
stessa sicurezza la stessa fiducia e
codice non attendibile che prende il nodo
JavaScript sul lato client che lo rende
possibile eseguirlo su server e altro
dispositivi in ​​modo che ci dà un po ‘
portabilità permette di correre
codice jazz su tutti i tipi di diverso
macchine ma devi ancora usarle
moduli nativi in molti casi perché
i moduli nativi spesso hanno prestazioni migliori o
potresti già avere il codice scritto in a
linguaggio come C che si desidera riutilizzare
nella tua app ma i moduli nativi no
devono essere in esecuzione il motore
compilato per il tipo specifico di
macchina che l’utente esegue su così
questo non ci dà la piena portabilità
ci manca anche il nodo di sicurezza
avrebbe potuto prendere la sandbox dal
browser ma il nodo ha fatto il design
decisione in anticipo su quel modulo javascript
avrebbe accesso completo a
cose pericolose quindi moduli JavaScript
può fare cose come scrivere file e leggere
file fuori dalla tua macchina questi
funzionalità come full direct
l’accesso ai file sono giocattoli pericolosi
giocattoli pericolosi che non permettiamo
il browser anche se lo sono
pericoloso però per i tipi di utilizzo
casi in cui il nodo è stato creato per questi
tipi di questo tipo di accesso fanno a
una certa quantità di senso la cosa che voglio
chiarire qui è però tale nodo
fatto una scelta e davvero è quel nodo
ha avuto una scelta da fare perché con il
modo in cui funziona il motore Jas
l’unica funzionalità che javascript
ha accesso a ciò che gli dai così
per J come moduli non avrebbe potuto fare a
scelta diversa sulla sandboxing ma
per i moduli nativi vedere unboxing è inferiore
di una scelta ora per nodo questo è un controverso
punto che hanno già preso la decisione
che tutto dovrà essere
in grado di accedere alle risorse di sistema e
modi pericolosi quindi non c’è molto senso
nel pensare a come potresti
limitare l’accesso ai moduli nativi, se lo sei
eseguire un’applicazione nodo sul tuo
computer in pratica hai detto che mi fido
questo codice ma per quanto riguarda altri casi d’uso
sarebbe bello avere entrambi i
portabilità e sicurezza del web
essere in grado di eseguire codice non affidabile su qualsiasi
tipo di dispositivo senza veramente pensare
ne
quale assemblaggio rende possibile ciò
il montaggio inizia con i vantaggi di
j / s Portabilità e capacità di essere
sandbox e ciò che aggiunge è la performance
dà agli sviluppatori le prestazioni che
hanno bisogno di che significa che non lo fanno
devono ricorrere a su scatola di sabbia nativo
codice per ottenere tale prestazione in modo che l’uso
casi che potrebbero trarre vantaggio da questo
cose come il cloud e blockchain e
l’Internet of Things avrà ora
accesso a loro e parlerò di più
in che modo l’assemblaggio dà loro l’ accesso
a quelle cose ma voglio finire
con il nodo prima perché anche se nodo
non ha alcuna utilità per la capacità di simulare web blaze
eseguire webassembly di codice non attendibile può ancora
nodo di aiuto quindi cosa potremmo fare con il nodo
come potremmo migliorare il nodo
con il web assembly
potremmo portare piena portabilità da notare
come ho detto prima, la nota ti dà di più
della portabilità che ha JavaScript
sul web ma hai ancora bisogno di nativo
moduli che sono scritti in lingue
come C che deve essere compilato per il
tipo specifico di macchina che l’utente
sta funzionando e quello è compatto
la compilazione avviene quando l’utente
installa o il manutentore farà pre
compila queste cose come binari e
mantenere tutta questa matrice di differenti
binari
ora se questi moduli nativi sono stati scritti
nel web assembly invece non lo farebbero
devono essere compilati appositamente per il
l’ architettura di destinazione invece sono solo
eseguire in JavaScript come il nodo funziona ma
lo fanno quasi per prestazioni native
quindi ottiene una portabilità completa per il
codice che esegue un nodo si potrebbe dire il
Esatta la stessa app del nodo ed eseguila
tutti i diversi tipi di dispositivi senza
dovendo compilare tutto tranne che cosa
‘semplicemente non ha accesso diretto a
le risorse del sistema che dobbiamo passare
nelle funzioni in modo che possa funzionare con il
sistema operativo proprio come facciamo con
Moduli JavaScript nel nodo 4 questo nodo
probabilmente includerà molto del
funzionalità questo e cose come la C
libreria standard e cose che sono
parte di POSIX il funzionamento portatile
interfaccia di sistema che è più vecchia
standard che aiuta con la compatibilità
quindi i moduli avrebbero sicuramente bisogno di un sacco
di mettere in pausa come funzioni tutto ciò che il
il nucleo del nucleo gente avrebbe bisogno di fare è
capire il set di funzioni a
esporre e l’API da utilizzare per farlo
ma non sarebbe bello se lo fosse
in realtà qualcosa che non era standard
qualcosa che era limitato al solo
nodo ma potrebbe anche essere usato attraverso
altri runtime e altri casi d’uso anche a
POSIX per assemblaggio web se lo farai a
POSIX un sistema di assemblaggio web portatile
interfaccia e se ciò fosse fatto nel
modo giusto si potrebbe anche implementare
implementare la stessa API per il web questi
le API standard possono essere polifivate
web API esistenti e queste funzioni
non farebbe parte degli assembly web
di nuovo ci sarebbero gli host di assembly web
quello non li avrebbe disponibili ma
per quelle piattaforme che potrebbero fare
uso di loro ci sarebbe un’API unificata
per chiamare queste funzioni non importa
su quale piattaforma era in esecuzione il codice
e questo renderebbe moduli universali
quelli che funzionano sia nel nodo e nel
il web è molto più facile quindi è qualcosa di simile
quel qualcosa che potrebbe davvero
capita che alcune cose funzionino in questo
le idee favoriscono c’è una proposta chiamata
mappe del nome del pacchetto che forniranno a
meccanismo per mappare il nome di un modulo in a
percorso per caricare quel modulo da e quello
sarà probabilmente supportato da entrambi
browser e nodo che possono usarlo per
fornire percorsi diversi nel carico così
moduli completamente diversi ma con il
stessa API con quel meccanismo in atto
ciò che rimane da fare è in realtà capire
quali funzioni hanno un senso e quali sono le loro
le interfacce dovrebbero essere non è attivo
lavoro su questo al momento ma un sacco di
le discussioni stanno accadendo e stanno andando
questa direzione in modo che appaia probabile che
succede in una forma o nell’altra che è
bene perché sbloccare questo ci fa
a metà strada per sbloccare qualche altro uso
casi al di fuori del browser e con questo
sul posto possiamo accelerare il ritmo così
quali sono alcuni esempi di questi altri
casi d’uso uno di questi è qualcosa come il CD
termina e liste di server e edge computing
quindi questi sono casi d’ uso in cui ti trovi
mettendo il tuo codice su quello di qualcun altro
server e quella persona si assicura che
il server è mantenuto e che il
il codice è vicino a tutti i tuoi utenti perché
vorresti usare webassembly in
in questi casi c’è una bella chiacchierata
spiegando esattamente questo in una conferenza
recentemente velocemente c’è un’azienda che
fornisce CBN e edge computing e
il loro CTO Tyler McMullen lo spiegò
in questo modo e sto parafrasando qui se
guardi come funziona un processo
il codice non ha funzioni di confine
avere accesso a qualsiasi memoria in questo
processo a cui vogliono accedere e possono farlo
chiama qualsiasi altra funzione che vogliono
quando stai facendo un sacco di cose diverse
i servizi delle persone nello stesso processo
questo è un problema che potrebbe accadere ora nella scena sandbox
essere un modo per aggirare questo ma poi tu
arrivare ad un problema di scala, ad esempio se
usi una VM JavaScript come Firefox di
SpiderMonkey tuo v8 di Chrome
ottieni una sandbox e puoi metterla
centinaia di istanze nel processo
ma il numero di richieste che velocemente
è la manutenzione di non solo bisogno
centinaia per processo ne servono decine
migliaia ora Tyler fa un lavoro migliore di
spiegando tutto questo nel suo discorso così
dovresti andare a vederlo, ma il punto
è che webassembly dà loro il
velocità di sicurezza e la scala necessaria per
questo caso d’uso quindi cosa devono fare
fare questo lavoro che avevano bisogno di creare
il proprio runtime che significa prendere un
compilatore di assemblaggi web qualcosa che può
compilare un assembly Web su codice macchina e
combinandola con le funzioni che
Stavo solo parlando per il web
compilatore di assemblaggio ne hanno usato uno che
uno su cui stiamo lavorando su Mozilla
chiamato gru lift che è molto veloce e
non usa tanta memoria per il
funzioni che interagiscono con il resto di
il sistema che hanno dovuto creare da soli
perché non abbiamo ancora quel portatile
interfaccia disponibile quindi è possibile
crea il tuo runtime oggi ma lo fa
ci vuole un po ‘di sforzo e questo è lo sforzo
dovrà essere duplicato attraverso
aziende diverse e se non l’avessimo fatto
basta avere l’interfaccia portatile ma noi
aveva anche un runtime comune che poteva essere
utilizzato in tutte queste società e
tutti questi altri casi d’uso che lo farebbero
sicuramente accelerare lo sviluppo allora
altre aziende potrebbero semplicemente usare che
runtime come fanno con no oggi
invece di creare il proprio da
zero quindi qual è lo stato di questo
anche se non esiste un runtime standard
tuttavia ci sono alcuni progetti in runtime
volo in questo momento sono chiamati
includi watham che è costruito sopra
LLVM e wasm jet e ne stiamo pianificando uno
è costruito sopra la gru, è così
chiamato tempo wasm e se si vuole ottenere
coinvolto con quello sentirsi libero di venire
per me dopo questo discorso una cosa che ho dimenticato
per parlare del motivo per cui l’assemblaggio web è
utile per cose come serverless e
l’edge computing è così quando sei
in esecuzione sul server di qualcun altro
bisogno di capire quanto caricare
le cose a capire quante CPU
i cicli che hai usato in alcuni posti lo chiamano
carburante parlano di quanto carburante tu
usato ma questo può essere difficile da fare quando
programmi diversi sono in esecuzione
contemporaneamente sulla stessa macchina ma
dal momento che gli assemblaggi web sono abbastanza vicini a
assemblaggio effettivo lo rende più facile
vedere quanto carburante userà qualcosa
un altro caso d’uso che usa questo concetto
di carburante o gas è la blockchain
ora purtroppo non ho abbastanza
tempo per spiegare la blockchain entrambi
perché questo discorso è breve e perché
la blockchain è davvero difficile da spiegare
ma ci sono alcune versioni di
blockchain che può davvero beneficiare
webassembly per esempio l’etherium
la comunità si sta muovendo verso il webassembly
in aetherium anno sono questi bit
di codice chiamato contratti intelligenti e
chiunque può scrivere un contratto intelligente e
poi altre persone chiamate minatori devono
eseguire quel contratto intelligente sul loro
macchine così dovrebbe suonare familiare
è il problema del codice non affidabile che noi
parlato di prima fino ad ora il
la comunità di etherium si è occupata di questo
avendo chiamato la propria lingua
solidità che limita il codice
può fare ma è un livello piuttosto alto
linguaggio è stato difficile calcolare come
molto gas quanti cicli eseguono quello
il codice prenderebbe così l’arma è semplicemente un
buona opzione per loro dà loro
la sicurezza facilita il calcolo
costo del gas e apre i contratti intelligenti
a una serie di nuove lingue che puoi pensare
di queste piattaforme blockchain come quasi
come un nuovo tipo di sistema operativo ma
quale pasilla può essere usato anche in più
i sistemi operativi tradizionali ora sono
chiaro, non sto parlando di correre
webassembly nel kernel
anche se le anime coraggiose stanno provando quello ma
Sto parlando di eseguire webassembly in
anello 3 in modalità utente, quindi si potrebbe fare
cose come avere un CL portatile CLI
strumento che potrebbe essere utilizzato in tutto
diversi tipi di sistemi operativi e
questo è abbastanza vicino a un altro caso d’uso
l’Internet delle cose che include
cose come la tecnologia indossabile e
queste sono le applicazioni di casa intelligente
di solito con risorse limitate
imballare molta potenza di calcolo in polvere e
non hanno molta memoria e questo è
esattamente il tipo di situazione in cui a
compilatore come sollevatori di gru e un runtime
come wow un po ‘di tempo avrebbe senso
perché sarebbero efficienti in basso
memoria e ce ne sono così tanti
diversi tipi di dispositivi che sono tutti
leggermente diverso quindi assemblati web
portabilità sarebbe davvero aiutare in questo
quindi questo è un altro posto dove il web
l’assemblaggio ha un futuro ora facciamo uno zoom
torna indietro e guarda questo albero delle abilità
detto all’inizio del discorso che
le persone hanno un’idea sbagliata del web
montaggio
questa idea che il webassembly che
Atterrato nel MVP era la versione finale
di webassembly
penso che tu possa vedere ora perché questo è un
malinteso si l’MVP ha aperto a
molte opportunità che ha reso possibile
per portare molte applicazioni desktop
al web ma abbiamo ancora molti usi
casi da sbloccare dal desktop pesante
applicazioni a piccoli moduli a
Quadri JavaScript a tutti i
cose al di fuori del browser come nodo
e liste di server e blockchain e
strumenti CLI portatili in Internet di
Le cose quindi l’assemblea web che abbiamo
oggi non è la fine della storia
perché l’ assemblea web ha ancora promesso
tenere in molti posti dove andare prima
dorme ora, prima che finisca, io solo
voglio dare un po ‘di cose, davvero
divertiti a lavorare su Mozilla perché capisco
lavorare su questi all’avanguardia
tecnologie ma mi diverto anche perché
Lavoro su problemi di coinvolgimento con alcuni
persone molto intelligenti e interessanti che ho avuto
la possibilità di collaborare con due di
loro in questo discorso luke wagner che è uno
dei co-creatori di scacchi di assam e
era una grande forza trainante e decisiva
webassembly si verifica fino all’ID schneider
chi conduce il nostro è stato un semplice sviluppatore web
sforzi di strumenti a mozilla quindi grazie
ad entrambi e grazie a tutti
ascoltando
[Applausi]

Please follow and like us: