5 poin oleh alstjr7375 2021-03-18 | 6 komentar | Bagikan ke WhatsApp
  • Runtime Deno digabungkan ke Emacs sehingga bisa menggunakan JavaScript/TypeScript

  • Mesin V8 lebih dioptimalkan dibanding VM Elisp

  • Kekurangan Emacs dalam pemrosesan asinkron dan multi-threading bisa ditangani dengan JavaScript (Async/Await, Web Worker), dan juga mendukung WebAssembly

  • Akselerasi GPU dimungkinkan secara eksperimental dengan native-comp yang mengubah Elisp menjadi Native Code dan menggunakan WebRender milik Firefox sebagai compositor

Beberapa waktu lalu ini juga sempat muncul di Hacker News.

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

6 komentar

 
ryuheechul 2021-03-18

Saya dulu hanya pernah memakai Spacemacs, jadi tidak terlalu paham soal Emacs, tetapi saya membaca bagian di bawah ini di halaman utamanya dan menurut saya menarik. Pada akhirnya, tampaknya kuncinya adalah mengaktifkan ekosistem melalui peningkatan performa dan perluasan dukungan bahasa lewat Deno.

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);

};

Implementasi JS emacs-ng mencatat kecepatan lebih dari 50 kali lipat dibanding emacs 28 tanpa native-comp untuk menghitung fib(40). Dengan native-comp pada level 3, JS tetap lebih dari 15 kali lebih cepat. Ini, bersama Async I/O dari Deno, WebWorkers, dan WebAsm, memberi Anda alat untuk menjadikan Emacs pengalaman yang lebih mulus dan cepat tanpa harus memasang alat tambahan untuk dijalankan sebagai proses latar belakang atau mengkhawatirkan versi shared library - performa penuh dengan SEMUANYA di lapisan scripting.

 
alstjr7375 2021-03-18

Sebenarnya, ekstensibilitasnya sendiri tidak buruk.

Makro khas Lisp

Binding bahasa native lewat dukungan modul dinamis (proyek seperti tree-sitter adalah contoh yang representatif)

Dukungan libvterm dan Xwidget juga memungkinkan penggunaan emulator terminal dan browser native secara internal..

https://github.com/canatella/xwwp

Masalahnya ada pada I/O dan thread.

Karena I/O belum diimplementasikan secara asinkron, file berukuran besar bisa menyebabkan freezing, dan meskipun membuat thread mendukung konkurensi, itu bukan paralelisme, jadi saat beban meningkat masalah pasti muncul.😢😢😢

Namun proyek ini

https://github.com/DavidDeSimone/ng-async-files

terlihat menunjukkan upaya untuk mendukung pemrosesan file secara asinkron, jadi saya jadi tertarik.

Selain itu, bisa ikut memanfaatkan ekosistem NPM yang sangat luas.

 
alstjr7375 2021-03-18

https://emacs-ng.github.io/emacs-ng/main-features/

Karena ini adalah layer tambahan yang ditambahkan secara ketat, patch dari upstream bisa diterapkan dengan rapi.

Sebagai contoh yang representatif, kemarin saya mencoba menggabungkan branch native-comp dari mirror Emacs,

jumlah commit-nya lebih dari 1200, tetapi conflict hanya muncul di sekitar 4–5 file.

https://github.com/emacs-mirror/emacs/tree/feature/native-comp

https://github.com/emacs-ng/emacs-ng/pull/185

 
alstjr7375 2021-03-20

Tahu-tahu saya jadi bergabung dengan tim ini juga, hehe

 
xguru 2021-03-20

Wah, keren sekali. Semangat!!

 
alstjr7375 2021-03-20

Terima kasih!!