5 पॉइंट द्वारा alstjr7375 2021-03-18 | 6 टिप्पणियां | WhatsApp पर शेयर करें
  • Emacs में Deno runtime को जोड़कर JavaScript/TypeScript का उपयोग किया जा सकता है

  • V8 engine, Elisp VM की तुलना में बेहतर optimized है

  • Emacs की कमी वाली asynchronous processing और multi-threading को JavaScript से संभाला जा सकता है (Async/Await, Web Worker), और WebAssembly भी support करता है

  • Elisp को Native Code में बदलने वाले native-comp और Firefox के Webrender को compositor के रूप में उपयोग करके GPU acceleration संभव है (experimental)

कुछ समय पहले यह Hacker News पर भी आया था.

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

6 टिप्पणियां

 
ryuheechul 2021-03-18

मैंने पहले Emacs में सिर्फ Spacemacs ही इस्तेमाल किया है, इसलिए ज़्यादा नहीं जानता, लेकिन मेन पेज पर नीचे वाला हिस्सा पढ़ा तो काफ़ी दिलचस्प लगा। आखिरकार लगता है कि Deno के ज़रिए performance बेहतर करना और language support को extensions के माध्यम से बढ़ाकर ecosystem को सक्रिय करना ही इसकी मुख्य बात है।

Performance#

v8 का world-class JIT बहुत बड़े performance gains की संभावना देता है। एक simple benchmark (fibonacci) के लिए, नीचे दिए गए 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);

};

fib(40) की गणना में emacs-ng का JS implementation, native-comp के बिना emacs 28 की तुलना में 50 गुना से भी ज़्यादा तेज़ है। native-comp को level 3 पर रखने पर भी JS 15 गुना से अधिक तेज़ चलता है। यह, Deno से मिलने वाले Async I/O, WebWorkers, और WebAsm के साथ मिलकर, आपको Emacs को अधिक smooth और तेज़ अनुभव बनाने के लिए tools देता है, बिना अतिरिक्त tools इंस्टॉल किए जिन्हें background processes के रूप में चलाना पड़े या shared library versions की चिंता करनी पड़े — scripting layer में EVERYTHING के साथ full performance।

 
alstjr7375 2021-03-18

असल में extensibility खुद में बुरी नहीं है.

Lisp की खासियत वाले macros

dynamic module support के ज़रिए native language bindings (Tree-sitter जैसे प्रोजेक्ट इसका प्रतिनिधि उदाहरण हैं)

libvterm और Xwidget support की वजह से native terminal emulator और browser को अंदर ही इस्तेमाल किया जा सकता है..

https://github.com/canatella/xwwp

समस्या I/O और threads की है.

I/O asynchronous तरीके से implement नहीं है, इसलिए बड़ी files में freezing हो जाती है, और thread बनाने पर concurrency तो support होती है लेकिन parallelism नहीं, इसलिए load बढ़ने पर दिक्कत ज़रूर आती है.😢😢😢

लेकिन इस प्रोजेक्ट में

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

की तरह files की asynchronous processing support करने की कोशिश दिख रही है, इसलिए इसमें दिलचस्पी हो रही है.

और NPM के विशाल ecosystem का भी फायदा उठाया जा सकता है.

 
alstjr7375 2021-03-18

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

यह एक सख्ती से जोड़ी गई layer है, इसलिए upstream के patch को साफ़-सुथरे तरीके से लागू किया जा सकता है।

एक प्रतिनिधि उदाहरण के तौर पर, मैंने कल Emacs mirror की native-comp branch को merge करने की कोशिश की थी,

और 1200 से ज़्यादा commits होने के बावजूद conflict सिर्फ 4~5 files में ही आए।

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

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

 
alstjr7375 2021-03-20

संयोग से मैं भी टीम में शामिल हो गया हूँ, हाहा

 
xguru 2021-03-20

वाह, यह बहुत शानदार है। शुभकामनाएँ!!

 
alstjr7375 2021-03-20

धन्यवाद!!