Short description: Replace the Elisp interpreter with Guile's Elisp compiler
Additional info: http://emacswiki.org/emacs/GuileEmacs
Name: BT Templeton
Email address: firstname.lastname@example.org
Replace the Elisp interpreter with Guile's Elisp compiler
Using Guile as Emacs's Elisp implementation will reduce maintenance effort, improve performance, allow extension in Scheme and other languages supported by Guile, and will make it easier to introduce new language features (for example, continuations, concurrency, FFI, a package system, etc.).
Guile-Emacs will use Guile's Elisp compiler instead of the current Elisp interpreter, and all Elisp programs will run on the Guile VM. The Guile-Emacs project will be largely complete and ready to be merged into standard Emacs.
- Use Guile symbol and variable objects within Emacs. This will, at a minimum, require a new approach to forwarded variables, which will require support for symbol-macros in Guile-Elisp. It may also require a new implementation of buffer-local variables.
- Extend Guile-Elisp to support Emacs strings, either by using generic functions for string manipulation or by adding some support for Emacs-style multibyte strings and text properties to Guile itself.
- Use Guile hash tables in Emacs, rather than a smob type.
- Replace all uses of setjmp, etc. with Guile exceptions or continuations. (I have a working patch for this that requires some revision.)
- Use Guile fluids for dynamic binding. (The previous task is a prerequisite for this.) This may require a new implementation of fluids, as the current one is probably not at all efficient for programs that use large numbers of fluids.
- Once the above tasks are complete, it should be possible to compile Elisp programs with Guile-Elisp and run them within Emacs. Change `eval', `load', and related functions to do so.
- Guile-Elisp can run complex batch-mode Elisp programs, but running an entire Emacs environment may uncover some bugs and incompatibilites. Fix whatever problems appear, and add missing functionality such as low-level debugging functions.
- Update the Emacs environment (byte-compilation functions, `load', Makefiles, etc.) to use programs compiled for the Guile VM instead of ".elc" files.
Further work may include:
- New Elisp language features. For example, access to the full numeric tower would be an obvious first step, and a simple package system would make access to Guile modules more convenient.
- Demo programs that are not feasible to write in standard Emacs, such as a simple FFI wrapper or a Scheme-Interaction mode.
- Performance improvements and benchmarking
I'll rely on the relevant project mailing lists and IRC for most questions, and will communicate with my mentor via email and IRC (and potentially public mailing list posts, weblog posts, etc.) on whatever schedule they find convenient. As before, I'll keep my code in a publicly-accessible repository.
I have been programming in Lisp, contributing to Free Software projects, and using Emacs as my primary editor for about ten years now. I've successfully completed three GSoC projects working on Guile-Elisp and Guile-Emacs, and this proposal is a continuation of that work. I have significant experience with hacking on Emacs itself and extensive experience working on other C-based projects that use Lisp as an extension language. In addition to significant experience with Lisp and Scheme in general, I'm familiar with the relevant portions of Guile and have some experience writing Emacs extensions.