Makepad - Aprovechando Rust + Wasm + WebGL para construir aplicaciones multiplataforma increíbles

Rate this content
Bookmark

En esta charla mostraré Makepad, una nueva pila de UI que utiliza Rust, Wasm y WebGL. A diferencia de otras pilas de UI, que utilizan un enfoque híbrido, todo el renderizado en Makepad se realiza en la GPU. Esto permite aplicaciones altamente pulidas y visualmente impresionantes que hasta ahora no han sido posibles en la web. Debido a que Makepad utiliza Rust, las aplicaciones se ejecutan tanto de forma nativa como en la Web a través de wasm. Las aplicaciones de Makepad pueden ser muy pequeñas, del orden de solo unos pocos cientos de kilobytes para wasm, hasta unos pocos megabytes con nativo. Nuestro objetivo es desarrollar Makepad en la pila de UI de elección para aplicaciones multiplataforma ligeras y de alto rendimiento. Tenemos la intención de enviar con nuestra propia aplicación de diseño e IDE.

This talk has been presented at JSNation 2022, check out the latest edition of this JavaScript Conference.

FAQ

MakePad es una plataforma que permite construir interfaces de usuario utilizando WebAssembly y Rust, ofreciendo una pila de renderizado completamente revisada para funcionar eficientemente tanto en plataformas web como nativas.

MakePad fue creado como respuesta a las limitaciones de JavaScript para manejar aplicaciones complejas y de alto rendimiento como IDEs y herramientas de diseño, donde JavaScript mostraba deficiencias en manejo de CPU y rendimiento en tiempo real.

Rust proporciona un rendimiento superior eliminando las interrupciones del recolector de basura y permitiendo un control más fino sobre la gestión de memoria, lo cual es crucial para aplicaciones de alto rendimiento y complejas.

Sí, MakePad planea tener una liberación de código abierto en crates, que es el NPM para Rust, permitiendo a los usuarios instalar y utilizar la plataforma fácilmente.

MakePad puede ejecutarse en plataformas web y como aplicación de escritorio nativa en sistemas operativos como Mac, Windows y Linux, aprovechando tecnologías como Metal, DirectX y OpenGL respectivamente.

Con MakePad se pueden desarrollar interfaces de usuario avanzadas, aplicaciones de diseño visual, y también es compatible con tecnologías emergentes como AR y VR.

Los planes futuros incluyen el lanzamiento de una herramienta de diseño para facilitar la creación visual de UI y expandir las capacidades de MakePad para incluir soporte móvil y otras mejoras en su funcionalidad y accesibilidad.

Rik Arends
Rik Arends
22 min
16 Jun, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Bienvenido a MakePad, una nueva forma de construir UI para web y nativo usando WebAssembly y Rust. JavaScript no es adecuado para aplicaciones complejas como IDEs y herramientas de diseño. Rust, un nuevo lenguaje de programación, se utilizó para reimaginar MakePad, dando como resultado una plataforma rápida y eficiente. MakePad ofrece edición en vivo, alto rendimiento de CPU y la capacidad de cargar componentes de instrumentos nativos. El futuro de MakePad incluye una versión de código abierto, una herramienta de diseño y soporte para importar modelos 3D.

1. Introducción a MakePad

Short description:

Bienvenidos a mi charla sobre MakePad, una nueva forma de construir UI para web y nativo utilizando WebAssembly y Rust. Fundé cloud9 IDE, una empresa para construir un IDE web. Pasé seis años rehaciendo toda la pila de renderizado del navegador en WebGL y JavaScript. El resultado es Makepad JavaScript, una revisión completa de la pila de renderizado en WebGL, que permite la codificación en vivo y aplicaciones interactivas de alto rendimiento.

Muy bien, bienvenidos a mi charla. Voy a hablar sobre MakePad. Es una nueva forma de construir UI para web y nativo utilizando WebAssembly y Rust.

Entonces, quiero comenzar este viaje hace mucho, mucho tiempo, quizás antes de que algunos de ustedes todavía estuvieran en la escuela primaria incluso. Fundé cloud9 IDE, es una empresa para construir un IDE web. Teníamos un editor de código basado en HTML llamado Ace, era uno de los dos en ese momento. Y, entonces estaba en medio del mundo HTML construyendo lo que se consideraba una aplicación compleja, un IDE, ¿verdad? Todos estaban haciendo páginas web, algunas aplicaciones web, pero el IDE con el editor de código se consideraba una aplicación web compleja.

Entonces, en ese momento estaba trabajando en el editor y recuerdo que estábamos trabajando en el plegado de código y quería que el plegado de código se animara. Es algo muy simple, ya sabes, las computadoras son rápidas, pueden animarlo, pero no importa lo que intenté, no pude hacerlo con HTML y CSS. Simplemente, hiciéramos lo que hiciéramos, era entrecortado y era horrible. Entonces en ese momento WebGL acababa de ser lanzado y comencé a investigar el uso de WebGL para renderizar UI, renderizar editores. Y me di cuenta de que tenía por delante una tarea enorme para reinventar la UI en WebGL. Entonces, dejé Cloud9 y comencé el viaje de rehacer toda la pila de renderizado del navegador en WebGL y JavaScript.

Y pasé seis años en eso. Probablemente construí tantas, seis o siete iteraciones completamente nuevas intentando hacer esto. Y quiero mostrarles el resultado de esos seis años aquí. Y eso es Makepad JavaScript. Esto es Makepad JavaScript. Es una revisión completa de la pila de renderizado en WebGL. Y puedes hacer, veamos, puedes codificar en vivo. Todo esto es codificable en vivo. Así que veamos si puedo cambiar el color del texto aquí. También puedo, veamos, tengo un poco de retroalimentación en el audio. Sí. Entonces fue realmente rápido. Podrías tener, esto son 50,000 círculos interactivos en un navegador. Estaba utilizando multi-threading. Entonces esta aplicación que se ejecuta aquí se estaba ejecutando en un hilo de trabajador y envió la lista de visualización al hilo principal del navegador. Por lo tanto, podrías tener cualquier número de aplicaciones ejecutándose al mismo tiempo, siempre y cuando tuvieras trabajadores. Y podrías hacer cosas interactivas muy, muy geniales.

2. Desafíos con la Estabilidad y el Poder de la CPU

Short description:

Todo esto funciona en un iPhone 6, y en algún momento, incluso logré que se ejecutara en sí mismo. Sin embargo, había un gran problema. Cuando trabajaba en la aplicación durante más de 30 minutos, Chrome se bloqueaba. Era inestable y no podía usar mis propias herramientas de desarrollo. El verdadero problema es que JavaScript no tiene suficiente potencia de CPU para todas las tareas. Este es un callejón sin salida.

Todo esto también funciona en un iPhone 6, creo, todavía, si lo cargas en Safari. Y en algún momento, incluso logré que se ejecutara en sí mismo. Y esto es genial. Todo esto está bien.

Pero tenía un gran problema. Tenía un gran problema. En ese momento, en Chrome, cuando trabajaba en la aplicación durante más de 30 minutos, Chrome simplemente se bloqueaba. Simplemente se bloqueaba, y no sabía por qué. Y habiendo lidiado con errores del navegador antes, a veces tardan años. A veces nunca se resuelven. Usualmente cuando estás como, sí, hago LiveCode en Chrome durante media hora, y recargo en caliente un trabajador, eso es un error. Dicen, OK, probablemente eres la única persona en el mundo que hace eso. Así que buena suerte con eso. Así que eso fue muy deprimente. Y aguanta.

Así que no era estable. Eso realmente era un problema porque quería usarlo yo mismo. Si no puedo usar mis propias herramientas de desarrollo para mis propias cosas, entonces las herramientas de desarrollo son malas. Sin embargo, había un problema real, porque tal vez podría haber solucionado esto. Podría haberlo solucionado yo mismo o haber presionado para siempre para que alguien más lo hiciera. Pero el verdadero problema es que no te queda potencia de CPU si haces todo esto en JavaScript. El hilo del trabajador se limita al 100% si usas el editor, el resaltado de sintaxis. Todo eso es simplemente demasiado pesado para hacerlo en tiempo real con JavaScript. Y eso significaba que estaba mirando hacia adelante. Veo AR, VR, interfaces de usuario. Veo pantallas de alta frecuencia de cuadros. Los últimos max son 120 hertz. Así que ya no tienes esos 16 milisegundos. Estás bajando a 8 o menos. Así que es un callejón sin salida.

QnA

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Utilizando Rust desde Vue con WebAssembly
Vue.js London Live 2021Vue.js London Live 2021
8 min
Utilizando Rust desde Vue con WebAssembly
Top Content
In this Talk, the speaker demonstrates how to use Rust with WebAssembly in a Vue.js project. They explain that WebAssembly is a binary format that allows for high-performance code and less memory usage in the browser. The speaker shows how to build a Rust example using the WasmPack tool and integrate it into a Vue template. They also demonstrate how to call Rust code from a Vue component and deploy the resulting package to npm for easy sharing and consumption.
Construyendo Interfaces Controladas por el Cerebro en JavaScript
JSNation Live 2021JSNation Live 2021
27 min
Construyendo Interfaces Controladas por el Cerebro en JavaScript
Top Content
Learn how to build brain-controlled interfaces using JavaScript and brain sensors. Understand the functions of different parts of the brain and how they relate to sensor placement. Explore examples of calm and focus detection, as well as the Kinesis API for mental commands. Discover the applications of brain-controlled interfaces, such as scrolling web pages and password-less authentication. Understand the limits and opportunities of brain control and the potential for using brain sensors in medical applications.
Creando lo Imposible: Virtualización X86 en el Navegador con WebAssembly
JSNation 2022JSNation 2022
21 min
Creando lo Imposible: Virtualización X86 en el Navegador con WebAssembly
ChirpX is a technology to securely run binary code in the browser, written in C++ and compiled to JavaScript WebAssembly. It can run a full virtualized system in the browser, including Bash and other languages like Python and JavaScript. ChirpX aims for scalability and the ability to work with large code bases, supporting multiprocessing and multithreading. It uses a two-tiered execution engine with an interpreter and a JIT engine. Future plans include running the full X.Org server in the browser and implementing the Windows system call. WebVM, the underlying technology, has a virtual file system backed by Cloudflare.
Abrazando WebGPU y WebXR con Three.js
JSNation 2024JSNation 2024
27 min
Abrazando WebGPU y WebXR con Three.js
The 3JS project has evolved into a community-driven effort with numerous contributors over the past 14 years. It started with 3D engine work in Flash and transitioned to using SVGs for rendering in HTML5 before adopting WebGL. The project showcases various projects and frameworks, including a no-code tool powered by 3.js. The team is working on a new render using WebGPU and developing a new shader language called TSL. The hope is that WebGPU will eventually replace WebGL, offering better control and performance.
TensorFlow.js 101: Aprendizaje automático en el navegador y más allá
ML conf EU 2020ML conf EU 2020
41 min
TensorFlow.js 101: Aprendizaje automático en el navegador y más allá
TensorFlow.js enables machine learning in the browser and beyond, with features like face mesh, body segmentation, and pose estimation. It offers JavaScript prototyping and transfer learning capabilities, as well as the ability to recognize custom objects using the Image Project feature. TensorFlow.js can be used with Cloud AutoML for training custom vision models and provides performance benefits in both JavaScript and Python development. It offers interactivity, reach, scale, and performance, and encourages community engagement and collaboration between the JavaScript and machine learning communities.
La improbable amistad entre React y Rust
React Advanced 2023React Advanced 2023
26 min
La improbable amistad entre React y Rust
This Talk explores the unlikely friendship between React and Rust, showcasing how they can be used together. The speaker demonstrates live coding and explains the process of calling Rust functions from JavaScript using the Tauri framework. The Talk also covers retrieving system information and disk details using Rust's sysinfo library. The speaker emphasizes the importance of serializability and showcases a button and SD card reader as examples of practical applications.