WebAssembly (Alan Silva)

49
WebAssembly A nova web para desenvolvedores Web

Transcript of WebAssembly (Alan Silva)

Page 1: WebAssembly (Alan Silva)

WebAssemblyA nova web para desenvolvedores Web

Page 2: WebAssembly (Alan Silva)

Com o passar dos anos, a

tecnologia evoluiupara resolver problemasde alta complexidade eautomatizar tarefas

Page 3: WebAssembly (Alan Silva)

1792

telégrafo

Page 4: WebAssembly (Alan Silva)

1792

telégrafo

1860

telefone

Page 5: WebAssembly (Alan Silva)

1792

telégrafo

1860

telefone

1890

rádio

Page 6: WebAssembly (Alan Silva)

1792

telégrafo

1860

telefone

1890

rádio

1940

computador

Page 7: WebAssembly (Alan Silva)

1792

telégrafo

1860

telefone

1890

rádio

1940

computador

1969

rede

Page 8: WebAssembly (Alan Silva)

1990Bem vindos a interwebz

Page 9: WebAssembly (Alan Silva)

Com o passar dos anos, a

web evoluiupara resolver problemasde alta complexidade eautomatizar tarefas

Page 10: WebAssembly (Alan Silva)

Tentaram quebrar as

limitaçõesda web

Page 11: WebAssembly (Alan Silva)

2010JavaScript mais veloz

Page 12: WebAssembly (Alan Silva)

download

Page 13: WebAssembly (Alan Silva)

download parse

Page 14: WebAssembly (Alan Silva)

download parse compila

Page 15: WebAssembly (Alan Silva)

download parse compila executa

Page 16: WebAssembly (Alan Silva)

download parse compila executa GC

Page 17: WebAssembly (Alan Silva)

download parse compila executa GC otimiza

Page 18: WebAssembly (Alan Silva)

Nossas atividades do cotidiano ficaram

mais rápidas.Mas não rápido o bastante para dar o

próximo passo...

Page 19: WebAssembly (Alan Silva)

2013asm.js

Page 20: WebAssembly (Alan Silva)

C

Page 21: WebAssembly (Alan Silva)

int f(int i)

{

return i + 1;

}

function f(i) {

'use asm';

i = i|0;

return (i + 1)|0;

}

Page 22: WebAssembly (Alan Silva)

int f(int i)

{

return i + 1;

}

function f(i) {

'use asm';

i = i|0;

return (i + 1)|0;

}

Page 23: WebAssembly (Alan Silva)

size_t strlen(char *ptr)

{

char *curr = ptr;

while (*curr != 0) {

curr++;

}

return (curr - ptr);

}

function strlen(ptr) {

'use asm';

ptr = ptr | 0;

var curr = 0;

curr = ptr;

while (MEM8[curr] | 0 != 0) {

curr = (curr + 1)|0;

}

return (curr - ptr) | 0;

}

Page 24: WebAssembly (Alan Silva)

Não deu bom?

Page 25: WebAssembly (Alan Silva)

Ainda não rola fazer“tarefas de desktop”

Page 26: WebAssembly (Alan Silva)
Page 27: WebAssembly (Alan Silva)

download

download

Download mais rápido

Page 28: WebAssembly (Alan Silva)

download

download

Não precisa fazer parse

parse

Page 29: WebAssembly (Alan Silva)

download

download

Compila mais rápido

parse compila

compila

Page 30: WebAssembly (Alan Silva)

download

download

Executa mais rápido

parse compila

compila

executa

executa

Page 31: WebAssembly (Alan Silva)

download

download

Gerenciamento de memória manual

parse compila

compila

executa

executa

GC

Page 32: WebAssembly (Alan Silva)

download

download

Não precisa otimizar em runtime

parse compila

compila

executa

executa

GC otimiza

Page 33: WebAssembly (Alan Silva)

C +Binaryen

Page 34: WebAssembly (Alan Silva)

Cwasm

+asm.js

wast

Page 35: WebAssembly (Alan Silva)

int add(int a, int b) {

return a + b;

}

(module

(export "add" $add)

(func $add (param $a i32) (param $b i32) (result i32)

(i32.add

(get_local $a)

(get_local $b)

)

)

)

C wast

Page 36: WebAssembly (Alan Silva)

00000000: 00000000 01100001 01110011 01101101 00001100 00000000 .asm..

00000006: 00000000 00000000 00000100 01110100 01111001 01110000 ...typ

0000000c: 01100101 11001101 10000000 10000000 10000000 00000000 e.....

00000012: 00001101 01000000 00000011 00000001 00000001 00000001 .@....

00000018: 00000001 00000001 01000000 00000001 00000100 00000001 ..@...

0000001e: 00000001 01000000 00000010 00000001 00000001 00000001 .@....

00000024: 00000001 01000000 00000001 00000001 00000001 00000001 .@....

0000002a: 01000000 00000001 00000001 00000000 01000000 00000000 @...@.

00000030: 00000001 00000001 01000000 00000000 00000000 01000000 ..@..@

00000036: 00000010 00000001 00000001 00000000 01000000 00000101 ....@.

0000003c: 00000001 00000001 00000001 00000001 00000001 00000001 ......

00000042: 00000001 01000000 00000011 00000001 00000001 00000001 .@....

00000048: 00000000 01000000 00000101 00000001 00000001 00000001 .@....

0000004e: 00000001 00000001 00000000 01000000 00000010 00000100 ...@..

00000054: 00000001 00000001 00000100 01000000 00000100 00000001 ...@..

0000005a: 00000001 00000001 00000001 00000001 00000001 00000110 ......

00000060: 01101001 01101101 01110000 01101111 01110010 01110100 import

00000066: 10010110 10000101 10000000 10000000 00000000 00100011 .....#

0000006c: 00000011 00000001 00000011 01100101 01101110 01110110 ...env

00000072: 00001000 01010011 01010100 01000001 01000011 01001011 .STACK

00000078: 01010100 01001111 01010000 00000011 00000001 00000011 TOP...

0000007e: 01100101 01101110 01110110 00001001 01010011 01010100 env.ST

wasm

Page 37: WebAssembly (Alan Silva)

wasm-function[0]:

sub rsp, 0x18 ; 0x000000 48 83 ec 18

mov qword ptr [rsp + 8], r14 ; 0x000004 4c 89 74 24 08

mov rax, rsp ; 0x000009 48 8b c4

add rax, 0 ; 0x00000c 48 05 00 00 00 00

cmp qword ptr [r14 + 0x28], rax ; 0x000012 49 39 46 28

jae 0x34 ; 0x000016 0f 83 18 00 00 00

0x00001c:

mov dword ptr [rsp + 4], edi ; 0x00001c 89 7c 24 04

mov dword ptr [rsp], esi ; 0x000020 89 34 24

mov eax, dword ptr [rsp] ; 0x000023 8b 04 24

mov ecx, dword ptr [rsp + 4] ; 0x000026 8b 4c 24 04

add ecx, eax ; 0x00002a 03 c8

mov eax, ecx ; 0x00002c 8b c1

jmp 0x3d ; 0x00002e e9 0a 00 00 00

0x000033:

int3 ; 0x000033 cc

0x000034: ; 0x000034 from: [0x000016]

add rsp, 0x10 ; 0x000034 48 83 c4 10

jmp 0x6e ; 0x000038 e9 31 00 00 00

0x00003d:

mov r14, qword ptr [rsp + 8] ; 0x00003d 4c 8b 74 24 08

nop ; 0x000042 66 90

add rsp, 0x18 ; 0x000044 48 83 c4 18

ret ; 0x000048 c3

asm

Page 38: WebAssembly (Alan Silva)

wasm-function[0]:

sub rsp, 0x18 ; 0x000000 48 83 ec 18

mov qword ptr [rsp + 8], r14 ; 0x000004 4c 89 74 24 08

mov rax, rsp ; 0x000009 48 8b c4

add rax, 0 ; 0x00000c 48 05 00 00 00 00

cmp qword ptr [r14 + 0x28], rax ; 0x000012 49 39 46 28

jae 0x34 ; 0x000016 0f 83 18 00 00 00

0x00001c:

mov dword ptr [rsp + 4], edi ; 0x00001c 89 7c 24 04

mov dword ptr [rsp], esi ; 0x000020 89 34 24

mov eax, dword ptr [rsp] ; 0x000023 8b 04 24

mov ecx, dword ptr [rsp + 4] ; 0x000026 8b 4c 24 04

add ecx, eax ; 0x00002a 03 c8

mov eax, ecx ; 0x00002c 8b c1

jmp 0x3d ; 0x00002e e9 0a 00 00 00

0x000033:

int3 ; 0x000033 cc

0x000034: ; 0x000034 from: [0x000016]

add rsp, 0x10 ; 0x000034 48 83 c4 10

jmp 0x6e ; 0x000038 e9 31 00 00 00

0x00003d:

mov r14, qword ptr [rsp + 8] ; 0x00003d 4c 8b 74 24 08

nop ; 0x000042 66 90

add rsp, 0x18 ; 0x000044 48 83 c4 18

ret ; 0x000048 c3

Page 39: WebAssembly (Alan Silva)

Futuro?

Page 40: WebAssembly (Alan Silva)

DOM &

Web API

Page 41: WebAssembly (Alan Silva)

Memória compartilhada

entre threads

Page 42: WebAssembly (Alan Silva)

SIMDSingle Instruction, Multiple Data

Page 43: WebAssembly (Alan Silva)

ExceptionHandlers

Page 44: WebAssembly (Alan Silva)

Debug

Page 45: WebAssembly (Alan Silva)

GC

Page 46: WebAssembly (Alan Silva)

Integração de Módulos

Page 47: WebAssembly (Alan Silva)

Continuamos empregados!

:D

Page 49: WebAssembly (Alan Silva)

www.concretesolutions.com.br

Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030

São Paulo - Rua Sansão Alves dos Santos, 433 4º andar - Brooklin - (11) 4119-0449

Ajudamos empresas a criar produtos digitais de sucesso