5 puan yazan alstjr7375 2021-03-18 | 6 yorum | WhatsApp'ta paylaş
  • Emacs'e Deno runtime entegre edilerek JavaScript/TypeScript kullanılabiliyor

  • V8 motoru, Elisp VM'e kıyasla daha iyi optimize edilmiş durumda

  • Emacs'in yetersiz asenkron işleme ve çoklu iş parçacığı desteği JavaScript ile çözülebiliyor (Async/Await, Web Worker); WebAssembly de destekleniyor

  • Elisp'i Native Code'a dönüştüren native-comp ve Firefox'un Webrender'ını compositör olarak kullanarak GPU hızlandırması mümkün (deneysel)

Kısa süre önce Hacker News'te paylaşılmıştı.

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

6 yorum

 
ryuheechul 2021-03-18

Emacs hakkında çok bilgim yok; geçmişte sadece Spacemacs kullanmıştım. Ama ana sayfadaki aşağıdaki bölümü okuyunca ilginç geldi. Sonuçta asıl mesele, Deno üzerinden performansı artırıp dil desteğini genişleterek ekosistemi canlandırmak gibi görünüyor.

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'nin JS uygulaması, fib(40) hesaplamasında native-comp olmadan emacs 28'den 50 kattan fazla daha hızlı çalışıyor. native-comp seviye 3 ile ise JS, 15 kattan fazla daha hızlı. Bu da Deno'dan gelen Async I/O, WebWorkers ve WebAsm ile birlikte, Emacs'i daha akıcı ve daha hızlı bir deneyim haline getirecek araçları sunuyor; üstelik arka plan süreci olarak ek araçlar kurmanız ya da paylaşılan kütüphane sürümleriyle uğraşmanız gerekmeden — her şey betik katmanında, tam performansla.

 
alstjr7375 2021-03-18

Aslında genişletilebilirliğin kendisi kötü değil.

Lisp'e özgü makrolar,

native dil binding'leri için dinamik modül desteği (Tree-sitter gibi projeler bunun tipik örneği),

libvterm ve Xwidget desteği sayesinde native bir terminal emülatörü ve tarayıcıyı dahili olarak kullanabilmesi gibi...

https://github.com/canatella/xwwp

Sorun I/O ve thread'ler.

I/O asenkron olarak uygulanmadığı için büyük dosyalarda donma yaşanıyor; thread oluştursanız bile paralellik değil eşzamanlılık desteklendiğinden yük arttığında mutlaka sorun çıkıyor.😢😢😢

Ama bu proje,

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

gibi dosyaların asenkron işlenmesini desteklemeye yönelik bir çaba gösteriyor gibi göründüğü için ilgimi çekiyor.

Ayrıca NPM'in devasa ekosisteminden de yararlanabiliyor.

 
alstjr7375 2021-03-18

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

Sıkı şekilde eklenen bir katman olduğu için upstream yamalarını temiz biçimde uygulamak mümkün.

Temsili bir örnek olarak, ben dün Emacs mirror’un native-comp dalını birleştirmeyi denedim,

1200’den fazla commit vardı ama yalnızca 4-5 dosyada conflict oluştu.

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

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

 
alstjr7375 2021-03-20

Bir şekilde ekibe katılmış oldum haha

 
xguru 2021-03-20

Vay canına, harika görünüyor. Başarılar!!

 
alstjr7375 2021-03-20

Teşekkürler!!