WebAssembly (Alan Silva)
-
Upload
concrete-solutions -
Category
Technology
-
view
12 -
download
1
Transcript of WebAssembly (Alan Silva)
WebAssemblyA nova web para desenvolvedores Web
Com o passar dos anos, a
tecnologia evoluiupara resolver problemasde alta complexidade eautomatizar tarefas
1792
telégrafo
1792
telégrafo
1860
telefone
1792
telégrafo
1860
telefone
1890
rádio
1792
telégrafo
1860
telefone
1890
rádio
1940
computador
1792
telégrafo
1860
telefone
1890
rádio
1940
computador
1969
rede
1990Bem vindos a interwebz
Com o passar dos anos, a
web evoluiupara resolver problemasde alta complexidade eautomatizar tarefas
Tentaram quebrar as
limitaçõesda web
2010JavaScript mais veloz
download
download parse
download parse compila
download parse compila executa
download parse compila executa GC
download parse compila executa GC otimiza
Nossas atividades do cotidiano ficaram
mais rápidas.Mas não rápido o bastante para dar o
próximo passo...
2013asm.js
C
int f(int i)
{
return i + 1;
}
function f(i) {
'use asm';
i = i|0;
return (i + 1)|0;
}
int f(int i)
{
return i + 1;
}
function f(i) {
'use asm';
i = i|0;
return (i + 1)|0;
}
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;
}
Não deu bom?
Ainda não rola fazer“tarefas de desktop”
download
download
Download mais rápido
download
download
Não precisa fazer parse
parse
download
download
Compila mais rápido
parse compila
compila
download
download
Executa mais rápido
parse compila
compila
executa
executa
download
download
Gerenciamento de memória manual
parse compila
compila
executa
executa
GC
download
download
Não precisa otimizar em runtime
parse compila
compila
executa
executa
GC otimiza
C +Binaryen
Cwasm
+asm.js
wast
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
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
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
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
Futuro?
DOM &
Web API
Memória compartilhada
entre threads
SIMDSingle Instruction, Multiple Data
ExceptionHandlers
Debug
GC
Integração de Módulos
Continuamos empregados!
:D
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