5 điểm bởi alstjr7375 2021-03-18 | 6 bình luận | Chia sẻ qua WhatsApp
  • Có thể kết hợp runtime Deno vào Emacs để dùng JavaScript/TypeScript

  • Engine V8 được tối ưu hóa tốt hơn VM Elisp

  • Có thể xử lý những điểm còn thiếu của Emacs về xử lý bất đồng bộ và đa luồng bằng JavaScript (Async/Await, Web Worker), đồng thời cũng hỗ trợ WebAssembly

  • Có thể tăng tốc bằng GPU (mang tính thử nghiệm) nhờ native-comp chuyển Elisp sang Native Code và sử dụng WebRender của Firefox làm compositor

Cách đây không lâu, dự án này đã từng được đăng trên Hacker News.

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

6 bình luận

 
ryuheechul 2021-03-18

Tôi trước đây chỉ dùng Spacemacs chứ chưa dùng Emacs nhiều nên cũng không rõ lắm, nhưng tôi đã đọc đoạn bên dưới ở trang chính và thấy khá thú vị. Có vẻ cuối cùng thì điểm cốt lõi là kích hoạt hệ sinh thái bằng cách cải thiện hiệu năng thông qua Deno và mở rộng hỗ trợ ngôn ngữ.

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

};

Triển khai JS của emacs-ng chạy nhanh hơn emacs 28 không có native-comp hơn 50 lần khi tính fib(40). Với native-comp ở mức 3, JS vẫn nhanh hơn hơn 15 lần. Điều này, cùng với Async I/O từ Deno, WebWorkers và WebAsm, mang lại cho bạn các công cụ để biến Emacs thành một trải nghiệm mượt và nhanh hơn mà không cần cài thêm công cụ để chạy như tiến trình nền hoặc phải lo về phiên bản thư viện dùng chung - hiệu năng đầy đủ với MỌI THỨ ở tầng scripting.

 
alstjr7375 2021-03-18

Thực ra khả năng mở rộng tự thân của nó không tệ.

Macro đặc trưng của Lisp

Hỗ trợ mô-đun động nên có thể binding với ngôn ngữ native (các dự án như tree-sitter là ví dụ tiêu biểu)

Cũng có thể dùng nội bộ trình giả lập terminal và trình duyệt theo kiểu native nhờ hỗ trợ libvterm và Xwidget..

https://github.com/canatella/xwwp

Vấn đề là I/O và thread.

Vì I/O chưa được triển khai bất đồng bộ nên các tệp lớn sẽ bị đơ, còn dù có tạo thread thì chỉ hỗ trợ concurrency chứ không phải parallelism, nên khi tải tăng lên là gần như chắc chắn sẽ phát sinh vấn đề.😢😢😢

Nhưng dự án này

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

cho thấy có nỗ lực hỗ trợ xử lý tệp bất đồng bộ,

nên mình đang khá quan tâm.

Ngoài ra còn có thể tận dụng hệ sinh thái khổng lồ của NPM nữa.

 
alstjr7375 2021-03-18

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

Đây là một lớp được thêm vào theo cách tách biệt nghiêm ngặt, nên có thể áp dụng các bản vá từ upstream một cách gọn gàng.

Ví dụ tiêu biểu là hôm qua tôi đã thử gộp nhánh native-comp của bản mirror Emacs,

có hơn 1200 commit nhưng xung đột chỉ phát sinh ở khoảng 4~5 tệp mà thôi.

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

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

 
alstjr7375 2021-03-20

Tình cờ lại gia nhập vào team rồi haha

 
xguru 2021-03-20

Ồ, tuyệt vời quá. Cố lên nhé!!

 
alstjr7375 2021-03-20

Cảm ơn!!