5 คะแนน โดย alstjr7375 2021-03-18 | 6 ความคิดเห็น | แชร์ทาง WhatsApp
  • ผสาน Deno runtime เข้ากับ Emacs ทำให้สามารถใช้ JavaScript/TypeScript ได้

  • เอนจิน V8 ได้รับการปรับแต่งให้มีประสิทธิภาพดีกว่า Elisp VM

  • สามารถจัดการข้อจำกัดของ Emacs ด้านการประมวลผลแบบอะซิงโครนัสและมัลติเธรดด้วย JavaScript ได้ (Async/Await, Web Worker) และยังรองรับ WebAssembly

  • ใช้ native-comp ที่แปลง Elisp เป็น Native Code และใช้ Webrender ของ Firefox เป็น compositor เพื่อรองรับการเร่งความเร็วด้วย GPU (อยู่ในช่วงทดลอง)

ไม่นานมานี้เคยขึ้นบน Hacker News ด้วย

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

6 ความคิดเห็น

 
ryuheechul 2021-03-18

ผมเคยใช้ Emacs แค่ผ่าน Spacemacs มาก่อนเลยอาจไม่ค่อยรู้ลึกนัก แต่พอได้อ่านส่วนด้านล่างในหน้าหลักแล้วก็น่าสนใจครับ สุดท้ายแล้วดูเหมือนว่าหัวใจสำคัญคือการทำให้ ecosystem คึกคักขึ้นผ่าน 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);

};

อิมพลีเมนเทชัน JS ของ emacs-ng ทำเวลาได้เร็วกว่า emacs 28 ที่ไม่ใช้ native-comp มากกว่า 50 เท่าในการคำนวณ fib(40) และเมื่อใช้ native-comp ระดับ 3 แล้ว JS ก็ยังเร็วกว่าเกิน 15 เท่า สิ่งนี้รวมกับ Async I/O จาก Deno, WebWorkers และ WebAsm ทำให้คุณมีเครื่องมือที่จะทำให้ Emacs ลื่นไหลและเร็วขึ้น โดยไม่ต้องติดตั้งเครื่องมือเพิ่มเติมเพื่อรันเป็นโปรเซสเบื้องหลังหรือกังวลเรื่องเวอร์ชันของ shared library — ได้ประสิทธิภาพเต็มที่โดยที่ EVERYTHING อยู่ในชั้นสคริปต์ทั้งหมด

 
alstjr7375 2021-03-18

จริงๆ แล้วความสามารถในการขยายระบบเองก็ไม่ได้แย่นัก

มาโครที่เป็นเอกลักษณ์ของ Lisp

การรองรับโมดูลแบบไดนามิก ทำให้มี native language binding ได้ (โปรเจ็กต์อย่าง tree-sitter เป็นตัวอย่างเด่น)

รวมถึงรองรับ libvterm และ Xwidget เลยสามารถใช้เทอร์มินัลอีมูเลเตอร์และเบราว์เซอร์แบบเนทีฟภายในได้ด้วย..

https://github.com/canatella/xwwp

ปัญหาคือเรื่อง I/O กับเธรดครับ

เพราะ I/O ไม่ได้ถูกทำเป็นแบบอะซิงก์ ไฟล์ขนาดใหญ่เลยเกิดอาการค้างได้ และถึงจะสร้างเธรดได้ก็รองรับแค่ concurrency ไม่ใช่ parallelism พอโหลดสูงขึ้นก็มักจะมีปัญหาแน่ๆ 😢😢😢

แต่โปรเจ็กต์นี้

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

ดูเหมือนจะมีความพยายามเพิ่มการรองรับการประมวลผลไฟล์แบบอะซิงก์

ก็เลยกำลังสนใจอยู่

แถมยังอาศัยระบบนิเวศอันมหาศาลของ NPM ได้ด้วยครับ

 
alstjr7375 2021-03-18

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

เนื่องจากเป็นเลเยอร์ที่ถูกเพิ่มเข้ามาแบบแยกอย่างเคร่งครัด จึงสามารถนำแพตช์จาก upstream มาปรับใช้ได้อย่างเรียบร้อย

ตัวอย่างที่ชัดเจนคือ เมื่อวานผมลองรวม native-comp branch ของ Emacs mirror ดู

มีมากกว่า 1200 คอมมิต แต่เกิด conflict แค่ประมาณ 4~5 ไฟล์เท่านั้น

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

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

 
alstjr7375 2021-03-20

ไม่รู้ไปไม่รู้มายังไง สุดท้ายก็ได้มาร่วมทีมซะแล้ว 555

 
xguru 2021-03-20

ว้าว เจ๋งมากครับ สู้ๆ นะครับ!!

 
alstjr7375 2021-03-20

ขอบคุณครับ!!