-
Se puede usar JavaScript/TypeScript al integrar el runtime de Deno en Emacs
-
El motor V8 está mejor optimizado que la VM de Elisp
-
Las carencias de Emacs en procesamiento asíncrono y multihilo pueden resolverse con JavaScript (
Async/Await, Web Workers), y también hay soporte para WebAssembly -
Es posible la aceleración por GPU usando
native-comp, que convierte Elisp en código nativo, y WebRender de Firefox como compositor (experimental)
Hace poco apareció en Hacker News.
6 comentarios
No conozco mucho Emacs porque antes solo había usado Spacemacs, pero leí la parte de abajo en la página principal y me pareció interesante. Al final, parece que la clave es mejorar el rendimiento y ampliar el soporte de lenguajes a través de Deno para dinamizar el ecosistema.
Performance#
v8's world-class JIT offers the potential for massive performance gains. For a simple benchmark (fibonacci), using the following implementations:
(defun fibonacci(n)
(if (<= n 1)
const fib = (n) => {
};
La implementación en JS de emacs-ng registra una velocidad más de 50 veces superior a la de emacs 28 sin native-comp al calcular fib(40). Con native-comp en nivel 3, JS sigue siendo más de 15 veces más rápido. Esto, junto con el Async I/O de Deno, WebWorkers y WebAsm, te da las herramientas para hacer de Emacs una experiencia más fluida y rápida sin tener que instalar herramientas adicionales para ejecutarlas como procesos en segundo plano ni preocuparte por las versiones de bibliotecas compartidas: rendimiento completo con TODO en la capa de scripting.
En realidad, la extensibilidad en sí no está nada mal.
Los macros propios de Lisp.
Compatibilidad con módulos dinámicos, así que hay bindings con lenguajes nativos (un proyecto representativo sería Tree-sitter).
También puede usar internamente un emulador de terminal y un navegador nativos gracias al soporte de libvterm y Xwidget...
https://github.com/canatella/xwwp
El problema es el I/O y los hilos.
Como el I/O no está implementado de forma asíncrona, con archivos grandes se congela, y aunque crees hilos, soporta concurrencia pero no paralelismo, así que cuando la carga aumenta casi siempre termina habiendo problemas. 😢😢😢
Pero este proyecto,
https://github.com/DavidDeSimone/ng-async-files
parece mostrar un intento de dar soporte al procesamiento asíncrono de archivos, así que me está interesando.
Y además se puede aprovechar el enorme ecosistema de NPM.
https://emacs-ng.github.io/emacs-ng/main-features/
Como es una capa agregada de forma estricta, se pueden aplicar limpiamente los parches de upstream.
Como ejemplo representativo, ayer intenté fusionar la rama
native-compdel mirror de Emacs,y aunque son más de 1200 commits, solo aparecieron conflictos en 4 o 5 archivos.
https://github.com/emacs-mirror/emacs/tree/feature/native-comp
https://github.com/emacs-ng/emacs-ng/pull/185
Sin darme cuenta, terminé uniéndome al equipo jaja
Vaya, qué genial. ¡Mucho ánimo!!
¡¡Gracias!!