
[Musica]
Mi chiamo Ben, lavoro in Google in
Monaco di Baviera su webassembly è un progetto I
iniziato tre anni fa con alcuni
colleghi che in realtà non colleghi
ma alcuni collaboratori di Mozilla e
da allora molte persone sono state
coinvolto il mio collega andreas Rosberg
funziona anche su Google , daremo a
presentazione di metà e metà, quindi siamo
Spegnerai nel mezzo così tu
può stare lì ed essere pauroso se tu
come se tu potessi sederti ma io andrò avanti e
inizia sì, puoi alzarti e darmi uno schiaffo
se dico qualcosa di sbagliato
okay, quindi parlerò di cosa
webassembly è il motivo per cui abbiamo fatto il webassembly
perché è così che in realtà il perché è
sarà più Andres come prova da descrivere
e parleremo di dove si trova
andando così ciò che è assemblaggio web quello che abbiamo
progettato è fondamentalmente un bytecode per il
il web è progettato per essere trasferibile ovunque
macchine su piattaforme così che tu
può scrivere un programma e arrivare a specie
correre a destra, una volta eseguito ovunque tipo di
promettimi quella testa java
è progettato per essere compatto e per essere
compatto è un formato binario quindi tu
non vedere il testo se non lo si disassembla
binario per essere universale ha a
in particolare il modello di esecuzione di basso livello
volevamo supportare linguaggi come il C ++
perché abbiamo osservato che molte persone avevano
le loro applicazioni plus plus come
come giochi e stiamo già compilando
li sul web e li eseguono
JavaScript così quei casi già utilizzati
che volevamo sostenere così dovevamo
assicurati che abbia funzionato bene al giorno d’oggi
che è davvero fantastico per me essere capace
per dire questo
è il supporto nativo in tutti i principali
browser che significa Chrome Firefox
Safari e edge che abbiamo sviluppato in under
gli auspici di un gruppo di comunità w3c
che sostanzialmente permette a chiunque di unirsi
e commentare e anche noi abbiamo un lavoro
gruppo che è un corpo più formale che
in un certo senso approva definitivamente
specifiche l’idea è che noi
non volevo reinventare la piattaforma web
ma integrarsi con la piattaforma web così
qualsiasi API che avete per esempio, che è
disponibile in JavaScript puoi prenderti
attraverso il web assembly, quindi c’è un sacco di
utenti già e molti potenziali utenti
venendo così abbiamo mostrato demo comprese
Google Earth il motore unity3d che
molti giochi sia su Android che su Android
il web usa ma applicazioni CAD
farmville – che guadagna soldi per Zynga
editing audio e cose del genere tutto
queste cose ora stanno arrivando sul web
e tecnologia di esecuzione degli assiemi web
per loro parlerò del
basi della tecnologia quindi tutto il codice e
il web assembly arriva in gruppi più grandi di
ciò che chiamiamo moduli è un modulo
fondamentalmente un gruppo di funzioni correlate
può essere grande quanto un intero eseguibile
o può essere piccolo come una DLL è anche possibile
crea un modulo piccolo come un singolo
funzione se ti piace un modulo sempre
importa la funzionalità di cui ha bisogno
dall’esterno, quindi oltre a correre
calcolo peer e accesso alla memoria
tutto ciò che sarebbe I / O qualsiasi cosa
sarebbe messa in rete tutto ciò che sarebbe
mostrare la grafica che deve essere
importato esplicitamente in un modulo cosa
quello che ci dà è una separazione da dire
quel codice assembly web può essere in modalità sandbox
quindi aggiungi la funzionalità esterna
può anche essere incorporato in altri scenari
oltre al web ma in particolare al web
ci dà le capacità di parlare con il
Dom per esempio ma sempre attraverso
JavaScript applica un modulo non è un
il vero programma che sta eseguendo
nessuno stato invece è come un
dichiarazione che puoi considerare analoga
al testo del tuo programma non è un
in realtà il programma in esecuzione per ottenere
sta correndo
devi istanziarlo che crea
qualcosa che ha lo stato e lo farò
parlare in dettaglio ciò che lo Stato è
ma è fondamentalmente un grande ricordo e
anche variabili locali variabili globali così
un’istanza è il programma in esecuzione quindi
parla così per metterlo solo nelle foto
perché sono una diapositiva piena di testi
noioso ora sto usando le scatole verdi per
rappresenta di nuovo il modulo moduli di nuovo
ha solo funzioni in tutto
che ha bisogno dall’esterno è esplicitamente
importato e può anche esportare
funziona così tutto ciò che è
funzionalità come la funzione principale
o subroutine per decodificare immagini o
qualunque sia il ruolo dei moduli è nostro
esporta l’istanza produce un
istanza un’istanza ha la vita reale
dati in esso
quindi parlerò del binario
formato per quelli di voi interessati a
byte e bit solo per darti un po ‘
contesto non devi memorizzare questo
spero che tu non lo sia davvero
scrivere web assembly usando i byte grezzi
ma è fondamentalmente molto semplice è solo
una serie di sezioni che entrano in a
ordine specifico ogni sezione ha un byte
che ti dice che tipo è usiamo a
codifica di lunghezza molto variabile che dà
noi prove future quindi se abbiamo molto
moduli più grandi in futuro siamo
fondamentalmente limitato a 4 gigabyte moduli
ora ma puoi immaginare tutto ed è
tipo di andare via e formare questo di tempo
corpi di funzioni che sono fondamentalmente il
carne del tuo programma il codice è una pila
macchina e quel codice è rappresentato come
codice byte quindi è molto denso così sembra
fondamentalmente in questo modo abbiamo questi codici
che vengono prima in ordine di un modulo
dichiara tutte le firme delle funzioni
che verrà utilizzato nel primo
sezione perché quelli saranno riferiti
a da sezioni successive le importazioni vengono dopo
quindi puoi già entro i primi due
sezioni puoi dire quali funzioni
le firme saranno lì quali tipi e
anche cosa importa un modulo e poi noi
ottenere due dichiarazioni di funzione che sono
funzioni che si trovano all’interno di questo modulo
e definito all’interno di questo modulo
la tabella indiretta è come facciamo indirettamente
chiamate non sarò importante non entrare
i dettagli di quella configurazione di memoria
parla di quanto è grande il ricordo
questo modulo si aspetta e altre proprietà
di esso Le Global sono variabili globali
le esportazioni sono le funzioni che saranno
esportato da questo modulo e quindi
essere disponibile al di fuori del modulo che c’è
anche una funzione di inizializzazione che
è possibile specificare le tabelle indirette possono
essere inizializzato è come il prossimo
sezione dopo quella poi la sezione principale
dopo che è la funzione corpi che
include il codice byte e poi ce ne sono alcuni
inizializzazione dei dati di inizializzazione tramite
memoria in modo da poter avere una parte del tuo
il binario viene fondamentalmente caricato in memoria
all’inizio in modo proporzionato
la maggior parte della maggior parte del binario sta andando
essere i corpi funzione che sta per
essere codice che abbiamo osservato circa il 90% del
i moduli in natura sono compresi
codice e poi naturalmente dipende
puoi aggiungere sezioni personalizzate a un binario
quelle cose sono ignorate dal motore
loro eseguono il motore che eseguono
il tuo binario e li è possibile aggiungere al
fine o cospargerli nel mezzo e
ovviamente le proporzioni cambieranno
con quante sezioni extra che tu
aggiungi okay, quindi parlerò del
modello di esecuzione ora così sopra questo tipo
di linea rossa tratteggiata nel mezzo del
fai scorrere questo è lo stato dell’applicazione
affermare che il tuo programma può effettivamente
cambia eseguendo le istruzioni
sotto la linea non puoi direttamente
cambiamento o indirizzo e questo è fondamentalmente
come realizziamo sandboxing quindi se tu
puoi immaginare se pensi a x86 se tu
pensare fino in fondo alla macchina
livello puoi indirizzare lo stack e te
può distruggere lo stack e questo è enorme
vulnerabilità di sicurezza che non volevamo
che per il web saranno terribili così
invece lo stack delle chiamate è qualcosa che
non puoi indirizzare direttamente non puoi
nessun bug nel tuo programma può causare al
lo stack delle chiamate viene danneggiato in modo simile
con la tabella delle funzioni indirette che
è come facciamo le chiamate indirette che non possono
essere corrotto dal tuo programma
rappresentazioni di funzioni qualunque esse siano
assomigliare al vero web assembly
motore non puoi arrivare a loro e questo è
dal design
invece lo stato che ti diamo a
giocare con il tuo programma è fondamentalmente a
grande matrice di byte suona quasi sciocco
quando lo metti in quel modo ma lo è
fondamentalmente un’emulazione di una macchina web
il montaggio è una macchina che puoi
metti letteralmente tutti i bit che vuoi
nella memoria ma quel ricordo è
separato da tutti gli altri ricordi in
il processo di incorporamento così tu
non è possibile accedere allo stato del browser
la memoria lineare a cui è riservato solo
il programma l’altro stato che abbiamo
sono variabili globali e quelle che non puoi
indirettamente devi indirizzare sempre
specificare un indice in modo da non poter essere corrotto
le variabili globali avendo un arrant
puntatore nel tuo programma C. per esempio
Parlerò dell’insegnamento impostato noi
hanno quattro tipi base sono tutti semplici
tipi primitivi quindi abbiamo 32 bit
interi a 64 bit interi a 32 bit
numeri a virgola mobile a 64 bit
numeri interi a virgola mobile non lo fanno
avere un segno invece mettiamo l’accesso
le operazioni sono allo stesso modo come a
la macchina funziona così x86 non definisce
quella
un registro a 32 bit ha invece un segno
ci sono operazioni che trattano l’alto
ordine bit come le istruzioni firmate o meno
puoi raggrupparli all’incirca con il
tipi di valori che manipolano così noi
avere addizioni e sottrazioni e cose
così per ognuno di questi primitivi
tipi ma abbiamo anche istruzioni
che sono polimorfici o c’è una sorta di
parametrizza sui tipi in modo da accedere
variabili globali variabili locali e il
memoria tutti quelli che puoi caricare
diversi tipi e quindi da realizzare
chiamate di funzione abbiamo codici byte per
chiamare le funzioni direttamente dove tu
specificare una funzione di chiamata indice
indirettamente è lì che arriva questo tavolo
da questo è dove si specifica calcolato
indice di ritorno da una funzione e quindi
il flusso di controllo locale viene eseguito con blocchi
se e loop così invece di avere salti
e rami nel tuo codice tu in realtà
avere costrutti di flusso di controllo della struttura
okay, ora possiamo guardare davvero
i byte se sei interessato così noi
avere un formato di testo per il codice assembly web
puoi prendere qualsiasi binario e e
smontarlo in quel formato di testo che tu
può anche andare in quella direzione
prendi il formato del testo e vai al
binario solo per essere chiari questo è di più
come smontare il codice della macchina x86 questo
non è come tornare ai tuoi programmi
codice originale non ci aspettiamo che le persone lo facciano
scrivi il formato del testo per scrivere il loro
programmi in questo modo invece si compilano
nel web assembly ma ti mostrerò gentile
di alcuni punti salienti su come noi
su come funziona il formato binario
a sinistra abbiamo una funzione di aggiunta che ha
due parametri dichiariamo i tipi come I
32 dichiariamo questo tipo di risultato come I 32
e poi dentro la funzione che abbiamo
questo nel formato di testo abbiamo questo
sintassi che assomiglia un po ‘a Lisp che
sono le espressioni che possiamo aggiungere
i due abbiamo i valori di
quelle due variabili locali e poi solo
aggiungendoli al loro ritorno ci sono
un ritorno implicito quindi se cadi
la fine del codice con un valore che
viene restituito dalla funzione così dentro
il binario quello che abbiamo è una selezione
di ciò che appare in varie sezioni così
nella sezione tipo dobbiamo avere un
dichiarazione di tale funzione
tipo di firma questo è come appare 6d
e hex in realtà significa hey questo è un
funzione di tipo è il numero di
i parametri di 7f sono int quali tu
probabilmente non dovrebbe memorizzare ma e
allora c’è un valore di ritorno e questo è
in realtà la prova del futuro per l’aggiunta
più valori di ritorno in futuro quindi
questo è il modo in cui descriviamo questo tipo e
quindi nella sezione dichiarazione delle funzioni
non ci resta che una serie di là del tipo
unica cosa che dobbiamo dichiarare cosa
la funzione è il suo tipo e usiamo a
indicizziamo nella sezione del tipo così abbiamo
una funzione è il tipo numero zero che
capita di essere quello e poi la funzione
corpo abbiamo una sua funzione corpo
la lunghezza è sette, quindi il numero blu
c’è in realtà una lunghezza variabile
codifica del numero sette che poteva
in realtà è un byte ma in questo esempio
è imbottito e quindi il corpo della funzione
viene dopo ti dice che abbiamo
zero variabili locali aggiuntive che dice
e quindi abbiamo i codici byte effettivi
quindi i codici byte entrano in esecuzione
Ordina per 20 e X ottieni locale che tu
dovrebbe anche memorizzare e poi il locale
indici variabili quindi l’effettiva necessità di
questo programma è solo il sette byte a
corpo che è un po ‘più corto di
il formato del testo ovviamente va bene così sono
andando a parlare di come noi incorporiamo web
assemblea abbiamo avuto un obiettivo molto chiaro
volevamo separare il nucleo di esecuzione
di assemblaggio web da come la sua incorporato in
un altro programma in un’altra impostazione quindi
menzionato che ho citato l’x86 a
un paio di volte puoi pensare al web
assemblaggio come un fuori analogo a un
il set di istruzioni architettura x86 no
ho IO funzioni che non hanno un
scheda grafica che fa parte del
set di istruzioni invece è tutto
fornito da uno strato di software sopra
il web assembly è molto simile, chiamiamo tutti
quello strato sopra l’incorporamento in modo che
livello fornisce la possibilità di caricare e
moduli istanziati collegano i moduli così
importazioni ed esportazioni collegate
insieme e anche l’host di importazione
funzionalità così di nuovo come le funzioni IO
accedere ai buffer dei fotogrammi qualunque sia
come se fosse tutto in uno strato sopra il web
assemblaggio quindi abbiamo definito molto chiaro
separazione apposta per farlo
l’ incorporamento più importante è
sicuramente JavaScript quindi assemblaggio web
può essere incorporato in un JavaScript
contesto di esecuzione e infatti in v8 in
Chrome è così che è implementato
incorporato nell’API JavaScript e quindi
che è incorporato ulteriormente nel web così
in realtà ci sono più livelli sopra il web
assembly in modo che l’ API JavaScript sia consentita
noi per caricare i montanti e ottenere
accesso ad altre API in javascript a
fai tutte quelle cose divertenti con lo schermo
nella dom possiamo anche chiamare web assembly
da JavaScript e l’idea chiave è quella
il web assembly non aggiunge alcuna nuova API
è la superficie del Web diversa dall’API
per manipolare il web assembly non lo fa
cambia radicalmente ciò che puoi fare
con il web così giusto per farlo
immagine perché di nuovo il testo è noioso
abbiamo il nostro modulo qui in realtà un
istanza qui
ha il suo codice e i suoi dati all’interno del
solo modo che possa arrivare all’esterno
l’ unico modo può arrivare alla console o
fare IO è attraverso le funzioni importate che
significa che il mondo esterno può fare qualcosa
interporre e assicurarsi che il web
modulo di assembly non sfugge suo
sandbox per così dire va bene così possiamo avere
funzioni JavaScript importate in modo esplicito
puoi pensare a questa oscurità in giro
come il vuoto che è JavaScript che possiamo
hai importato in modo esplicito JavaScript
funzioni e abbiamo un’API che farò
mostra nella diapositiva successiva o in due diapositive
cosa sembra caricare e
convalidare i moduli e poi quando a
la funzione viene esportata da un assembly Web
modulo
è solo richiamabile da JavaScript come
un’altra funzione JavaScript che possiamo anche
esportare i dati effettivi nella memoria
la memoria lineare di cui ho parlato
l’altro scivolo possiamo effettivamente arrivare a
quello da JavaScript è facoltativo
questo è fondamentalmente un modo che puoi fare
zero copia IO con JavaScript nel web
piattaforma quindi questo è ciò che JavaScript
API sembra che ci sia un assembly web
oggetto che è il più esterno
Contesto JavaScript e tutto si blocca
fuori che abbiamo tipi che rappresentano
moduli quindi questo è opaco
rappresentazione dove prendi i byte
e lo decodifichi su una rete
istanza del modulo e poi da JavaScript
puoi creare la prossima cosa che è a
istanza di assemblaggio web e in realtà ha
lo stato la memoria è nelle tue tabelle
può effettivamente creare e manipolare da
JavaScript
attraverso l’API e non lo otterrò
in quello ma puoi realizzare un tipo
di collegamento dinamico in questo modo c’è anche
un’API sincrona e asincrona
in JavaScript per fare queste cose per
esempio i costruttori che prendono byte
quelli sono sincroni quelli che non lo faranno
completare fino a quando l’ operazione è stata completata
per esempio compilare o analizzare il
byte ma l’API asincrona è data
ti riporti una promessa in modo che tu possa andare
torna al ciclo degli eventi principale e poi il
la promessa si completerà quando ciò
operazione è fatta ora mi piacerebbe consegnare
alla mia collega andreas per il
resto di voi quindi a questo punto potremmo
darti tutti i tipi di esempi di come
usi quel web assembly e come tu
scrivi il codice di come appare il codice intendo
Ben ha dato alcuni semplici esempi ma il
l’idea di base è che non si dovrebbe mai essere
facendo ciò giusto non dovresti essere
scrivere codice di assemblaggio web a mano così
in realtà non ha molto senso
mostrando molto di ciò nella presentazione
qui piuttosto invece di fare ciò che voglio
per darti un po ‘più di alto livello
sfondo sul motivo per cui abbiamo fatto il web assembly
e perché lo abbiamo fatto nel modo in cui lo abbiamo fatto e
dove sta andando così bene, ovviamente
era uno degli obiettivi di webassembly
fornire alte prestazioni al web I
puoi dire con JavaScript in questi giorni
andare abbastanza bene sono incredibilmente veloci
se se colpissi i casi buoni ma
è tutto dipende dal colpire
i buoni casi destra in modo in realtà più
importante della semplice prestazione in
generale è che questa prestazione è
prevedibile, quindi è stato uno dei principali
Gli obiettivi del web per scrivere forniscono
te con modelli prestazionali prevedibili
è un altro obiettivo importante per noi
in realtà lasciatemi chiamarlo
rompendo il monopolio javascript sul
web giusto quindi ci sono un gazillion
lingue che compilano attraverso il web
di questi tempi, ma se qualcuno di voi che è un
lo scrittore di compilatori probabilmente realizzerà
quel javascript è come un orribile
obiettivo di compilazione
e devi saltare attraverso tutti i tipi
di frutta e sarà inefficiente
in molti casi per compilare un casuale
lingua a JavaScript
quindi per l’assemblea web che volevamo avere
questo formato universale che puoi
compilare qualsiasi lingua in modo ragionevole
modo e ciò che viene con quello è anche
la possibilità di aggiungere funzionalità e avere
lingue che compilano sul web
funzioni di supporto che JavaScript fa
non supporta e probabilmente non lo farà mai
supporta così un primo esempio di a
funzionalità che JavaScript al momento
non supporta è come in 64 nativi
tipi di altre cose sono minacce in alcuni
per esempio, cyndi, per esempio
aggiungi ad un certo punto e cose del genere
chiamate di coda è un altro interessante
esempio potrei parlare di un bel po ‘
quindi sì, ci dà un nuovo modo di aggiungere
funzionalità per il web in cui JavaScript
sarebbe d’intralcio e un’altra cosa
Immagino che alcuni di voi siano consapevoli di come
tecnologie precedenti che esistevano come
SMG era un po ‘ come un predecessore di
web assembly e questo è stato fatto da
Mozilla e Google avevano questo
tecnologia chiamata Native Client dove
si potrebbe effettivamente spedito x86 o in in
neckla portatile era codice bit LLVM per il
web ma tutte queste tecnologie hanno avuto il loro
problemi e non sono stati ampiamente adottati e
una delle ragioni per cui il web assembly è
unificali in una cosa che tutti
supporta ed è forse interessante
sapere che tutte le persone che hanno lavorato
asm.js e su neckl prima di tutto il lavoro
sul web assembly in questi giorni così noi
progettato questa cosa che ti ho dato un po ‘
ragioni per cui vogliamo farlo e
ovviamente questo viene fornito con un numero di
obiettivi di progettazione e anche limiti di progettazione
quindi c’è un’intera lista di loro solo io
dai loro qui che non voglio andare
attraverso tutti loro ma ovviamente alcuni
di questi abbiamo già menzionato prima
come dovrebbe essere nella lingua
indipendenza deve essere
indipendente dalla piattaforma che sul web o
Hardware indipendente dal web è un
obiettivo ovvio di
a casa indipendente, intendo davvero che lo è
non dipende dal web o JavaScript
o e tornerò a quello e
allora sì, certo che vuoi che sia
veloce per eseguire vuoi che sia sicuro
che è anche importante sul web e
i due bit inferiori sono proprietà noi
volevo avere per questo sì, dovrebbe
avere belle proprietà dovrebbe essere
prevedibile in varie semantiche
dimensioni quindi questo è tutto il
semantica del web assembly come lingua
se vuoi, ma ce n’è un altro
dimensione che allora anche già
menzionato che è la rappresentazione
che ho menzionato quindi è anche importante
perché trasferisci questi file binari
questi moduli sul filo che loro
sono compatti, perché è lì
dove il tempo è trascorso e probabilmente lo sei
sul tuo budget e per il tuo cellulare
contratto quindi è veramente importante che
è compatto ma poi lo vogliamo anche noi
generare just-in-time compilare un codice t’v
quindi è progettato per renderlo così facile
che possiamo decifrarlo velocemente che possiamo
compilarlo in fretta che siamo in grado di convalidarlo
veloce in cima a tutto questo binario
il formato è progettato in modo uniforme
rende possibile iniziare la compilazione
senza aver visto tutto così
puoi effettivamente eseguire lo streaming compilato come
mentre i byte stanno ancora arrivando in te
può iniziare a compilare alcune funzioni e
puoi paralizzare la compilation di
funzioni separate per l’intero binario
formato e l’ordine delle sezioni che hai visto
sulla diapositiva di Ben è stata scelta particolare a
rendere queste cose possibili
così abbiamo raggiunto questi obiettivi e così è
in generale è probabilmente un po ‘presto per
dillo ma abbiamo qualche preliminare
numeri così abbiamo scritto un articolo che noi
sottoposto a una conferenza scientifica
all’inizio di quest’anno che si chiama PL di
dove abbiamo avuto un numero di un paio di
grafici quindi questo è uno di loro che è
sulle prestazioni e in realtà c’è a
molto da vedere in quel grafico non sto andando
per spiegare tutto ma mostra come
tempo di compilazione e tempo di compilazione
tempo di validazione e avvio VM per
individuo diverso
Tremont da un benchmark più ampio
vestito chiamato polizia
entità pelleat e la barra blu è
probabilmente quella più importante che
in realtà prima cosa cosa è il
percentuale a sinistra che è il
confronto con il tempo di esecuzione per il
stesso programma quindi questi programmi RC
essenzialmente quando si esegue in compilato
Programmi SC per codice nativo offline su on
la stessa macchina e questo è come
mostrando come un webassembly performante
è in confronto quando lo compili
all’assemblaggio web e quindi eseguirlo sul
stessa macchina quindi ovunque ci troviamo al 100%
abbiamo praticamente raggiunto il codice nativo
performance, così come puoi vedere che non lo siamo
abbastanza là ancora dappertutto ma per la maggior parte
di questi benchmark almeno siamo
diventando abbastanza vicino voglio dire questi sono
punti di riferimento devi sempre stare attento
con benchmark in realtà è di più
spesso così siamo sopra al 50% o al 100%
quindi fino a 2x è attualmente più simile
realistico da aspettarsi per il tuo
applicazione quando si compila su WebP
montaggio ma questo è molto presto e
ci aspettiamo che continui a migliorarlo
l’altra cosa che puoi vedere c’è pure
o in realtà non può vedere è un tipo di
bar c’è così questi sono tutti impilati è
convalida in modo che sia il tempo necessario
per convalidare il bytecode, quindi cosa JVM
chiama la verifica bytecode e tu puoi
effettivamente vedere che non si presenta
ce n’è uno così perché è così piccolo
è così veloce che in realtà non lo è
importa così era anche importante
obiettivo di progettazione per rendere la convalida molto veloce
quindi riguarda le prestazioni in termini di
tempo e poi ho parlato di potrebbe essere
compatta una dimensione del codice è un altro
dimensione importante quindi questa è un’altra
grafico dalla stessa carta ed è a
grafico a dispersione che rappresenta la dimensione del
stessi programmi in asm.js o in
SMS x86 nel codice di lancio del codice macchina
contro le sue dimensioni nel web assembly e
quella diagonale è fondamentalmente dove loro
ci sono le stesse dimensioni quindi tutto ciò che è
sotto la diagonale
dove la maggior parte dei punti si trova fortunatamente
dice che la rappresentazione webassembly
è più piccolo di quanto lo sarebbe il giallo
essere la rappresentazione asm.js e blu
i punti sono la rappresentazione del codice nativo
quindi ovunque si trovino sotto la diagonale
ciò significa che webassembly è più piccolo
quindi era importante per noi misurare
che in realtà abbiamo raggiunto questo obiettivo
come abbiamo ottenuto che non lo faccio davvero
voglio andare molto in attuazione qui
solo un paio di cose da dire qui cosa
i motori fanno così la prima cosa da notare è
che almeno nel web assemblea dei browser
in realtà non è come una cosa completamente nuova
questo è nel browser in realtà
appena implementato come parte dell’esistente
Motori JavaScript quindi riutilizza davvero
molte delle infrastrutture che il
I motori JavaScript hanno già dentro
particolare della compilation
pipeline e la gestione della memoria e
tutto ciò e anche questo ha il vantaggio
quella chiamata avanti e indietro tra il web
assembly e JavaScript sono come davvero
velocemente possiamo renderlo davvero veloce così
c’è anche se devi andare
tramite javascript, ad esempio
manipolare il Dom o utilizzare WebGL o
tutto ciò che non dovrebbe in realtà essere un
overhead significativo sì e ci sono
quindi c’è questo design che abbiamo
è implementato in vari browser e
una cosa da sapere è anche questo
il design è un po ‘ generale in quanto
consente varie implementazioni diverse
strategie e in questo momento tutto il
l’ uso del browser in qualche modo
diverse strategie per implementare in
particolare una dimensione interessante
è come quante compilation o
livelli di ottimizzazione hai una nuova pipeline
e quindi questo è qualcosa che è simile
molto importante quando compili
JavaScript di solito ne hai diversi
livelli di ottimizzazione che significa
diversi compilatori in modo da iniziare con a
semplice che è veloce in modo che che
i tempi di avvio sono ridotti al minimo e una volta
il codice diventa caldo, ricompilalo con a
più ottimizzando il compilatore e questi sono
strategie che si applicano anche al web
assemblaggio ci può essere qualcuno in meno
importante perché la citazione
tanto più basso livello in modo da poter compilare
più direttamente non devi fare
tutta la merda pazza che devi fare
per JavaScript ma ancora può fare a
differenza tra come in specialmente in
termini di avvio volte è davvero
importante sì e poi ci sono
varie ottimizzazioni da manuale che noi
applicare in questi in questo just-in-time
compilatori nei motori e altro
trucchi che non entrerò qui, quindi questo
è il lato motore, ma come si fa
effettivamente produco web assembly intendo Ben
accennato le idee che tu
compilare correttamente non lo scrivi
manualmente lo compili e tu puoi
fallo da qualsiasi lingua tu voglia
fino a quando si trova qualcuno che erano
scrivere un compilatore per te giusto
quindi i nostri primi grandi clienti sono C e C ++
ovviamente molti di loro sono utenti precedenti
di asm.js già così è attualmente
almeno fatto principalmente attraverso il
Pipeline Emscripten e poi c’è a
uno sforzo abbastanza significativo per avere un
assemblaggio di destinazione del compilatore di ruggine e
ci sono vari altri progetti simili
andando avanti già forme che vanno da alcuni
roba da vero giocattolo a qualcosa di veramente serio
quindi speriamo davvero di vedere come tonnellate di
nuove lingue che arrivano sul web e in
il prossimo futuro e questo è un po ‘come
la cosa ovvia che tu solo
compilare qualcosa offline e quindi eseguire
ma un obiettivo importante per
anche il webassembly è ancora di più
versatile in modo da poter supportare
piattaforme come la JVM o dotnet
che effettivamente usa la compilazione JIT
se stessi giusto così che tu possa
implementare le bollette oltre a cosa
webassembly fa così ci sono alcuni
gli sforzi di implementazione sono già stati
iniziato in quella direzione ma non lo facciamo
avere una vera esperienza eseguibile con
questo proprio ora sottolineando questo
questo era anche un obiettivo progettuale da sostenere
che sì, tutto questo sfocia in questo
obiettivo generale che questo è davvero
dovrebbe essere una lingua in te
e formante sì sì producendo
webassembly l’altro lato il
il motore che ritorna brevemente a quello è
quello che chiamiamo il web del consumatore
assemblaggio e in questo momento il nostro principale consumatore
si sono i motori in nei browser web in modo
si è stato menzionato questo fa parte del
piattaforma web in cui è incorporato
JavaScript ma questo è solo il tipo di
prima ondata per quanto vediamo noi davvero
sono davvero impaziente di altro
Matrimoni e di nuovo ci sono già
le persone che lavorano su cose del genere così
implementazioni standalone di WebP
assemblea che potresti usare per non farlo
sai scrivere il tuo linguaggio di programmazione
in un modo abbastanza semplice, semplicemente
avere un runtime sono già come
persone che usano la JVM per esempio per
implementare altre lingue e questo sarebbe
essere completamente indipendente dal web o
anche JavaScript che non è necessario
Flusso di Java Script e poi ci sono anche
persone che lavorano per incorporarlo in altri
ambienti come così ci sono i loro
sforzi per fare alcune cose blockchain con
quello dove puoi inserire il codice assembly web
sulla blockchain come etere essi
stanno pensando di trasferirsi in a
webassembly è il formato del collare
avrebbero parlato con alcuni ragazzi sulla docker
loro pensano di usarlo come loro invio
formato di codice di pugilato internamente e così via
e così via c’è un sacco di cose da fare
aspettarsi sì e questo è un obiettivo
l’obiettivo che è davvero platform
quindi ci sono i consumatori dei produttori e il
il contratto tra i due è il web
specifiche di assemblaggio e voglio
ne parlo brevemente perché lo è
un po ‘notevole ci sono in realtà
due cose che sono notevoli
webassembly il primo è quello fino a
sappiamo che è la prima volta che è un
una tecnologia del genere è stata davvero progettata
in collaborazione tra tutti i maggiori
i venditori di browser penso che sia stato
completamente nolan non è mai successo prima
ed è stato un grande successo
collaborazione nell’altro modo in cui il web
il montaggio è notevole dal nostro
la prospettiva è
il modo in cui il rigger è così com’è
rigorosamente specificato quindi volevamo davvero
per impostare una nuova barra in termini di industriale
specifiche del linguaggio in modo che significa
in particolare quel webassembly il
vengono fornite le specifiche del linguaggio ufficiale
con una semantica formalizzata completa così
e per spiegare cosa significa che devo
fai il mio minuto di sfogo sui poveri
stato della programmazione tradizionale
lingue quindi intendo probabilmente tutti voi
sapere come leggere una grammatica BNF così
Grammatiche BNF sono state inventate con Algol 60
quindi è come un modo vecchio di 60 anni
specificare formalmente gli atti degli studenti ma per
per la semantica fondamentalmente siamo ancora
bloccato nella stessa decade come il modo
le lingue industriali sono specificate è
ancora nello stesso modo in cui sono stati specificati
60 anni fa, almeno quando si tratta di
lingue industriali e questo è carino
triste perché in realtà almeno dentro
ricerca e ovunque sappiamo come
fallo giusto per almeno 30 o 4 anni
ma non è mai stato adattato e quindi noi
volevo davvero che volevamo davvero cambiare
questo gioco e usa lo stato dell’arte
tecniche standard che sono davvero
standard nella ricerca tutti li usavano
lì e impiegarli qui e questo
il risultato di questo è che tu quando lo fai
questo di pari passo con l’intero disegno
e la specifica formale si
in realtà arriva a un molto più pulito e
design più semplice non è solo formalizzato
sulla carta abbiamo effettivamente una macchina
versione verificata di questa formulazione e
che abbiamo messo in un miglioramento della teoria
e questo teorema e abbiamo la prova che
l’intera convalida ci fornisce
con un sottotipo il silenzio lo fa
non c’è un comportamento indefinito e
webassembly
che la sandbox è sicura e tutto questo
sono i risultati che sono verificati dalla macchina
voglio solo incarnare questo a te molto
brevemente questo è di nuovo dal giornale
di cui ho già parlato
solo per rendere il punto quanto pulito e
è semplice , quindi non preoccuparti se non puoi
leggi questo ed è comunque piccolo ma questo
è l’intera semantica di esecuzione del web
assemblaggio è una pagina normale
notazione in una notazione standard chiamata
semantica operativa strutturale così
queste sono riduzioni non ti preoccupare
cosa significano è solo e come utente
probabilmente non avete mai bisogno di leggerli, ma
è per rendere il punto che può
effettivamente fatto e conduce a
qualcosa di molto pulito e allo stesso modo questo
sono le nostre regole di battitura che specificano
validazione completamente specificata per Wepa
quindi non è nemmeno una pagina intera e tu
potrebbe essere un po ‘più colpito da
questo se tu se sei consapevole che il
specifica della verifica bytecode
per esempio la JVM ne richiede cento
sessanta pagine tienilo a mente
quindi questo riguardava l’assemblea web
da dove veniamo e voglio spendere
il resto dei miei discorsi quanto tempo ho
sono andato bene, sì, non credo di aver bisogno
per dire un po ‘di dove siamo
andare avanti con l’assemblaggio del web cosa c’è
cosa sta succedendo lungo la strada e lì
sono varie cose su cui stiamo lavorando su un
ovviamente sta migliorando le prestazioni che
è naturale anche noi vogliamo migliorare gli strumenti
supporto ovviamente così ora come è
Ho capito che hai sempre iniziato
fuori con qualcosa di molto semplice e il
più persone stanno iniziando ad usarlo il
più pressione ci sarà da avere
meglio è che sono abbastanza sicuro e poi io
già detto che stiamo cercando
avanti a vedere più lingue e
più più piattaforme o embeddings e
probabilmente l’ultimo gruppo di cose
è più funzionalità all’interno del web assembly
se stesso e l’ altro gli altri quattro
tipo di abbiamo già attraversato e io
menzionato nel discorso prima così lo farò
concentrarsi sull’ultimo punto qui per il
riposa la mia presentazione quindi quali sono i
caratteristiche future ci sono un paio
di proposta
che sono in preparazione per il montaggio di wepa
in diverse fasi quindi abbiamo un intero
processo di come facciamo le proposte e voi
devi scriverlo come testo e poi tu
devo scrivere la semantica in più
dettaglio ad un certo punto hai effettivamente
di scrivere la semantica formale e si
dobbiamo implementarlo nel nostro riferimento
interprete quindi abbiamo anche un riferimento
interprete che è scritto in te lo sai
cammello e devi scrivere prove
questo interprete può funzionare e così via
c’è un intero elenco di cose che hai
fare per proposta e ci sono
diverse fasi in questo in questo processo
quindi una proposta è già carina
lontano è il supporto per le minacce e
che in realtà non lo fa almeno per
ora non significa che puoi generare
minacce all’interno di webassembly stesso ma esso
significa che un webassembly
l’istanza può essere inserita da diversi
minacce e possono comunicare attraverso
memoria condivisa quindi la caratteristica principale che
questo è l’aggiunta qui per i primitivi
accesso atomico al lineare
memoria e questo è importante in
particolare per la compilazione di persone
la loro base di codice C ++ al web assembly
perché è l’ unico modo per loro
Emily @p minaccia e tutti usano P
minacce per i giochi per esempio a
fornire il parallelismo così questo è davvero
importante e penso che questo dovrebbe
essere spedizione relativamente presto un altro
funzione anche di un tipo importante di
compilare C ++ almeno se lo sei
è la compilazione di C ++ con gestione delle eccezioni
supporto più efficiente per le eccezioni
in questo momento è in realtà il tuo modo
compilare questo C ++ con eccezioni al web
il montaggio è necessario richiamare in
JavaScript per fare un gestore lì
ed è come se fosse orribile
quindi ovviamente non lo vogliamo, ma è così
un po ‘più complicato per il design e
meccanismo di eccezione nel web assembly
perché deve rimanere al sicuro e ha
significare rimanere al sicuro anche attraverso
lingue diverse che sono compilate
dentro e che non capisco come
l’un l’altro sta usando le eccezioni proprio così
ci sono alcune cose che tu
bisogna stare attenti
il prossimo è sim D, quindi Cindy è qualcosa
che tutte le moderne CPU hanno funzionato
per dati multipli di istruzioni singole così
queste sono fondamentalmente istruzioni vettoriali
che può manipolare un intero vettore di
numeri alla volta e quando vuoi
raggiungere come l’ ultimo 10% delle prestazioni
per un’applicazione intensiva computazione
allora vuoi avere accesso a due
simony capacità te stesso Europa se
la tua macchina quindi questo è solo aggiungendo un
intero zoo di istruzioni che sono
individualmente non particolarmente
interessante ma sì e poi un tipo
di cose insieme a molte cose qui
insieme è un supporto migliore in generale
per più lingue di alto livello , quindi
obiettivo di progettazione iniziale per il web assembly noi
esplicitamente tagliato per bene
versione 100 vogliamo supportare bene il C ++
ma era sempre un obiettivo che dopo
vogliamo ampliare il supporto per di più
lingue di alto livello e questo significa
avere tutti i tipi di funzionalità che forse
Il C ++ non ha davvero bisogno o è molto utile
ma altre lingue potrebbero per esempio
coda chiama in particolare o l’abilità
non restituire più valori da a
funzione e così via e così via e questo
non è anche solo per sostenere determinati
lingue direttamente ma anche
supportare alcune tecniche di compilazione
come ho detto prima che vogliamo
piattaforme di supporto in esecuzione sul Web
assemblaggio che usa ad esempio cacare
se stessi o immagina di volerlo
implementare un linguaggio dinamico come
JavaScript forse ne ha anche incontrato alcuni
punto nel futuro che usa tutti i tipi
di tecniche per generare dinamicamente
codice e roba e per alcuni di questi voi
per esempio, hanno bisogno di cose come i bulloni di coda
per renderlo efficiente, quindi c’è anche
come una tecnica di compilazione e poi a
quello che probabilmente è più lontano
veramente
diciamolo come supporto per la spazzatura
modo di raccolta
così a Ben non piace quel termine così come Ben
ti ho mostrato proprio ora hai solo questo
come quattro tipi di dati proprio come questo
super primitivo devi emulare
tutto te stesso in una tua memoria
e quindi se volevi compilare a
spazzatura raccolgono la lingua a
webassembly puoi farlo ma tu hai
spedirlo con il proprio sistema runtime
il tuo personale spazzino e quale è
probabilmente non sarà super veloce perché
questo è un po ‘ il caso d’uso in cui tu
pagare di più per il sovraccarico che
webassembly ha ed è una specie di pazzo
anche io intendo almeno sul web sei
già in esecuzione in questo motore che ha
questo super tuned altamente performante
Garbage Collector che ha diritto
100 uomini anni di lavoro che è andato in esso
quindi dovresti davvero essere in grado di usarlo
quello e l’idea qui è che abbiamo avuto
nuovi modi per definire fondamentalmente la struttura
tipi nel web assembly che puoi semplicemente
crea un valore e questo valore sarà
assegnato in se ma il calore di JavaScript
in realtà e allora sarà solo
garbage collector quando l’ultimo
il riferimento ad esso va via così questo è
dovrebbe ancora essere un livello abbastanza basso
meccanismo così non come un peso massimo
modello di oggetto come quello che avresti nel
JVM o un annuncio ma in realtà solo fondamentalmente
tuple di valori che puoi assegnare o
alzare e poi ogni lingua che vuole
per usarlo deve mappare il proprio oggetto
modello in queste strutture dati ma
ancora fornisce la comodità e
le prestazioni della spazzatura incorporata
raccolta sì un’altra parte di quello è
che il primo oggetto è l’abilità
per utilizzare effettivamente passato nei riferimenti
dall’ambiente ospite come sul
oggetti web Dom per esempio in
JavaScript adesso non puoi farlo
a destra si hanno solo numeri in modo ciò che si
devo fare adesso se vuoi
interfaccia con il Dom che devi costruire
alcuni per espulsione sul confine che
mappa è gli oggetti che vuoi manipolare
ad alcuni numeri che usi internamente
per identificarli e poi si deve
preoccupati di come fai a
raccolta rifiuti bidirezionale tutto
così questo è carino sì non lo è
molto bella
quindi con se hai garbage collection
all’interno di webassembly stesso potrebbe solo
passare in riferimenti e l’ultimo punto
l’articolo qui è che vogliamo avere di meglio
supporto per i binding degli host in questo momento
sì, hai una funzione di assemblaggio web
puoi esportarlo bene, puoi solo prenderlo
numeri come argomenti proprio così se tu
voglio interfacciare con JavaScript questo
tipo non ti dice nemmeno se questi
i numeri dovrebbero essere interpretati
come firmato o non firmato, quindi cosa vogliamo
aggiungere è una descrizione e una notazione
lingua nel formato binario come una nuova
la sezione personalizzata sostanzialmente che descrive
alcuni meccanismi di collegamento a JavaScript in
questo caso in cui dice come i valori
vengono convertiti tra JavaScript e
Mathiesen e anche questo ti dà un modo
per trattare con le stringhe ad esempio il
L’unico modo per passare le stringhe adesso è
devi in qualche modo esporre il lineare
memoria di webassembly su JavaScript e
quindi copia dei byte perché lì
non ci sono oggetti stringa giusti e questo
tutti potrebbero essere curati più o meno
automaticamente da questo strato vincolante
giusto quindi è approssimativamente un breve riassunto
qual è il punto di tutto questo sì
menzionarlo è dovrebbe essere un
nuovo formato di codice con tutto il bello
le proprietà ce l’abbiamo già in esecuzione
tutti i browser e probabilmente oltre
il futuro in realtà ce ne sono ancora di più
i browser stanno funzionando, lo so
è già disponibile anche nell’opera
perché è basato solo su cromo
e qualche altro processo del browser basato su
cromo sì e abbiamo fatto un punto di
rendendo questo design e il suo insieme
specifica e l’intera proposta
processo di evoluzione davvero molto rigoroso
molto più rigoroso di qualsiasi altra cosa tu abbia
visto finora nelle lingue industriali così
si spera che questo si rivelerà completamente nuovo
mondo di cose che puoi fare sul web
compreso rompere e sì sì
c’è anche una pagina web se vuoi
cercare maggiori informazioni
ok grazie, quindi ho ricevuto alcune domande
bene alcuni di loro sono in giro è
già pronto per la produzione posso usarlo
sviluppo aziendale e che dire
versioni dobbiamo aspettarci alcuni
problemi con diverse versioni di
assemblaggio forse dire qualcosa in proposito
certo, lo consideriamo come noi
spedito in Chrome stabile dovremmo
è stato spedito in Firefox stabile così
sì, puoi usarlo nelle app aziendali
e la gente sta compilando un motore enorme così
il motore epico che è come qualcosa
come 200 megabyte è già stato
compilato un assemblaggio web e le persone lo sono
materiale di spedizione che fa soldi con il web
assemblaggio e riguardava le versioni
versioni differenti e infine
compatibilità sì sì un obiettivo di design
era in realtà per rendere il formato binario
forward compatibile quindi l’idea siamo noi
avere una bandiera persiana lì dentro ma il
idea è che non abbiamo mai a bump
e quindi questa è davvero solo una via di fuga
schiudono così qualsiasi cosa vogliamo aggiungere che aggiungiamo
in futuro dovrebbe essere retrocesso
compatibile quindi aggiungendo solo cose nuove
che prima erano avvolti e poi
potresti usare qualche forma di funzionalità
rilevamento come si utilizza in JavaScript come
bene per scoprire se il tuo browser
già lo supporta in modo che tu possa in un modo
puoi farlo solo tu in generale
come un piccolo modulo piccolo che usa il
funzione che vuoi e poi chiama
l’API JavaScript è valida
funzione, ad esempio , prova solo a
convalidarlo sul browser e se lo è
dice sì, allora puoi usarlo e dice
no, allora devi tornare a
qualcos’altro va bene allora parecchio
domande su quali lingue lo faranno
essere supportati sono supportati e così via
anche vedere alcune domande su se
Java sarà supportato ne conosci qualcuno
Progetto Java che tenta di compilare Java
al momento del montaggio no, non lo facciamo
sapere di qualcuno che sta usando Java
con webassembly
quindi in generale perché assemblaggio web
è una macchina
c’è questo implicito o esplicito
separazione tra le lingue in esecuzione
in alto e quale è il motore
specificato così abbiamo completato il
implementazione del motore così a lungo
come è possibile generare bytecode quale
conforme a quella specifica di qualsiasi lingua
correrà fino alla realtà di cosa
le lingue eseguono C e C ++ eseguendo utilizzando
lo script in ruggine ha essenzialmente una beta
di nuovo per quello script di assemblaggio è di più
piace più come uno strato sopra il web
assemblaggio altre lingue sono in arrivo I
è probabilmente il pensiero specifico per Java
richiederà gli oggetti gestiti
proposta quindi probabilmente è una coppia
anni fuori ma come hai visto l’assemblea del web è
una macchina di basso livello per portare a
linguaggio di alto livello che devi compilare
il linguaggio di alto livello o compilare
parte di esso in JavaScript per esempio come
si riferisce a LLVM che puoi prendere in considerazione
il web assembly è un binario portatile
formato così come è stato menzionato pinnacle era
a ero una tecnologia Google di Google che
utilizza il codice bit LVM come trasporto
formato è possibile considerare web assembly a
essere come una sorta di consegna di quello
promessa LVM è un framework di compilazione ma
ha anche come se avesse un codice bit
formato che è possibile utilizzare per vari
scopi ok e uno era una domanda
era lì c’è già qualcosa
come nessun assemblaggio GS o Mac ha detto uno
dei livelli della piattaforma e la compilazione
JavaScript al web semplicemente giusto o tu
supporto medio in node.js per l’assemblaggio web
probabilmente sì, penso che la corrente
la versione node.js è su cosa v8
versione non appena raggiunge la destra
versione v8 ci sarà implicitamente
tutto bene, penso che sia già così
Non so esattamente cosa siamo d’accordo, si
Penso che l’ultimo nodo abbia già
spedito il 5.8 che includeva il web
assemblaggio di default quindi sì, va bene così è
aggiunge altre domande che sono
non qui ok allora grazie mille
Mi chiamo Ben, lavoro in Google in
Monaco di Baviera su webassembly è un progetto I
iniziato tre anni fa con alcuni
colleghi che in realtà non colleghi
ma alcuni collaboratori di Mozilla e
da allora molte persone sono state
coinvolto il mio collega andreas Rosberg
funziona anche su Google , daremo a
presentazione di metà e metà, quindi siamo
Spegnerai nel mezzo così tu
può stare lì ed essere pauroso se tu
come se tu potessi sederti ma io andrò avanti e
inizia sì, puoi alzarti e darmi uno schiaffo
se dico qualcosa di sbagliato
okay, quindi parlerò di cosa
webassembly è il motivo per cui abbiamo fatto il webassembly
perché è così che in realtà il perché è
sarà più Andres come prova da descrivere
e parleremo di dove si trova
andando così ciò che è assemblaggio web quello che abbiamo
progettato è fondamentalmente un bytecode per il
il web è progettato per essere trasferibile ovunque
macchine su piattaforme così che tu
può scrivere un programma e arrivare a specie
correre a destra, una volta eseguito ovunque tipo di
promettimi quella testa java
è progettato per essere compatto e per essere
compatto è un formato binario quindi tu
non vedere il testo se non lo si disassembla
binario per essere universale ha a
in particolare il modello di esecuzione di basso livello
volevamo supportare linguaggi come il C ++
perché abbiamo osservato che molte persone avevano
le loro applicazioni plus plus come
come giochi e stiamo già compilando
li sul web e li eseguono
JavaScript così quei casi già utilizzati
che volevamo sostenere così dovevamo
assicurati che abbia funzionato bene al giorno d’oggi
che è davvero fantastico per me essere capace
per dire questo
è il supporto nativo in tutti i principali
browser che significa Chrome Firefox
Safari e edge che abbiamo sviluppato in under
gli auspici di un gruppo di comunità w3c
che sostanzialmente permette a chiunque di unirsi
e commentare e anche noi abbiamo un lavoro
gruppo che è un corpo più formale che
in un certo senso approva definitivamente
specifiche l’idea è che noi
non volevo reinventare la piattaforma web
ma integrarsi con la piattaforma web così
qualsiasi API che avete per esempio, che è
disponibile in JavaScript puoi prenderti
attraverso il web assembly, quindi c’è un sacco di
utenti già e molti potenziali utenti
venendo così abbiamo mostrato demo comprese
Google Earth il motore unity3d che
molti giochi sia su Android che su Android
il web usa ma applicazioni CAD
farmville – che guadagna soldi per Zynga
editing audio e cose del genere tutto
queste cose ora stanno arrivando sul web
e tecnologia di esecuzione degli assiemi web
per loro parlerò del
basi della tecnologia quindi tutto il codice e
il web assembly arriva in gruppi più grandi di
ciò che chiamiamo moduli è un modulo
fondamentalmente un gruppo di funzioni correlate
può essere grande quanto un intero eseguibile
o può essere piccolo come una DLL è anche possibile
crea un modulo piccolo come un singolo
funzione se ti piace un modulo sempre
importa la funzionalità di cui ha bisogno
dall’esterno, quindi oltre a correre
calcolo peer e accesso alla memoria
tutto ciò che sarebbe I / O qualsiasi cosa
sarebbe messa in rete tutto ciò che sarebbe
mostrare la grafica che deve essere
importato esplicitamente in un modulo cosa
quello che ci dà è una separazione da dire
quel codice assembly web può essere in modalità sandbox
quindi aggiungi la funzionalità esterna
può anche essere incorporato in altri scenari
oltre al web ma in particolare al web
ci dà le capacità di parlare con il
Dom per esempio ma sempre attraverso
JavaScript applica un modulo non è un
il vero programma che sta eseguendo
nessuno stato invece è come un
dichiarazione che puoi considerare analoga
al testo del tuo programma non è un
in realtà il programma in esecuzione per ottenere
sta correndo
devi istanziarlo che crea
qualcosa che ha lo stato e lo farò
parlare in dettaglio ciò che lo Stato è
ma è fondamentalmente un grande ricordo e
anche variabili locali variabili globali così
un’istanza è il programma in esecuzione quindi
parla così per metterlo solo nelle foto
perché sono una diapositiva piena di testi
noioso ora sto usando le scatole verdi per
rappresenta di nuovo il modulo moduli di nuovo
ha solo funzioni in tutto
che ha bisogno dall’esterno è esplicitamente
importato e può anche esportare
funziona così tutto ciò che è
funzionalità come la funzione principale
o subroutine per decodificare immagini o
qualunque sia il ruolo dei moduli è nostro
esporta l’istanza produce un
istanza un’istanza ha la vita reale
dati in esso
quindi parlerò del binario
formato per quelli di voi interessati a
byte e bit solo per darti un po ‘
contesto non devi memorizzare questo
spero che tu non lo sia davvero
scrivere web assembly usando i byte grezzi
ma è fondamentalmente molto semplice è solo
una serie di sezioni che entrano in a
ordine specifico ogni sezione ha un byte
che ti dice che tipo è usiamo a
codifica di lunghezza molto variabile che dà
noi prove future quindi se abbiamo molto
moduli più grandi in futuro siamo
fondamentalmente limitato a 4 gigabyte moduli
ora ma puoi immaginare tutto ed è
tipo di andare via e formare questo di tempo
corpi di funzioni che sono fondamentalmente il
carne del tuo programma il codice è una pila
macchina e quel codice è rappresentato come
codice byte quindi è molto denso così sembra
fondamentalmente in questo modo abbiamo questi codici
che vengono prima in ordine di un modulo
dichiara tutte le firme delle funzioni
che verrà utilizzato nel primo
sezione perché quelli saranno riferiti
a da sezioni successive le importazioni vengono dopo
quindi puoi già entro i primi due
sezioni puoi dire quali funzioni
le firme saranno lì quali tipi e
anche cosa importa un modulo e poi noi
ottenere due dichiarazioni di funzione che sono
funzioni che si trovano all’interno di questo modulo
e definito all’interno di questo modulo
la tabella indiretta è come facciamo indirettamente
chiamate non sarò importante non entrare
i dettagli di quella configurazione di memoria
parla di quanto è grande il ricordo
questo modulo si aspetta e altre proprietà
di esso Le Global sono variabili globali
le esportazioni sono le funzioni che saranno
esportato da questo modulo e quindi
essere disponibile al di fuori del modulo che c’è
anche una funzione di inizializzazione che
è possibile specificare le tabelle indirette possono
essere inizializzato è come il prossimo
sezione dopo quella poi la sezione principale
dopo che è la funzione corpi che
include il codice byte e poi ce ne sono alcuni
inizializzazione dei dati di inizializzazione tramite
memoria in modo da poter avere una parte del tuo
il binario viene fondamentalmente caricato in memoria
all’inizio in modo proporzionato
la maggior parte della maggior parte del binario sta andando
essere i corpi funzione che sta per
essere codice che abbiamo osservato circa il 90% del
i moduli in natura sono compresi
codice e poi naturalmente dipende
puoi aggiungere sezioni personalizzate a un binario
quelle cose sono ignorate dal motore
loro eseguono il motore che eseguono
il tuo binario e li è possibile aggiungere al
fine o cospargerli nel mezzo e
ovviamente le proporzioni cambieranno
con quante sezioni extra che tu
aggiungi okay, quindi parlerò del
modello di esecuzione ora così sopra questo tipo
di linea rossa tratteggiata nel mezzo del
fai scorrere questo è lo stato dell’applicazione
affermare che il tuo programma può effettivamente
cambia eseguendo le istruzioni
sotto la linea non puoi direttamente
cambiamento o indirizzo e questo è fondamentalmente
come realizziamo sandboxing quindi se tu
puoi immaginare se pensi a x86 se tu
pensare fino in fondo alla macchina
livello puoi indirizzare lo stack e te
può distruggere lo stack e questo è enorme
vulnerabilità di sicurezza che non volevamo
che per il web saranno terribili così
invece lo stack delle chiamate è qualcosa che
non puoi indirizzare direttamente non puoi
nessun bug nel tuo programma può causare al
lo stack delle chiamate viene danneggiato in modo simile
con la tabella delle funzioni indirette che
è come facciamo le chiamate indirette che non possono
essere corrotto dal tuo programma
rappresentazioni di funzioni qualunque esse siano
assomigliare al vero web assembly
motore non puoi arrivare a loro e questo è
dal design
invece lo stato che ti diamo a
giocare con il tuo programma è fondamentalmente a
grande matrice di byte suona quasi sciocco
quando lo metti in quel modo ma lo è
fondamentalmente un’emulazione di una macchina web
il montaggio è una macchina che puoi
metti letteralmente tutti i bit che vuoi
nella memoria ma quel ricordo è
separato da tutti gli altri ricordi in
il processo di incorporamento così tu
non è possibile accedere allo stato del browser
la memoria lineare a cui è riservato solo
il programma l’altro stato che abbiamo
sono variabili globali e quelle che non puoi
indirettamente devi indirizzare sempre
specificare un indice in modo da non poter essere corrotto
le variabili globali avendo un arrant
puntatore nel tuo programma C. per esempio
Parlerò dell’insegnamento impostato noi
hanno quattro tipi base sono tutti semplici
tipi primitivi quindi abbiamo 32 bit
interi a 64 bit interi a 32 bit
numeri a virgola mobile a 64 bit
numeri interi a virgola mobile non lo fanno
avere un segno invece mettiamo l’accesso
le operazioni sono allo stesso modo come a
la macchina funziona così x86 non definisce
quella
un registro a 32 bit ha invece un segno
ci sono operazioni che trattano l’alto
ordine bit come le istruzioni firmate o meno
puoi raggrupparli all’incirca con il
tipi di valori che manipolano così noi
avere addizioni e sottrazioni e cose
così per ognuno di questi primitivi
tipi ma abbiamo anche istruzioni
che sono polimorfici o c’è una sorta di
parametrizza sui tipi in modo da accedere
variabili globali variabili locali e il
memoria tutti quelli che puoi caricare
diversi tipi e quindi da realizzare
chiamate di funzione abbiamo codici byte per
chiamare le funzioni direttamente dove tu
specificare una funzione di chiamata indice
indirettamente è lì che arriva questo tavolo
da questo è dove si specifica calcolato
indice di ritorno da una funzione e quindi
il flusso di controllo locale viene eseguito con blocchi
se e loop così invece di avere salti
e rami nel tuo codice tu in realtà
avere costrutti di flusso di controllo della struttura
okay, ora possiamo guardare davvero
i byte se sei interessato così noi
avere un formato di testo per il codice assembly web
puoi prendere qualsiasi binario e e
smontarlo in quel formato di testo che tu
può anche andare in quella direzione
prendi il formato del testo e vai al
binario solo per essere chiari questo è di più
come smontare il codice della macchina x86 questo
non è come tornare ai tuoi programmi
codice originale non ci aspettiamo che le persone lo facciano
scrivi il formato del testo per scrivere il loro
programmi in questo modo invece si compilano
nel web assembly ma ti mostrerò gentile
di alcuni punti salienti su come noi
su come funziona il formato binario
a sinistra abbiamo una funzione di aggiunta che ha
due parametri dichiariamo i tipi come I
32 dichiariamo questo tipo di risultato come I 32
e poi dentro la funzione che abbiamo
questo nel formato di testo abbiamo questo
sintassi che assomiglia un po ‘a Lisp che
sono le espressioni che possiamo aggiungere
i due abbiamo i valori di
quelle due variabili locali e poi solo
aggiungendoli al loro ritorno ci sono
un ritorno implicito quindi se cadi
la fine del codice con un valore che
viene restituito dalla funzione così dentro
il binario quello che abbiamo è una selezione
di ciò che appare in varie sezioni così
nella sezione tipo dobbiamo avere un
dichiarazione di tale funzione
tipo di firma questo è come appare 6d
e hex in realtà significa hey questo è un
funzione di tipo è il numero di
i parametri di 7f sono int quali tu
probabilmente non dovrebbe memorizzare ma e
allora c’è un valore di ritorno e questo è
in realtà la prova del futuro per l’aggiunta
più valori di ritorno in futuro quindi
questo è il modo in cui descriviamo questo tipo e
quindi nella sezione dichiarazione delle funzioni
non ci resta che una serie di là del tipo
unica cosa che dobbiamo dichiarare cosa
la funzione è il suo tipo e usiamo a
indicizziamo nella sezione del tipo così abbiamo
una funzione è il tipo numero zero che
capita di essere quello e poi la funzione
corpo abbiamo una sua funzione corpo
la lunghezza è sette, quindi il numero blu
c’è in realtà una lunghezza variabile
codifica del numero sette che poteva
in realtà è un byte ma in questo esempio
è imbottito e quindi il corpo della funzione
viene dopo ti dice che abbiamo
zero variabili locali aggiuntive che dice
e quindi abbiamo i codici byte effettivi
quindi i codici byte entrano in esecuzione
Ordina per 20 e X ottieni locale che tu
dovrebbe anche memorizzare e poi il locale
indici variabili quindi l’effettiva necessità di
questo programma è solo il sette byte a
corpo che è un po ‘più corto di
il formato del testo ovviamente va bene così sono
andando a parlare di come noi incorporiamo web
assemblea abbiamo avuto un obiettivo molto chiaro
volevamo separare il nucleo di esecuzione
di assemblaggio web da come la sua incorporato in
un altro programma in un’altra impostazione quindi
menzionato che ho citato l’x86 a
un paio di volte puoi pensare al web
assemblaggio come un fuori analogo a un
il set di istruzioni architettura x86 no
ho IO funzioni che non hanno un
scheda grafica che fa parte del
set di istruzioni invece è tutto
fornito da uno strato di software sopra
il web assembly è molto simile, chiamiamo tutti
quello strato sopra l’incorporamento in modo che
livello fornisce la possibilità di caricare e
moduli istanziati collegano i moduli così
importazioni ed esportazioni collegate
insieme e anche l’host di importazione
funzionalità così di nuovo come le funzioni IO
accedere ai buffer dei fotogrammi qualunque sia
come se fosse tutto in uno strato sopra il web
assemblaggio quindi abbiamo definito molto chiaro
separazione apposta per farlo
l’ incorporamento più importante è
sicuramente JavaScript quindi assemblaggio web
può essere incorporato in un JavaScript
contesto di esecuzione e infatti in v8 in
Chrome è così che è implementato
incorporato nell’API JavaScript e quindi
che è incorporato ulteriormente nel web così
in realtà ci sono più livelli sopra il web
assembly in modo che l’ API JavaScript sia consentita
noi per caricare i montanti e ottenere
accesso ad altre API in javascript a
fai tutte quelle cose divertenti con lo schermo
nella dom possiamo anche chiamare web assembly
da JavaScript e l’idea chiave è quella
il web assembly non aggiunge alcuna nuova API
è la superficie del Web diversa dall’API
per manipolare il web assembly non lo fa
cambia radicalmente ciò che puoi fare
con il web così giusto per farlo
immagine perché di nuovo il testo è noioso
abbiamo il nostro modulo qui in realtà un
istanza qui
ha il suo codice e i suoi dati all’interno del
solo modo che possa arrivare all’esterno
l’ unico modo può arrivare alla console o
fare IO è attraverso le funzioni importate che
significa che il mondo esterno può fare qualcosa
interporre e assicurarsi che il web
modulo di assembly non sfugge suo
sandbox per così dire va bene così possiamo avere
funzioni JavaScript importate in modo esplicito
puoi pensare a questa oscurità in giro
come il vuoto che è JavaScript che possiamo
hai importato in modo esplicito JavaScript
funzioni e abbiamo un’API che farò
mostra nella diapositiva successiva o in due diapositive
cosa sembra caricare e
convalidare i moduli e poi quando a
la funzione viene esportata da un assembly Web
modulo
è solo richiamabile da JavaScript come
un’altra funzione JavaScript che possiamo anche
esportare i dati effettivi nella memoria
la memoria lineare di cui ho parlato
l’altro scivolo possiamo effettivamente arrivare a
quello da JavaScript è facoltativo
questo è fondamentalmente un modo che puoi fare
zero copia IO con JavaScript nel web
piattaforma quindi questo è ciò che JavaScript
API sembra che ci sia un assembly web
oggetto che è il più esterno
Contesto JavaScript e tutto si blocca
fuori che abbiamo tipi che rappresentano
moduli quindi questo è opaco
rappresentazione dove prendi i byte
e lo decodifichi su una rete
istanza del modulo e poi da JavaScript
puoi creare la prossima cosa che è a
istanza di assemblaggio web e in realtà ha
lo stato la memoria è nelle tue tabelle
può effettivamente creare e manipolare da
JavaScript
attraverso l’API e non lo otterrò
in quello ma puoi realizzare un tipo
di collegamento dinamico in questo modo c’è anche
un’API sincrona e asincrona
in JavaScript per fare queste cose per
esempio i costruttori che prendono byte
quelli sono sincroni quelli che non lo faranno
completare fino a quando l’ operazione è stata completata
per esempio compilare o analizzare il
byte ma l’API asincrona è data
ti riporti una promessa in modo che tu possa andare
torna al ciclo degli eventi principale e poi il
la promessa si completerà quando ciò
operazione è fatta ora mi piacerebbe consegnare
alla mia collega andreas per il
resto di voi quindi a questo punto potremmo
darti tutti i tipi di esempi di come
usi quel web assembly e come tu
scrivi il codice di come appare il codice intendo
Ben ha dato alcuni semplici esempi ma il
l’idea di base è che non si dovrebbe mai essere
facendo ciò giusto non dovresti essere
scrivere codice di assemblaggio web a mano così
in realtà non ha molto senso
mostrando molto di ciò nella presentazione
qui piuttosto invece di fare ciò che voglio
per darti un po ‘più di alto livello
sfondo sul motivo per cui abbiamo fatto il web assembly
e perché lo abbiamo fatto nel modo in cui lo abbiamo fatto e
dove sta andando così bene, ovviamente
era uno degli obiettivi di webassembly
fornire alte prestazioni al web I
puoi dire con JavaScript in questi giorni
andare abbastanza bene sono incredibilmente veloci
se se colpissi i casi buoni ma
è tutto dipende dal colpire
i buoni casi destra in modo in realtà più
importante della semplice prestazione in
generale è che questa prestazione è
prevedibile, quindi è stato uno dei principali
Gli obiettivi del web per scrivere forniscono
te con modelli prestazionali prevedibili
è un altro obiettivo importante per noi
in realtà lasciatemi chiamarlo
rompendo il monopolio javascript sul
web giusto quindi ci sono un gazillion
lingue che compilano attraverso il web
di questi tempi, ma se qualcuno di voi che è un
lo scrittore di compilatori probabilmente realizzerà
quel javascript è come un orribile
obiettivo di compilazione
e devi saltare attraverso tutti i tipi
di frutta e sarà inefficiente
in molti casi per compilare un casuale
lingua a JavaScript
quindi per l’assemblea web che volevamo avere
questo formato universale che puoi
compilare qualsiasi lingua in modo ragionevole
modo e ciò che viene con quello è anche
la possibilità di aggiungere funzionalità e avere
lingue che compilano sul web
funzioni di supporto che JavaScript fa
non supporta e probabilmente non lo farà mai
supporta così un primo esempio di a
funzionalità che JavaScript al momento
non supporta è come in 64 nativi
tipi di altre cose sono minacce in alcuni
per esempio, cyndi, per esempio
aggiungi ad un certo punto e cose del genere
chiamate di coda è un altro interessante
esempio potrei parlare di un bel po ‘
quindi sì, ci dà un nuovo modo di aggiungere
funzionalità per il web in cui JavaScript
sarebbe d’intralcio e un’altra cosa
Immagino che alcuni di voi siano consapevoli di come
tecnologie precedenti che esistevano come
SMG era un po ‘ come un predecessore di
web assembly e questo è stato fatto da
Mozilla e Google avevano questo
tecnologia chiamata Native Client dove
si potrebbe effettivamente spedito x86 o in in
neckla portatile era codice bit LLVM per il
web ma tutte queste tecnologie hanno avuto il loro
problemi e non sono stati ampiamente adottati e
una delle ragioni per cui il web assembly è
unificali in una cosa che tutti
supporta ed è forse interessante
sapere che tutte le persone che hanno lavorato
asm.js e su neckl prima di tutto il lavoro
sul web assembly in questi giorni così noi
progettato questa cosa che ti ho dato un po ‘
ragioni per cui vogliamo farlo e
ovviamente questo viene fornito con un numero di
obiettivi di progettazione e anche limiti di progettazione
quindi c’è un’intera lista di loro solo io
dai loro qui che non voglio andare
attraverso tutti loro ma ovviamente alcuni
di questi abbiamo già menzionato prima
come dovrebbe essere nella lingua
indipendenza deve essere
indipendente dalla piattaforma che sul web o
Hardware indipendente dal web è un
obiettivo ovvio di
a casa indipendente, intendo davvero che lo è
non dipende dal web o JavaScript
o e tornerò a quello e
allora sì, certo che vuoi che sia
veloce per eseguire vuoi che sia sicuro
che è anche importante sul web e
i due bit inferiori sono proprietà noi
volevo avere per questo sì, dovrebbe
avere belle proprietà dovrebbe essere
prevedibile in varie semantiche
dimensioni quindi questo è tutto il
semantica del web assembly come lingua
se vuoi, ma ce n’è un altro
dimensione che allora anche già
menzionato che è la rappresentazione
che ho menzionato quindi è anche importante
perché trasferisci questi file binari
questi moduli sul filo che loro
sono compatti, perché è lì
dove il tempo è trascorso e probabilmente lo sei
sul tuo budget e per il tuo cellulare
contratto quindi è veramente importante che
è compatto ma poi lo vogliamo anche noi
generare just-in-time compilare un codice t’v
quindi è progettato per renderlo così facile
che possiamo decifrarlo velocemente che possiamo
compilarlo in fretta che siamo in grado di convalidarlo
veloce in cima a tutto questo binario
il formato è progettato in modo uniforme
rende possibile iniziare la compilazione
senza aver visto tutto così
puoi effettivamente eseguire lo streaming compilato come
mentre i byte stanno ancora arrivando in te
può iniziare a compilare alcune funzioni e
puoi paralizzare la compilation di
funzioni separate per l’intero binario
formato e l’ordine delle sezioni che hai visto
sulla diapositiva di Ben è stata scelta particolare a
rendere queste cose possibili
così abbiamo raggiunto questi obiettivi e così è
in generale è probabilmente un po ‘presto per
dillo ma abbiamo qualche preliminare
numeri così abbiamo scritto un articolo che noi
sottoposto a una conferenza scientifica
all’inizio di quest’anno che si chiama PL di
dove abbiamo avuto un numero di un paio di
grafici quindi questo è uno di loro che è
sulle prestazioni e in realtà c’è a
molto da vedere in quel grafico non sto andando
per spiegare tutto ma mostra come
tempo di compilazione e tempo di compilazione
tempo di validazione e avvio VM per
individuo diverso
Tremont da un benchmark più ampio
vestito chiamato polizia
entità pelleat e la barra blu è
probabilmente quella più importante che
in realtà prima cosa cosa è il
percentuale a sinistra che è il
confronto con il tempo di esecuzione per il
stesso programma quindi questi programmi RC
essenzialmente quando si esegue in compilato
Programmi SC per codice nativo offline su on
la stessa macchina e questo è come
mostrando come un webassembly performante
è in confronto quando lo compili
all’assemblaggio web e quindi eseguirlo sul
stessa macchina quindi ovunque ci troviamo al 100%
abbiamo praticamente raggiunto il codice nativo
performance, così come puoi vedere che non lo siamo
abbastanza là ancora dappertutto ma per la maggior parte
di questi benchmark almeno siamo
diventando abbastanza vicino voglio dire questi sono
punti di riferimento devi sempre stare attento
con benchmark in realtà è di più
spesso così siamo sopra al 50% o al 100%
quindi fino a 2x è attualmente più simile
realistico da aspettarsi per il tuo
applicazione quando si compila su WebP
montaggio ma questo è molto presto e
ci aspettiamo che continui a migliorarlo
l’altra cosa che puoi vedere c’è pure
o in realtà non può vedere è un tipo di
bar c’è così questi sono tutti impilati è
convalida in modo che sia il tempo necessario
per convalidare il bytecode, quindi cosa JVM
chiama la verifica bytecode e tu puoi
effettivamente vedere che non si presenta
ce n’è uno così perché è così piccolo
è così veloce che in realtà non lo è
importa così era anche importante
obiettivo di progettazione per rendere la convalida molto veloce
quindi riguarda le prestazioni in termini di
tempo e poi ho parlato di potrebbe essere
compatta una dimensione del codice è un altro
dimensione importante quindi questa è un’altra
grafico dalla stessa carta ed è a
grafico a dispersione che rappresenta la dimensione del
stessi programmi in asm.js o in
SMS x86 nel codice di lancio del codice macchina
contro le sue dimensioni nel web assembly e
quella diagonale è fondamentalmente dove loro
ci sono le stesse dimensioni quindi tutto ciò che è
sotto la diagonale
dove la maggior parte dei punti si trova fortunatamente
dice che la rappresentazione webassembly
è più piccolo di quanto lo sarebbe il giallo
essere la rappresentazione asm.js e blu
i punti sono la rappresentazione del codice nativo
quindi ovunque si trovino sotto la diagonale
ciò significa che webassembly è più piccolo
quindi era importante per noi misurare
che in realtà abbiamo raggiunto questo obiettivo
come abbiamo ottenuto che non lo faccio davvero
voglio andare molto in attuazione qui
solo un paio di cose da dire qui cosa
i motori fanno così la prima cosa da notare è
che almeno nel web assemblea dei browser
in realtà non è come una cosa completamente nuova
questo è nel browser in realtà
appena implementato come parte dell’esistente
Motori JavaScript quindi riutilizza davvero
molte delle infrastrutture che il
I motori JavaScript hanno già dentro
particolare della compilation
pipeline e la gestione della memoria e
tutto ciò e anche questo ha il vantaggio
quella chiamata avanti e indietro tra il web
assembly e JavaScript sono come davvero
velocemente possiamo renderlo davvero veloce così
c’è anche se devi andare
tramite javascript, ad esempio
manipolare il Dom o utilizzare WebGL o
tutto ciò che non dovrebbe in realtà essere un
overhead significativo sì e ci sono
quindi c’è questo design che abbiamo
è implementato in vari browser e
una cosa da sapere è anche questo
il design è un po ‘ generale in quanto
consente varie implementazioni diverse
strategie e in questo momento tutto il
l’ uso del browser in qualche modo
diverse strategie per implementare in
particolare una dimensione interessante
è come quante compilation o
livelli di ottimizzazione hai una nuova pipeline
e quindi questo è qualcosa che è simile
molto importante quando compili
JavaScript di solito ne hai diversi
livelli di ottimizzazione che significa
diversi compilatori in modo da iniziare con a
semplice che è veloce in modo che che
i tempi di avvio sono ridotti al minimo e una volta
il codice diventa caldo, ricompilalo con a
più ottimizzando il compilatore e questi sono
strategie che si applicano anche al web
assemblaggio ci può essere qualcuno in meno
importante perché la citazione
tanto più basso livello in modo da poter compilare
più direttamente non devi fare
tutta la merda pazza che devi fare
per JavaScript ma ancora può fare a
differenza tra come in specialmente in
termini di avvio volte è davvero
importante sì e poi ci sono
varie ottimizzazioni da manuale che noi
applicare in questi in questo just-in-time
compilatori nei motori e altro
trucchi che non entrerò qui, quindi questo
è il lato motore, ma come si fa
effettivamente produco web assembly intendo Ben
accennato le idee che tu
compilare correttamente non lo scrivi
manualmente lo compili e tu puoi
fallo da qualsiasi lingua tu voglia
fino a quando si trova qualcuno che erano
scrivere un compilatore per te giusto
quindi i nostri primi grandi clienti sono C e C ++
ovviamente molti di loro sono utenti precedenti
di asm.js già così è attualmente
almeno fatto principalmente attraverso il
Pipeline Emscripten e poi c’è a
uno sforzo abbastanza significativo per avere un
assemblaggio di destinazione del compilatore di ruggine e
ci sono vari altri progetti simili
andando avanti già forme che vanno da alcuni
roba da vero giocattolo a qualcosa di veramente serio
quindi speriamo davvero di vedere come tonnellate di
nuove lingue che arrivano sul web e in
il prossimo futuro e questo è un po ‘come
la cosa ovvia che tu solo
compilare qualcosa offline e quindi eseguire
ma un obiettivo importante per
anche il webassembly è ancora di più
versatile in modo da poter supportare
piattaforme come la JVM o dotnet
che effettivamente usa la compilazione JIT
se stessi giusto così che tu possa
implementare le bollette oltre a cosa
webassembly fa così ci sono alcuni
gli sforzi di implementazione sono già stati
iniziato in quella direzione ma non lo facciamo
avere una vera esperienza eseguibile con
questo proprio ora sottolineando questo
questo era anche un obiettivo progettuale da sostenere
che sì, tutto questo sfocia in questo
obiettivo generale che questo è davvero
dovrebbe essere una lingua in te
e formante sì sì producendo
webassembly l’altro lato il
il motore che ritorna brevemente a quello è
quello che chiamiamo il web del consumatore
assemblaggio e in questo momento il nostro principale consumatore
si sono i motori in nei browser web in modo
si è stato menzionato questo fa parte del
piattaforma web in cui è incorporato
JavaScript ma questo è solo il tipo di
prima ondata per quanto vediamo noi davvero
sono davvero impaziente di altro
Matrimoni e di nuovo ci sono già
le persone che lavorano su cose del genere così
implementazioni standalone di WebP
assemblea che potresti usare per non farlo
sai scrivere il tuo linguaggio di programmazione
in un modo abbastanza semplice, semplicemente
avere un runtime sono già come
persone che usano la JVM per esempio per
implementare altre lingue e questo sarebbe
essere completamente indipendente dal web o
anche JavaScript che non è necessario
Flusso di Java Script e poi ci sono anche
persone che lavorano per incorporarlo in altri
ambienti come così ci sono i loro
sforzi per fare alcune cose blockchain con
quello dove puoi inserire il codice assembly web
sulla blockchain come etere essi
stanno pensando di trasferirsi in a
webassembly è il formato del collare
avrebbero parlato con alcuni ragazzi sulla docker
loro pensano di usarlo come loro invio
formato di codice di pugilato internamente e così via
e così via c’è un sacco di cose da fare
aspettarsi sì e questo è un obiettivo
l’obiettivo che è davvero platform
quindi ci sono i consumatori dei produttori e il
il contratto tra i due è il web
specifiche di assemblaggio e voglio
ne parlo brevemente perché lo è
un po ‘notevole ci sono in realtà
due cose che sono notevoli
webassembly il primo è quello fino a
sappiamo che è la prima volta che è un
una tecnologia del genere è stata davvero progettata
in collaborazione tra tutti i maggiori
i venditori di browser penso che sia stato
completamente nolan non è mai successo prima
ed è stato un grande successo
collaborazione nell’altro modo in cui il web
il montaggio è notevole dal nostro
la prospettiva è
il modo in cui il rigger è così com’è
rigorosamente specificato quindi volevamo davvero
per impostare una nuova barra in termini di industriale
specifiche del linguaggio in modo che significa
in particolare quel webassembly il
vengono fornite le specifiche del linguaggio ufficiale
con una semantica formalizzata completa così
e per spiegare cosa significa che devo
fai il mio minuto di sfogo sui poveri
stato della programmazione tradizionale
lingue quindi intendo probabilmente tutti voi
sapere come leggere una grammatica BNF così
Grammatiche BNF sono state inventate con Algol 60
quindi è come un modo vecchio di 60 anni
specificare formalmente gli atti degli studenti ma per
per la semantica fondamentalmente siamo ancora
bloccato nella stessa decade come il modo
le lingue industriali sono specificate è
ancora nello stesso modo in cui sono stati specificati
60 anni fa, almeno quando si tratta di
lingue industriali e questo è carino
triste perché in realtà almeno dentro
ricerca e ovunque sappiamo come
fallo giusto per almeno 30 o 4 anni
ma non è mai stato adattato e quindi noi
volevo davvero che volevamo davvero cambiare
questo gioco e usa lo stato dell’arte
tecniche standard che sono davvero
standard nella ricerca tutti li usavano
lì e impiegarli qui e questo
il risultato di questo è che tu quando lo fai
questo di pari passo con l’intero disegno
e la specifica formale si
in realtà arriva a un molto più pulito e
design più semplice non è solo formalizzato
sulla carta abbiamo effettivamente una macchina
versione verificata di questa formulazione e
che abbiamo messo in un miglioramento della teoria
e questo teorema e abbiamo la prova che
l’intera convalida ci fornisce
con un sottotipo il silenzio lo fa
non c’è un comportamento indefinito e
webassembly
che la sandbox è sicura e tutto questo
sono i risultati che sono verificati dalla macchina
voglio solo incarnare questo a te molto
brevemente questo è di nuovo dal giornale
di cui ho già parlato
solo per rendere il punto quanto pulito e
è semplice , quindi non preoccuparti se non puoi
leggi questo ed è comunque piccolo ma questo
è l’intera semantica di esecuzione del web
assemblaggio è una pagina normale
notazione in una notazione standard chiamata
semantica operativa strutturale così
queste sono riduzioni non ti preoccupare
cosa significano è solo e come utente
probabilmente non avete mai bisogno di leggerli, ma
è per rendere il punto che può
effettivamente fatto e conduce a
qualcosa di molto pulito e allo stesso modo questo
sono le nostre regole di battitura che specificano
validazione completamente specificata per Wepa
quindi non è nemmeno una pagina intera e tu
potrebbe essere un po ‘più colpito da
questo se tu se sei consapevole che il
specifica della verifica bytecode
per esempio la JVM ne richiede cento
sessanta pagine tienilo a mente
quindi questo riguardava l’assemblea web
da dove veniamo e voglio spendere
il resto dei miei discorsi quanto tempo ho
sono andato bene, sì, non credo di aver bisogno
per dire un po ‘di dove siamo
andare avanti con l’assemblaggio del web cosa c’è
cosa sta succedendo lungo la strada e lì
sono varie cose su cui stiamo lavorando su un
ovviamente sta migliorando le prestazioni che
è naturale anche noi vogliamo migliorare gli strumenti
supporto ovviamente così ora come è
Ho capito che hai sempre iniziato
fuori con qualcosa di molto semplice e il
più persone stanno iniziando ad usarlo il
più pressione ci sarà da avere
meglio è che sono abbastanza sicuro e poi io
già detto che stiamo cercando
avanti a vedere più lingue e
più più piattaforme o embeddings e
probabilmente l’ultimo gruppo di cose
è più funzionalità all’interno del web assembly
se stesso e l’ altro gli altri quattro
tipo di abbiamo già attraversato e io
menzionato nel discorso prima così lo farò
concentrarsi sull’ultimo punto qui per il
riposa la mia presentazione quindi quali sono i
caratteristiche future ci sono un paio
di proposta
che sono in preparazione per il montaggio di wepa
in diverse fasi quindi abbiamo un intero
processo di come facciamo le proposte e voi
devi scriverlo come testo e poi tu
devo scrivere la semantica in più
dettaglio ad un certo punto hai effettivamente
di scrivere la semantica formale e si
dobbiamo implementarlo nel nostro riferimento
interprete quindi abbiamo anche un riferimento
interprete che è scritto in te lo sai
cammello e devi scrivere prove
questo interprete può funzionare e così via
c’è un intero elenco di cose che hai
fare per proposta e ci sono
diverse fasi in questo in questo processo
quindi una proposta è già carina
lontano è il supporto per le minacce e
che in realtà non lo fa almeno per
ora non significa che puoi generare
minacce all’interno di webassembly stesso ma esso
significa che un webassembly
l’istanza può essere inserita da diversi
minacce e possono comunicare attraverso
memoria condivisa quindi la caratteristica principale che
questo è l’aggiunta qui per i primitivi
accesso atomico al lineare
memoria e questo è importante in
particolare per la compilazione di persone
la loro base di codice C ++ al web assembly
perché è l’ unico modo per loro
Emily @p minaccia e tutti usano P
minacce per i giochi per esempio a
fornire il parallelismo così questo è davvero
importante e penso che questo dovrebbe
essere spedizione relativamente presto un altro
funzione anche di un tipo importante di
compilare C ++ almeno se lo sei
è la compilazione di C ++ con gestione delle eccezioni
supporto più efficiente per le eccezioni
in questo momento è in realtà il tuo modo
compilare questo C ++ con eccezioni al web
il montaggio è necessario richiamare in
JavaScript per fare un gestore lì
ed è come se fosse orribile
quindi ovviamente non lo vogliamo, ma è così
un po ‘più complicato per il design e
meccanismo di eccezione nel web assembly
perché deve rimanere al sicuro e ha
significare rimanere al sicuro anche attraverso
lingue diverse che sono compilate
dentro e che non capisco come
l’un l’altro sta usando le eccezioni proprio così
ci sono alcune cose che tu
bisogna stare attenti
il prossimo è sim D, quindi Cindy è qualcosa
che tutte le moderne CPU hanno funzionato
per dati multipli di istruzioni singole così
queste sono fondamentalmente istruzioni vettoriali
che può manipolare un intero vettore di
numeri alla volta e quando vuoi
raggiungere come l’ ultimo 10% delle prestazioni
per un’applicazione intensiva computazione
allora vuoi avere accesso a due
simony capacità te stesso Europa se
la tua macchina quindi questo è solo aggiungendo un
intero zoo di istruzioni che sono
individualmente non particolarmente
interessante ma sì e poi un tipo
di cose insieme a molte cose qui
insieme è un supporto migliore in generale
per più lingue di alto livello , quindi
obiettivo di progettazione iniziale per il web assembly noi
esplicitamente tagliato per bene
versione 100 vogliamo supportare bene il C ++
ma era sempre un obiettivo che dopo
vogliamo ampliare il supporto per di più
lingue di alto livello e questo significa
avere tutti i tipi di funzionalità che forse
Il C ++ non ha davvero bisogno o è molto utile
ma altre lingue potrebbero per esempio
coda chiama in particolare o l’abilità
non restituire più valori da a
funzione e così via e così via e questo
non è anche solo per sostenere determinati
lingue direttamente ma anche
supportare alcune tecniche di compilazione
come ho detto prima che vogliamo
piattaforme di supporto in esecuzione sul Web
assemblaggio che usa ad esempio cacare
se stessi o immagina di volerlo
implementare un linguaggio dinamico come
JavaScript forse ne ha anche incontrato alcuni
punto nel futuro che usa tutti i tipi
di tecniche per generare dinamicamente
codice e roba e per alcuni di questi voi
per esempio, hanno bisogno di cose come i bulloni di coda
per renderlo efficiente, quindi c’è anche
come una tecnica di compilazione e poi a
quello che probabilmente è più lontano
veramente
diciamolo come supporto per la spazzatura
modo di raccolta
così a Ben non piace quel termine così come Ben
ti ho mostrato proprio ora hai solo questo
come quattro tipi di dati proprio come questo
super primitivo devi emulare
tutto te stesso in una tua memoria
e quindi se volevi compilare a
spazzatura raccolgono la lingua a
webassembly puoi farlo ma tu hai
spedirlo con il proprio sistema runtime
il tuo personale spazzino e quale è
probabilmente non sarà super veloce perché
questo è un po ‘ il caso d’uso in cui tu
pagare di più per il sovraccarico che
webassembly ha ed è una specie di pazzo
anche io intendo almeno sul web sei
già in esecuzione in questo motore che ha
questo super tuned altamente performante
Garbage Collector che ha diritto
100 uomini anni di lavoro che è andato in esso
quindi dovresti davvero essere in grado di usarlo
quello e l’idea qui è che abbiamo avuto
nuovi modi per definire fondamentalmente la struttura
tipi nel web assembly che puoi semplicemente
crea un valore e questo valore sarà
assegnato in se ma il calore di JavaScript
in realtà e allora sarà solo
garbage collector quando l’ultimo
il riferimento ad esso va via così questo è
dovrebbe ancora essere un livello abbastanza basso
meccanismo così non come un peso massimo
modello di oggetto come quello che avresti nel
JVM o un annuncio ma in realtà solo fondamentalmente
tuple di valori che puoi assegnare o
alzare e poi ogni lingua che vuole
per usarlo deve mappare il proprio oggetto
modello in queste strutture dati ma
ancora fornisce la comodità e
le prestazioni della spazzatura incorporata
raccolta sì un’altra parte di quello è
che il primo oggetto è l’abilità
per utilizzare effettivamente passato nei riferimenti
dall’ambiente ospite come sul
oggetti web Dom per esempio in
JavaScript adesso non puoi farlo
a destra si hanno solo numeri in modo ciò che si
devo fare adesso se vuoi
interfaccia con il Dom che devi costruire
alcuni per espulsione sul confine che
mappa è gli oggetti che vuoi manipolare
ad alcuni numeri che usi internamente
per identificarli e poi si deve
preoccupati di come fai a
raccolta rifiuti bidirezionale tutto
così questo è carino sì non lo è
molto bella
quindi con se hai garbage collection
all’interno di webassembly stesso potrebbe solo
passare in riferimenti e l’ultimo punto
l’articolo qui è che vogliamo avere di meglio
supporto per i binding degli host in questo momento
sì, hai una funzione di assemblaggio web
puoi esportarlo bene, puoi solo prenderlo
numeri come argomenti proprio così se tu
voglio interfacciare con JavaScript questo
tipo non ti dice nemmeno se questi
i numeri dovrebbero essere interpretati
come firmato o non firmato, quindi cosa vogliamo
aggiungere è una descrizione e una notazione
lingua nel formato binario come una nuova
la sezione personalizzata sostanzialmente che descrive
alcuni meccanismi di collegamento a JavaScript in
questo caso in cui dice come i valori
vengono convertiti tra JavaScript e
Mathiesen e anche questo ti dà un modo
per trattare con le stringhe ad esempio il
L’unico modo per passare le stringhe adesso è
devi in qualche modo esporre il lineare
memoria di webassembly su JavaScript e
quindi copia dei byte perché lì
non ci sono oggetti stringa giusti e questo
tutti potrebbero essere curati più o meno
automaticamente da questo strato vincolante
giusto quindi è approssimativamente un breve riassunto
qual è il punto di tutto questo sì
menzionarlo è dovrebbe essere un
nuovo formato di codice con tutto il bello
le proprietà ce l’abbiamo già in esecuzione
tutti i browser e probabilmente oltre
il futuro in realtà ce ne sono ancora di più
i browser stanno funzionando, lo so
è già disponibile anche nell’opera
perché è basato solo su cromo
e qualche altro processo del browser basato su
cromo sì e abbiamo fatto un punto di
rendendo questo design e il suo insieme
specifica e l’intera proposta
processo di evoluzione davvero molto rigoroso
molto più rigoroso di qualsiasi altra cosa tu abbia
visto finora nelle lingue industriali così
si spera che questo si rivelerà completamente nuovo
mondo di cose che puoi fare sul web
compreso rompere e sì sì
c’è anche una pagina web se vuoi
cercare maggiori informazioni
ok grazie, quindi ho ricevuto alcune domande
bene alcuni di loro sono in giro è
già pronto per la produzione posso usarlo
sviluppo aziendale e che dire
versioni dobbiamo aspettarci alcuni
problemi con diverse versioni di
assemblaggio forse dire qualcosa in proposito
certo, lo consideriamo come noi
spedito in Chrome stabile dovremmo
è stato spedito in Firefox stabile così
sì, puoi usarlo nelle app aziendali
e la gente sta compilando un motore enorme così
il motore epico che è come qualcosa
come 200 megabyte è già stato
compilato un assemblaggio web e le persone lo sono
materiale di spedizione che fa soldi con il web
assemblaggio e riguardava le versioni
versioni differenti e infine
compatibilità sì sì un obiettivo di design
era in realtà per rendere il formato binario
forward compatibile quindi l’idea siamo noi
avere una bandiera persiana lì dentro ma il
idea è che non abbiamo mai a bump
e quindi questa è davvero solo una via di fuga
schiudono così qualsiasi cosa vogliamo aggiungere che aggiungiamo
in futuro dovrebbe essere retrocesso
compatibile quindi aggiungendo solo cose nuove
che prima erano avvolti e poi
potresti usare qualche forma di funzionalità
rilevamento come si utilizza in JavaScript come
bene per scoprire se il tuo browser
già lo supporta in modo che tu possa in un modo
puoi farlo solo tu in generale
come un piccolo modulo piccolo che usa il
funzione che vuoi e poi chiama
l’API JavaScript è valida
funzione, ad esempio , prova solo a
convalidarlo sul browser e se lo è
dice sì, allora puoi usarlo e dice
no, allora devi tornare a
qualcos’altro va bene allora parecchio
domande su quali lingue lo faranno
essere supportati sono supportati e così via
anche vedere alcune domande su se
Java sarà supportato ne conosci qualcuno
Progetto Java che tenta di compilare Java
al momento del montaggio no, non lo facciamo
sapere di qualcuno che sta usando Java
con webassembly
quindi in generale perché assemblaggio web
è una macchina
c’è questo implicito o esplicito
separazione tra le lingue in esecuzione
in alto e quale è il motore
specificato così abbiamo completato il
implementazione del motore così a lungo
come è possibile generare bytecode quale
conforme a quella specifica di qualsiasi lingua
correrà fino alla realtà di cosa
le lingue eseguono C e C ++ eseguendo utilizzando
lo script in ruggine ha essenzialmente una beta
di nuovo per quello script di assemblaggio è di più
piace più come uno strato sopra il web
assemblaggio altre lingue sono in arrivo I
è probabilmente il pensiero specifico per Java
richiederà gli oggetti gestiti
proposta quindi probabilmente è una coppia
anni fuori ma come hai visto l’assemblea del web è
una macchina di basso livello per portare a
linguaggio di alto livello che devi compilare
il linguaggio di alto livello o compilare
parte di esso in JavaScript per esempio come
si riferisce a LLVM che puoi prendere in considerazione
il web assembly è un binario portatile
formato così come è stato menzionato pinnacle era
a ero una tecnologia Google di Google che
utilizza il codice bit LVM come trasporto
formato è possibile considerare web assembly a
essere come una sorta di consegna di quello
promessa LVM è un framework di compilazione ma
ha anche come se avesse un codice bit
formato che è possibile utilizzare per vari
scopi ok e uno era una domanda
era lì c’è già qualcosa
come nessun assemblaggio GS o Mac ha detto uno
dei livelli della piattaforma e la compilazione
JavaScript al web semplicemente giusto o tu
supporto medio in node.js per l’assemblaggio web
probabilmente sì, penso che la corrente
la versione node.js è su cosa v8
versione non appena raggiunge la destra
versione v8 ci sarà implicitamente
tutto bene, penso che sia già così
Non so esattamente cosa siamo d’accordo, si
Penso che l’ultimo nodo abbia già
spedito il 5.8 che includeva il web
assemblaggio di default quindi sì, va bene così è
aggiunge altre domande che sono
non qui ok allora grazie mille
Please follow and like us: