1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
[[!meta title="One year progress update Schemacs (formerly Gypsum)"]]
[[!meta copyright="Copyright © 2025 Ramin Honary"]]
[[!inline pages="internal(2025/info/schemacs-nav)" raw="yes"]]
<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->
# One year progress update Schemacs (formerly Gypsum)
Ramin Honary (he/him) - Pronunciation: "Rah-mean" (hard-H) "Ho-na-ree", Mastodon (preferred): ; blog: <https://tilde.town/~ramin_hal9001>; Codeberg: <https://codeberg.org/ramin_hal9001/schemacs> - SourceHut: <https://sr.ht/~ramin_hal9001>
[[!inline pages="internal(2025/info/schemacs-before)" raw="yes"]]
During EmacsConf 2024 last year I presented my work on a
clone of GNU Emacs written in Scheme which also clones the
Emacs Lisp programming language. In this talk, I will
briefly present an overview of the project similar to the
talk I gave last year, and then discuss the progress that
I have made on this project in the past year.
To quote the description from the presentation I gave last
year:
> Unlike other editors which only clone the Emacs
> keybindings (Edwin, Jed, jEdit, Jove, Lem, MG, Yi,
> Zile), I hope my Emacs clone will also fully clone the
> Emacs Lisp programming language well enough that many of
> the packages in ELPA, Non-GNU ELPA, and perhaps even
> MELPA, can be used in [Schemacs, formerly "Gypsum"]
> without any modification. I would also like to talk a
> little bit about how I am implementing it (the software
> architecture), and invite others to contribute.
>
> I think my project is of interest to many Emacs users
> because, firstly, I have personally spoken with a
> relatively large number of people who have expressed
> interest in making Emacs programmable in Scheme.
> Secondly, there is a good amount of prior art for Scheme
> implementations of Emacs. There are even builds of Emacs
> that link to Guile which provides a "scheme-eval"
> built-in function that translates between Elisp data
> types and Scheme data types. The Guile compiler itself
> ships with an Emacs Lisp compiler as well, although it
> does not provide enough of Emacs's built-in functions to
> be of much use.
The progress I have made so far:
- Ported all Guile-specific parts of the Emacs Lisp
interpreter to fully standards-compliant R7RS Scheme
code. The interpreter now runs on a few different
Scheme implementations, not just Guile. The GUI remains
Guile-only for now.
- Implemented a new R7RS-compliant lexer and parser which
constructs an Abstract Syntax Tree (AST) data structure,
making it easier to find the source of errors and
produce informative back traces.
- Implemented enough of the Emacs Lisp interpreter to be
able to load the "subr.el" source file, this defines
what you might call the "core" of the Emacs Lisp
language, including macros such as "defun" and "lambda."
My primary goal continues to be to make it as easy as
possible for other people to contribute to this
project. Pretty soon it should be possible to run the
Emacs Regression Test suite (ERT) in the cloned Emacs Lisp
interpreter. Once this is done, we can run the same test
code used during the building and testing GNU Emacs to
test Schemacs. Hopefilly then, anyone will be able to
select a failing test, write code to make the test pass,
and submit a patch.
About the speaker:
I am Ramin Honary, I am have been professional software
engineer for 17 years and I have always had a passion for
functional programming languages, especially Haskell and
the Lisp family of languages.
[[!inline pages="internal(2025/info/schemacs-after)" raw="yes"]]
[[!inline pages="internal(2025/info/schemacs-nav)" raw="yes"]]
|