-
Die Deno-Runtime lässt sich in Emacs integrieren, sodass JavaScript/TypeScript verwendet werden kann
-
Die V8-Engine ist besser optimiert als die Elisp-VM
-
Die schwachen asynchronen Verarbeitungs- und Multithreading-Fähigkeiten von Emacs können mit JavaScript umgesetzt werden (
Async/Await, Web Worker); WebAssembly wird ebenfalls unterstützt -
Mit
native-comp, das Elisp in nativen Code umwandelt, und Firefox’ WebRender als Compositor ist GPU-Beschleunigung möglich (experimentell)
Vor einiger Zeit wurde das auch auf Hacker News gepostet.
6 Kommentare
Ich kenne mich mit Emacs nicht besonders gut aus, weil ich früher nur Spacemacs benutzt habe, aber ich habe auf der Startseite den folgenden Abschnitt gelesen und fand ihn interessant. Letztlich scheint der Kern zu sein, über Deno die Leistung zu verbessern und die Unterstützung für Programmiersprachen zu erweitern, um so das Ökosystem zu beleben.
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) => {
};
emacs-ng's JS implementation clocks in over 50 times faster than emacs 28 without native-comp for calculating fib(40). With native-comp at level 3, JS clocks in over 15 times faster. This, along with Async I/O from Deno, WebWorkers, and WebAsm, gives you the tools to make Emacs a smoother and faster experience without having to install additional tools to launch as background processes or worry about shared library versions - full performance with EVERYTHING in the scripting layer.
Eigentlich ist die Erweiterbarkeit an sich nicht schlecht.
Die für Lisp typischen Makros
Native-Sprach-Bindings durch Unterstützung dynamischer Module (ein repräsentatives Projekt dafür ist Tree-sitter)
Dank Unterstützung für libvterm und Xwidget kann man intern einen nativen Terminal-Emulator und Browser verwenden usw.
https://github.com/canatella/xwwp
Das Problem sind I/O und Threads.
Da I/O nicht asynchron implementiert ist, kommt es bei großen Dateien zu Freezes, und selbst wenn man Threads erstellt, wird zwar Nebenläufigkeit unterstützt, aber keine Parallelität, sodass bei hoher Last zwangsläufig Probleme auftreten. 😢😢😢
Dieses Projekt jedoch
https://github.com/DavidDeSimone/ng-async-files
scheint sich um Unterstützung für asynchrone Dateiverarbeitung zu bemühen, deshalb interessiert es mich gerade.
Außerdem kann man vom riesigen Ökosystem von NPM profitieren.
https://emacs-ng.github.io/emacs-ng/main-features/
Da es sich um eine strikt zusätzlich eingezogene Schicht handelt, lassen sich Patches aus dem Upstream sauber anwenden.
Als typisches Beispiel habe ich gestern versucht, den
native-comp-Branch des Emacs-Mirrors zusammenzuführen,und obwohl es mehr als 1200 Commits sind, traten Konflikte nur in 4 bis 5 Dateien auf.
https://github.com/emacs-mirror/emacs/tree/feature/native-comp
https://github.com/emacs-ng/emacs-ng/pull/185
Irgendwie bin ich wohl dem Team beigetreten, haha.
Wow, das ist großartig. Viel Erfolg!!
Vielen Dank!!