Desde asm.js a Web Assembly

Kalil de Lima

  • Montevideo - Uruguay

  • Estudiante de Ing en computación - FING UdelaR

  • Desarrollador FULL STACK en Rootstrap

  • Organizador de Python MVD

FUERA DE LA WEB TENEMOS UN MONTóN DE APLICACIONES ESCRITAS EN

  • C

  • C++

  • Rust

NOS BRINDAN ESTOS BENEFICIOS

  • RÁPIDOS

  • CONFIABLES

  • CONOCIDOS

  • GRAN SOPORTE DE BIBLIOTECAS

¿CóMO APLICAMOS ESTAS TECnologías a la Web?

ESTUDIEMOS UN POCO NUESTRO TARGET

LA WEB

  • ABIERTA

  • BASADA EN ESTÁNDARES

HTML
CSS
JAVASCRIPT

¿QUÉ OPCIONES TENEMOS ENTONCES?

OTROS INTENTOS SIMILARES

TENEMOS LOS SIGUIENTES PROBLEMAS

  •  NO SIEMPRE SON MULTIPLATAFORMA

  • PROBLEMAS DE SEGURIDAD

  • VERSIONADO

  • FALTA DE ADOPCIóN

¿QUé PODEMOS HACER DENTRO DE LOS ESTáNDARES ENTONCES?

¿QUé PROBLEMAS PRESENTA JAVASCRIPT?

PODEMOS TRATAR DE ESCRIBIR C-LIKE JAVASCRIPT

ASM.JS

¿QUé ES ASM.JS?

  • UN SUBCONJUNTO DE JAVASCRIPT

  • ESTANDARIZADO

  • NO REQUIERE EXTRAS PARA EJECUTARSE

¿Y LA PERFORMANCE?

JAVASCRIPT Es un lenguaje para el cual es difícil optimizar

PODEMOS uSAR CIERTOS HACKS para lograr este objetivo

size_t strlen(char *ptr) {
  char *curr = ptr;
  while (*curr != 0) {
    curr++;
  }
  return (curr - ptr);
}
function strlen(ptr) {
  ptr = ptr|0;
  var curr = 0;
  curr = ptr;
  while ((MEM8[curr>>0]|0) != 0) {
    curr = (curr + 1)|0;
  }
  return (curr - ptr)|0;
}
  • Info sobre los tipos

  • Manejo de memoria

PROGRAMAR ASí NO ES FáCIL

ALGUNOS PROBLEMAS

  • MUY BAJO NIVEL

  • ENGORROSO DE ESCRIBIR

  • MUCHO CóDIGO PARA HACER POCO

NECESITAMOS ALGO QUE ESCRIBA ASM.JS por nosotros

NECESITAMOS UN TRANSPILADOR

¿QUé NOS PERMITE HACER EMSCRIPTEN?

  • Escribir nuestro código en C, C++ o Rust

  • salvar las distancias entre EL DESKTOP Y LA WEB

  • Generar un SCRIPT  en asm.js

NATIVO VS ASM.JS

¿Todo listo entonces?

TODAVíA TENEMOS ALGUNOS PROBLEMAS

  • Javascript es un lenguaje lento

  • Grandes tiempos de parseo

  • Los scripts asm.js en general son grandes

  • NO HAY SOPORTE PARA TIPOS NATIVOS

PERO PARECE QUE VAMOS BIEN ENCAMINADOS

WEB ASSEMBLY

NO ES UN LENGUAJE

NO ES UNA PLATAFORMA

ES UN ESTáNDAR

CUENTA CON SOPORTE NATIVO DE los mayores fabricantes de navegadores

Web Assemby entre navegadores

Web Assemby entre navegadores

CUENTA CON LAS SIGUIENTES VENTAJAS

  • No requiere parsing

  • Soporte nativo para tipos de datos

  • Optimizaciones JIT ahora en tiempo de compilación

  • Es tenido en cuenta al desarrollar el estándar de la web

ES UN TARGET DE COMPILACIÓN

ALCANZA CON IMPLEMENTAR UN NUEVO BACKEND

NUESTRO CóDIGO FUNCIONA COMO ANTES, INCLUSO MEJOR

¿LISTO?

NO

LIMITANTES DE WEB ASSEMBLY

  • NO HAY SOPORTE PARA TODA LA FUNCIONALIDAD DE LA VM

  • LA COMUNICACIóN CON APLICACIONES EXTERNAS ES LENTA

  • SIGUE CORRIENDO EN EL MISMO ENTORNO DE EJECUCIóN QUE JAVASCRIPT

Web Assembly vs JS

Web Assembly vs JS

IGUAL PODEMOS HACER BASTANTE CON LO QUE TENEMOS

EJECUTAR algoritmos coSTOSOS

INTEGRAR BIBLIOTECAS NO PRESENTES EN EL ECOSISTEMA JS

SCRIPT STREAMING

TOTAL

NUESTRO PROGRAMA ES UNA APLICACIóN ENTERAMENTE EN WEB ASSEMBLY

MIXTA

NUESTRO PROGRAMA ES UNA APLICACIóN WEB QUE SE COMUNICA CON MóDULOS WEB ASSEMBLY

ALGUNOS EJEMPLOS

MOTORES DE VIDEOJUEGOS

SQOOSH

PARA CERRAR

  • ES POSIBLE EJECUTAR APLICACIONES NATIVAS EN LA WEB

  • NECESITAMOS UN ESTáNDAR ABIERTO PARA ESTO

  • PODEMOS USARLO PARA CUBRIR A JS CUANDO NO ES SUFICIENTE

¿Quiénes compilan a WEB aSsEmBLY hoy?

  • C

  • C++

  • Rust

¿Quiénes corren WEB asSEmBLY hoy?

  • Firefox

  • CHROME

  • EDGE

  • Opera

  • PostgreSQL

¿Y AHORA?

MIRANDO HACIA EL FUTURO

  • DAR SOPORTE A MáS LENGUAJES

  • MÁS INTEGRACIONES

  • GARABAGE COLLECTOR

¡Gracias!

kalil.de.lima@fing.edu.uy

github.com/kaozdl

@KAoz_165

owu.herokuapp.com

Made with Slides.com