kamoii / emacs-ng

A new approach to Emacs - Including TypeScript, Threading, Async I/O, and WebRender.

Home Page:https://emacs-ng.github.io/emacs-ng/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

emacs-ng

A new approach to Emacs - Including TypeScript, Threading, Async I/O, and WebRender.


homepagefeaturessetupgetting startedusing denoFAQNative Hackers Handbook (Architecture)


Overview

emacs-ng is based off of the master branch of emacs, and regularly merges in the latest changes. (this branch includes the native compilation feature from Andrea Corallo).

The last merged commit is a2842a1172 (Fri May 7 2021).

Motivation

The goal of this fork is to explore new development approaches. To accomplish this, we aim to maintain an inclusive and innovative environment. The project is not about replacing elisp with a more popular language like Javascript. We just want to make emacs more approachable for people who don't like lisp as much as we do.

Contributions are welcome from anyone and we are always happy to invite new people to the project. We are open towards interesting ideas to make emacs better. Our only request is that you open an issue before starting work and be willing to take feedback from the core contributors.

Why Emacs-ng

Emacs-ng is an additive native layer over emacs, bringing features like Deno's Javascript and Async I/O environment, Mozilla's Webrender (experimental opt-in feature), and other features in development. emacs-ng's approach is to utilize multiple new development approaches and tools to bring Emacs to the next level. emacs-ng is maintained by a team that loves Emacs and everything it stands for - being totally introspectable, with a fully customizable and free development environment. We want Emacs to be a editor 40+ years from now that has the flexibility and design to keep up with progressive technology.

Why JavaScript

One of emacs-ng's primary features is integrating the Deno Runtime, which allows execution of JavaScript and Typescript within Emacs. The details of that feature are listed below, however many users would ask themselves WHY JAVASCRIPT? JavaScript is an extremely dynamic language that allows for a user to inspect and control their scripting environment. The key to note is that bringing in Deno isn't JUST JavaScript - it's an ecosystem of powerful tools and approaches that Emacs just doesn't have currently.

  • TypeScript offers an extremely flexible typing system, that allows to user to have compile time control of their scripting, with the flexibility of types "getting out of the way" when not needed.
  • Deno uses Google's v8 JavaScript engine, which features an extremely powerful JIT and world-class garbage collector.
  • Usage of modern Async I/O utilizing Rust's Tokio library.
  • Emacs-ng has WebWorker support, meaning that multiple JavaScript engines can be running in parallel within the editor. The only restriction is that only the 'main' JS Engine can directly call lisp functions.
  • Emacs-ng also has WebAssembly support - compile your C module as WebAsm and distribute it to the world. Don't worry about packaging shared libraries or changing module interfaces, everything can be handled and customized by you the user, at the scripting layer. No need to be dependent on native implementation details.

Performance

v8's world-class JIT offers the potential for large performance gains. Async I/O from Deno, WebWorkers, and WebAsm, gives you the tools to make Emacs a smoother and faster experience without having to install additional tools to launch as background processes or worry about shared library versions.

Contributing

Contributions are welcome. We try to maintain a list of "new contributor" friendly issues tagged with "good first issue".

About

A new approach to Emacs - Including TypeScript, Threading, Async I/O, and WebRender.

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

License:GNU General Public License v3.0


Languages

Language:Emacs Lisp 66.7%Language:C 17.9%Language:Roff 10.5%Language:M4 0.8%Language:Objective-C 0.7%Language:TeX 0.6%Language:Makefile 0.4%Language:Rust 0.4%Language:C++ 0.2%Language:Shell 0.2%Language:PostScript 0.2%Language:Mathematica 0.1%Language:Perl 0.1%Language:HTML 0.1%Language:Ruby 0.1%Language:JavaScript 0.1%Language:Pascal 0.1%Language:Prolog 0.1%Language:MATLAB 0.1%Language:NewLisp 0.1%Language:SystemVerilog 0.1%Language:GDB 0.1%Language:Slash 0.1%Language:SRecode Template 0.1%Language:Smalltalk 0.1%Language:Python 0.1%Language:Yacc 0.0%Language:Ada 0.0%Language:PHP 0.0%Language:Awk 0.0%Language:Batchfile 0.0%Language:Nix 0.0%Language:Fortran 0.0%Language:Erlang 0.0%Language:SmPL 0.0%Language:Lua 0.0%Language:Dockerfile 0.0%Language:Java 0.0%Language:Hack 0.0%Language:NSIS 0.0%Language:SCSS 0.0%Language:CSS 0.0%Language:Forth 0.0%Language:Modula-2 0.0%Language:Tcl 0.0%Language:Less 0.0%Language:Scheme 0.0%Language:Go 0.0%Language:Raku 0.0%