diff options
Diffstat (limited to '2025/talks/juicemacs.md')
| -rw-r--r-- | 2025/talks/juicemacs.md | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/2025/talks/juicemacs.md b/2025/talks/juicemacs.md new file mode 100644 index 00000000..d724ad33 --- /dev/null +++ b/2025/talks/juicemacs.md @@ -0,0 +1,74 @@ +[[!meta title="Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java"]] +[[!meta copyright="Copyright © 2025 Kana"]] +[[!inline pages="internal(2025/info/juicemacs-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. ---> + + +# Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java +Kana (they/them) - IRC: kanakana, Blog: https://kyo.iroiro.party - ActivityPub: @kana@f.iroiro.party - Bluesky: @kana.iroiro.party, <mailto:kana@iroiro.party> + +[[!inline pages="internal(2025/info/juicemacs-before)" raw="yes"]] + +Just-in-time (JIT) compilation helps dynamic languages run fast, and +speculative compilation makes them run faster, as has been showcased +by JVMs, LuaJIT, JavaScript engines, and many more JIT runtimes. +However, Emacs native-compilation, despite its JIT compilation +(`native-comp-jit-compilation`), does not speculate about runtime +execution, making it effectively a JIT-ish AOT (ahead-of-time) +compiler. By introducing a speculative runtime for ELisp, we could +potentially improve ELisp performance even further, with many new +optimization opportunities. + +Juicemacs is my work-in-progress toy project re-implementing Emacs in +Java. At its centre sits an ELisp JIT runtime powered by Graal +Truffle, a JIT interpreter framework based on partial evaluation and +Futamura projections. This talk will cover the following along with +some demonstrations: + +- What is Juicemacs and its ambition? How compatible is it (or does + it plan to be) with GNU Emacs and how feature-complete is it now? + +- What is speculative compilation? How is it useful for an ELisp JIT + runtime? + +- How is the performance of Juicemacs compared to Emacs nativecomp? + How do we interpret the benchmarks? + +- What is Truffle and partial evaluation? What is needed if we are + to implement a speculative runtime in C without Truffle? + +- What JIT techniques and other things does Juicemacs plan to + explore? How to get involved? + +Relevant links: + +- Accompanying blog post (slides + transcript + more discussions): + <https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/> + (scheduled to become available after the talk) + +- Project repository: <https://github.com/gudzpoz/Juicemacs> or + <https://codeberg.org/gudzpoz/Juicemacs> + +- ERT testing results: <https://emacsen.de/dev/tests/> + +- Zulip chat (devlog + discussions): <https://juice.zulipchat.com> + +About the speaker: + +Hello! This is Kana, an Emacs hobbyist and Java lover from China. A +few years ago I discovered the Truffle JIT compilation framework and +have since hoped to implement a JIT runtime myself. Last year I +finally started implementing one for ELisp, called Juicemacs, and +have made some progress. In this talk I will share what I've learned +during the journey, including how three interpreters out of four (or +more?) in Emacs are implemented in Juicemacs and how speculative +compilation can make some optimizations possible. + + +[[!inline pages="internal(2025/info/juicemacs-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/juicemacs-nav)" raw="yes"]] + + |
