5 Punkte von alstjr7375 2021-03-18 | 6 Kommentare | Auf WhatsApp teilen
  • 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.

https://news.ycombinator.com/item?id=26453174

6 Kommentare

 
ryuheechul 2021-03-18

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)

  n

(+ (fibonacci (- n 1)) (fibonacci (- n 2)))))

const fib = (n) => {

if (n <= 1) {

    return n;

}

return fib(n - 1) + fib(n - 2);

};

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.

 
alstjr7375 2021-03-18

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.

 
alstjr7375 2021-03-18

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

 
alstjr7375 2021-03-20

Irgendwie bin ich wohl dem Team beigetreten, haha.

 
xguru 2021-03-20

Wow, das ist großartig. Viel Erfolg!!

 
alstjr7375 2021-03-20

Vielen Dank!!