Transcript

[[!template text="""Hi, my name is Ramin Honary,""" start="00:00:00.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and I'm here to talk to you today""" start="00:00:02.781" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""about my clone of Emacs and Emacs Lisp that I've written in""" start="00:00:04.481" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Scheme so far.""" start="00:00:08.941" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So I am an Emacs enthusiast since 2017,""" start="00:00:12.981" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""currently employed as a full stack developer,""" start="00:00:19.103" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""mostly working with Python and JavaScript,""" start="00:00:22.665" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""although my true love is functional""" start="00:00:25.226" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""programming, especially Haskell, and Scheme. I started""" start="00:00:27.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""learning Scheme about two years ago. And for the past year,""" start="00:00:30.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I've been working on a project that I'm tentatively calling""" start="00:00:33.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Gypsum. Naming things is hard. It's not a great name.""" start="00:00:36.280" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I'm open to suggestions.""" start="00:00:40.795" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""But yes, this is the project in which""" start="00:00:43.377" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I am trying to write an Emacs Lisp interpreter in Scheme.""" start="00:00:45.898" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""There are many clones already of Emacs. You've probably""" start="00:00:53.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin""" start="00:00:58.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""itself is also written in Scheme--MIT Scheme. These only""" start="00:01:04.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""clone the key bindings of Emacs and not Emacs Lisp itself.""" start="00:01:10.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""The only alternative to GNU Emacs that I'm aware of is""" start="00:01:16.160" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""XEmacs, which is a fork of GNU Emacs.""" start="00:01:21.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Most people don't use Emacs for the key bindings. I mean,""" start="00:01:26.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""this is anecdotally speaking, but the people who I've""" start="00:01:30.360" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""talked to, I would say don't use Emacs for the key bindings.""" start="00:01:34.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""They use it really more because of the power of Emacs Lisp.""" start="00:01:39.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Emacs is as powerful as any system shell, perhaps even more""" start="00:01:42.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""powerful than system shells like Bash.""" start="00:01:48.440" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""The reason why it's so powerful is because""" start="00:01:53.106" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""there's a good programming language""" start="00:01:55.208" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""which you can use to control everything on your system. You""" start="00:01:56.960" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""can control processes. You can load and save files.""" start="00:02:00.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""You can create files. You can configure things.""" start="00:02:01.733" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""You can capture the output of processes in buffers.""" start="00:02:06.417" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""You can filter text through buffers.""" start="00:02:10.220" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And a good programming language is what""" start="00:02:13.422" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""you need in order to do all of this. So one big goal of this""" start="00:02:17.840" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""project is to try to stick as closely as possible to the R7RS""" start="00:02:23.480" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""standard Scheme definition. That is the latest Scheme""" start="00:02:29.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""standard: R7. And this is just because I want my project to""" start="00:02:33.860" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""work on many scheme implementations, not just Guile.""" start="00:02:38.920" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Although Guile certainly is the reference""" start="00:02:43.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""implementation.""" start="00:02:45.500" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So another goal is to be able to run any "init.el".""" start="00:02:50.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So you can take your existing "init.el"""" start="00:02:56.460" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and run it in my program without""" start="00:02:59.741" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""significant changes. That's one of my goals in the end.""" start="00:03:01.721" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I should be able to do that.""" start="00:03:05.341" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""A lot of people invest significant""" start="00:03:07.316" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""time in their configs, and it's kind of disruptive""" start="00:03:09.120" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""if you want to change editors,""" start="00:03:12.718" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""not be able to use your Emacs Lisp""" start="00:03:14.301" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""config. And so I think a useful Emacs clone""" start="00:03:16.501" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""would be able to clone Emacs Lisp well enough""" start="00:03:21.647" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that you can run your "init.el".""" start="00:03:25.128" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And so overall, why am I doing this? It's just because I like""" start="00:03:29.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the Scheme programming language. I love its simplicity and""" start="00:03:33.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""its power. It's an extremely well thought-out language.""" start="00:03:38.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""It's one of those languages where you can understand the""" start="00:03:42.440" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""entire language from top to bottom. You can read the entire""" start="00:03:46.160" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""specification and understand it yourself.""" start="00:03:48.740" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""It's like the computers I grew up with when I was a kid.""" start="00:03:52.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""They were all very simple computers""" start="00:03:57.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""in the late 80s, early 90s. And back then,""" start="00:03:59.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""theoretically, an engineer could understand the entire""" start="00:04:02.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""system at the software level all the way down to the circuit""" start="00:04:05.580" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""level. You can't do that nowadays. And so nowadays, my""" start="00:04:07.960" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""computer is not really a physical computer anymore. It's""" start="00:04:12.160" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the Scheme language standard itself. That is the core of""" start="00:04:16.860" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""computation, of all of computation for me. And I would like""" start="00:04:21.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""to use it as more than just an academic curiosity. It was""" start="00:04:25.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""originally designed for teaching at MIT, but it's found use""" start="00:04:30.580" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""in industry. And the R7RS standard is still""" start="00:04:36.360" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""relatively new. It's over 10 years old at this point,""" start="00:04:41.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""but hasn't, I mean, the""" start="00:04:44.271" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Scheme ecosystem itself is already fairly small.""" start="00:04:48.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""There still, I don't think,""" start="00:04:52.981" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""has been a whole lot of adoption of R7RS""" start="00:04:54.342" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""quite yet. Kind of a shame.""" start="00:04:56.360" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So I'd like a project like this, a""" start="00:04:58.786" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""very large scale, kind of a killer-app-like project""" start="00:05:01.120" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""where you're developing a text editor""" start="00:05:04.010" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and perhaps even an integrated development environment""" start="00:05:05.921" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""in Scheme, I think would be very useful""" start="00:05:09.061" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""just even as a study of, you know, what""" start="00:05:11.921" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""can this language do? And just overall,""" start="00:05:13.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""there seems to be a lot of interest in""" start="00:05:18.462" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Guile-based Emacs and well, maybe a""" start="00:05:21.221" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Scheme-based Emacs, but Guile in particular.""" start="00:05:24.321" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""There has been talk of""" start="00:05:27.164" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""changing Emacs Lisp or the core of the Emacs Lisp over to""" start="00:05:28.221" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Guile for about 30 years or so,""" start="00:05:33.661" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""talks originally in the early""" start="00:05:38.470" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""mid 90s. There were discussions between Richard Stallman,""" start="00:05:41.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Tom Lord, and Aubrey Jaffer. They considered""" start="00:05:44.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""actually replacing Emacs Lisp with Scheme.""" start="00:05:49.920" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""In 1999, and going for about 10 years,""" start="00:05:53.220" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""someone named Ken Raeburn actually started""" start="00:05:56.828" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""a project where he started writing Emacs in Guile.""" start="00:06:01.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""My project is very similar to this.""" start="00:06:07.241" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Here's a quote from his webpage, which is still up, even""" start="00:06:11.860" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""though it hasn't been updated in 15 years.""" start="00:06:15.121" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""This project that I have started""" start="00:06:18.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""is for converting GNU Emacs to Guile""" start="00:06:20.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""as its programming language.""" start="00:06:23.102" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Support for Emacs Lisp will continue to exist,""" start="00:06:24.122" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""of course, but it may be through""" start="00:06:26.083" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""translation and/or interpretation.""" start="00:06:27.761" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""The Lisp engine itself""" start="00:06:29.245" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""may no longer be the core of the program.""" start="00:06:30.340" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And this is my goal as well. In 2010,""" start="00:06:32.907" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Andy Wingo and Ludovic Courtes""" start="00:06:38.539" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""took maintainership of the Guile project.""" start="00:06:41.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""From 2009, so while Andy... 2009""" start="00:06:46.403" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""to 2011, the first Emacs Lisp interpreter was already being""" start="00:06:52.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""implemented in Guile. And even to this day,""" start="00:06:59.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""this Emacs Lisp interpreter ships with Guile.""" start="00:07:02.090" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And so this was happening""" start="00:07:05.652" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""while Andy Wingo took control of the project.""" start="00:07:06.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""In 2011, so shortly after Andy Wingo""" start="00:07:10.113" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""took control of the project,""" start="00:07:13.834" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Guile 2.0 was released. And also in 2011, in the summertime,""" start="00:07:15.120" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""someone named Robin Templeton, I believe it was a Google""" start="00:07:22.280" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Summer of Code project, started actually trying to""" start="00:07:27.280" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""incorporate libguile, that's the guile interpreter, as a""" start="00:07:33.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""linkable or loadable library, linking it to the Emacs""" start="00:07:38.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""executable, and then providing some built-in functions in""" start="00:07:45.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Emacs that allows you to call the scheme""" start="00:07:49.180" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""interpreter, the Guile Scheme interpreter, from Emacs.""" start="00:07:54.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And so it's not like a wrapper around the REPL like Geiser or""" start="00:07:58.740" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""SLIME. It's actually the whole Scheme interpreter loaded""" start="00:08:02.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""into your Emacs process. And that means your Emacs will have""" start="00:08:08.960" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the ability to actually load compiled Scheme programs and""" start="00:08:13.940" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""actually run them and share memory with Emacs Lisp""" start="00:08:20.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""processes. And, well, Robin Templeton will explain all of""" start="00:08:25.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""this. They're presenting today, and I'm very excited to""" start="00:08:29.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""actually see their presentation. They'll explain""" start="00:08:33.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""everything.""" start="00:08:37.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So, let's see. Moving on. 2020, someone named Vasilij""" start="00:08:40.180" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Schneidermann, I'm not sure how you pronounce that, published""" start="00:08:45.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""an overview called The State of Emacs Lisp on Guile. Let's see""" start="00:08:49.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""if I have that here. Yep, it's this page right here. He goes""" start="00:08:53.640" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""into detail about who has done what so far, and what can you do""" start="00:08:58.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""in Guile with Emacs Lisp so far, and so on. Like, what is the""" start="00:09:04.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""state of the project overall?""" start="00:09:09.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And so (speak of the devil)""" start="00:09:12.718" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""(Andy Wingo on social media).""" start="00:09:15.900" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So, 2020 to present. Guile Emacs""" start="00:09:20.961" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""is dead? So there's GCC Emacs now.""" start="00:09:24.340" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Emacs Lisp now has its own JIT compiler.""" start="00:09:32.072" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And it seems like over the past few years,""" start="00:09:35.753" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Emacs Lisp has kind of moved off into the direction of""" start="00:09:39.260" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""becoming its own programming language in its own right,""" start="00:09:44.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and it is decidedly Common Lisp-flavored. It is""" start="00:09:48.440" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""very similar to Common Lisp,""" start="00:09:51.840" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and that seems to be the direction""" start="00:09:54.167" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that it's headed now, and I don't know if there's really any""" start="00:09:56.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""interest anymore amongst the Emacs maintainers of""" start="00:10:00.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""continuing with a Guile-based Emacs.""" start="00:10:05.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""But as far as I know, there's still a lot of interest in the""" start="00:10:09.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""community amongst Scheme and Lisp and Emacs users who are""" start="00:10:13.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""interested in maybe continuing to try to get Guile to become""" start="00:10:19.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the core of Emacs, or if not, you know, what Robin Templeton""" start="00:10:24.780" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""has been doing, at least trying to get Guile a""" start="00:10:28.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""language, a first class supported language in Emacs. So""" start="00:10:31.640" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that's enough talking. Let me just show you what I have so""" start="00:10:37.280" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""far. The GUI is barely working, because I have very little""" start="00:10:40.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""experience with GTK or GObject Introspection. It's very""" start="00:10:45.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""difficult to debug, so it's very slow to develop. Any crash""" start="00:10:50.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""at C level produces no stack traces. So far, most of the""" start="00:10:53.640" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""crashes that I've experienced are due to simple mistakes""" start="00:10:58.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""like passing the wrong data type. So, so far, no, not a whole""" start="00:11:03.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""lot of need for GDB or rebuilding all GTK, glib,""" start="00:11:09.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and so on with the debugging symbols.""" start="00:11:14.175" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""But yes, still development's been""" start="00:11:17.878" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""very slow. I'm learning as I go. I've chosen to use Guile GI as""" start="00:11:19.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the foundation for the GUI. Let me just load it up quick here.""" start="00:11:25.500" video="mainVideo-gypsum" id="subtitle"]] [[!template text=""""load main-guile.scm". And this will launch the GUI. I also""" start="00:11:30.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""happen to have a REPL that runs in a separate thread and""" start="00:11:39.900" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""submits any form that you type to be evaluated inside of the""" start="00:11:44.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""running GUI environment. But you can just type stuff. So""" start="00:11:49.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text=""""hello world." And of course there is...""" start="00:11:57.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""as you can see, it's not quite rendering correctly.""" start="00:12:02.904" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""This "*Messages*" thing here,""" start="00:12:08.060" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that should be over here, obviously. I haven't been able to""" start="00:12:11.091" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""figure out how to get those little details down. But yeah,""" start="00:12:13.761" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""you can do M-:, and you get your eval,""" start="00:12:17.821" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and you can just evaluate, like (what's an emacs,)""" start="00:12:23.216" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""(or what's a Scheme-specific thing?)""" start="00:12:26.638" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Like "(import (srfi 1))", and""" start="00:12:29.281" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""let's see, do "(iota 20)", for example.""" start="00:12:37.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And so that is the procedure""" start="00:12:44.889" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that iterates and produces some 20 elements of a""" start="00:12:46.781" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""list. Or you can do something like, let's see,""" start="00:12:52.901" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""string-append "hello" with space "world".""" start="00:12:58.420" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And you get the result and so on. And,""" start="00:13:08.115" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""you know, scheme allows you to return multiple values. So""" start="00:13:10.260" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""what I have done here is just""" start="00:13:13.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""every value is captured in a list""" start="00:13:14.999" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and it prints all of the return values in the list.""" start="00:13:17.980" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So if a procedure returns no values,""" start="00:13:21.002" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""you get an empty list.""" start="00:13:23.463" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And that's that. It's still quite buggy.""" start="00:13:26.145" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So like, here's a bug""" start="00:13:29.406" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that I can reproduce fairly consistently.""" start="00:13:31.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I can, yeah, if you do...""" start="00:13:37.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""there seems to be a problem with a""" start="00:13:41.408" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""widget being freed too soon, so it will crash. I'm going to""" start="00:13:46.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""try and solve that, hopefully, before this presentation""" start="00:13:49.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""goes live. Let's see here.""" start="00:13:53.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""The Emacs Lisp parser is based on""" start="00:13:57.110" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that""" start="00:13:59.840" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""ships with Guile, that is what I am using. I've actually""" start="00:14:04.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""copied and pasted the source code from the Guile source base""" start="00:14:09.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""into my own project so that I can iterate on it more quickly.""" start="00:14:15.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And I've already had to make some modifications to the""" start="00:14:20.640" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Emacs Lisp interpreter in Guile. So here's the evaluator.""" start="00:14:25.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I've actually already modified the parser and the lexer a""" start="00:14:29.900" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""little bit. And it's at least able to parse""" start="00:14:33.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""all of the "subr.el" program, the Emacs Lisp program.""" start="00:14:37.859" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""It can actually load that, but not""" start="00:14:43.150" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""evaluate it, or parse it, but not evaluate it...""" start="00:14:44.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Read, not eval.""" start="00:14:47.571" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""By the time this goes live, I will have submitted a patch""" start="00:14:51.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""upstream. And that's another goal of this project,""" start="00:14:53.960" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""incidentally, is that anything that we can contribute to""" start="00:14:57.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Guile and any built-in functions that we can implement""" start="00:15:01.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I would like to, for this project, I would like to try and""" start="00:15:08.360" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""contribute upstream to Guile. The Emacs Lisp interpreter""" start="00:15:11.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""is not working well, unfortunately. So this copy, this is""" start="00:15:15.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the copy of the code base (from this commit in particular)""" start="00:15:21.360" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and well, I can't get it working. I can't actually get the""" start="00:15:29.480" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""non-copy, the actual built-in version of""" start="00:15:34.980" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the Emacs Lisp interpreter to work properly quite yet.""" start="00:15:37.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So let me quick go to, (what is this here?)""" start="00:15:41.212" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Guile Elisp. So suppose you have this""" start="00:15:47.034" video="mainVideo-gypsum" id="subtitle"]] [[!template text=""""eval-elisp" procedure here and it takes""" start="00:15:51.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""an Elisp environment and then it evaluates an expression in that""" start="00:15:56.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""environment. And evaluates to a value. So this""" start="00:16:00.640" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""is the standard way of doing it in Guile.""" start="00:16:03.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""If you can see here,""" start="00:16:05.085" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""you've got this expression, "compile" expression.""" start="00:16:06.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""This is like "eval". And so actually trying to load this.""" start="00:16:09.947" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So let's do "load gypsum". (Let's see here. This is, no),""" start="00:16:16.860" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I wanted to "import gypsum backend guile Elisp".""" start="00:16:24.673" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And if I actually want to do this... So elisp eval, first of all,""" start="00:16:35.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""it says it failed because there's an unbound variable""" start="00:16:39.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text=""""elisp-eval". Don't know what it's talking about.""" start="00:16:42.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""There's no such variable in any of my programs.""" start="00:16:45.349" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I have no idea what's going on here.""" start="00:16:48.230" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""You can try to run eval elisp on some simple form like""" start="00:16:51.152" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""(+ 1 2). And it gives you this exception. This works.""" start="00:16:59.280" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""This is the same issue that I have with all of the,""" start="00:17:04.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""every version of the Emacs Lisp Interpreter in Guile.""" start="00:17:09.580" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I can get it to work with this big ",L" mode.""" start="00:17:13.201" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So I can actually do (+ 1 2) here.""" start="00:17:18.752" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I can do "princ" like here.""" start="00:17:21.594" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""That all works fine. It gives me, for some reason,""" start="00:17:26.817" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""a stack trace here.""" start="00:17:30.120" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And yeah, so it's a bit, it's not well-documented.""" start="00:17:34.941" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""The code base is fairly old.""" start="00:17:43.927" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""As I said, it was developed around 2011,""" start="00:17:45.888" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and it's fairly opaque, and I have not been able to figure out""" start="00:17:50.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""how to get Emacs Lisp in Guile working smoothly. So I have""" start="00:17:53.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""started writing my own Emacs Lisp interpreter. And, uh,""" start="00:17:57.960" video="mainVideo-gypsum" id="subtitle"]] [[!template text=""""gypsum/elisp/eval-tests.scm".""" start="00:18:04.540" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""It's, uh, not entirely ready.""" start="00:18:13.400" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I can show you some of the tests at least.""" start="00:18:18.270" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Here is a simple Emacs Lisp program""" start="00:18:21.696" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that you can evaluate.""" start="00:18:25.037" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""You got "progn", "setq" a to 3, "setq" b to 5,""" start="00:18:25.857" video="mainVideo-gypsum" id="subtitle"]] [[!template text=""""setq" c to the sum of a and b, return c.""" start="00:18:31.140" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And this at least works correctly.""" start="00:18:35.840" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""As you can see here, the result is eight. Um, but""" start="00:18:39.060" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the "let*" semantics are not completed yet.""" start="00:18:43.280" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Lots of work left to do there.""" start="00:18:46.521" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So in the time I have left, I guess I can just,""" start="00:18:51.104" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""talk a little bit about what my plans""" start="00:18:54.465" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""are for the future.""" start="00:18:56.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I would like to begin by evaluating or""" start="00:18:59.388" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""actually loading the "subr.el" into my Emacs Lisp""" start="00:19:02.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""interpreter. I actually have tests set up for that as well,""" start="00:19:06.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""so I can actually select any form I want from "subr.el".""" start="00:19:09.640" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I can just run this through my interpreter""" start="00:19:15.910" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and test to see if everything is working""" start="00:19:18.833" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""once I get that far.""" start="00:19:21.594" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And yeah, let me just say that this is my formal appeal to the""" start="00:19:28.780" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""community for help on this project. Emacs Lisp has""" start="00:19:33.240" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""1,393 built-in functions.""" start="00:19:37.800" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I could never implement that many functions on my own, so if""" start="00:19:41.180" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""this project is going to be useful to anybody in any""" start="00:19:45.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""reasonable amount of time, I'm going to need help.""" start="00:19:47.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And I know that there are people out there""" start="00:19:51.115" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""who are very interested in a Guile-based Emacs,""" start="00:19:53.477" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and so if you're watching this,""" start="00:19:56.399" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""please feel free to contact me""" start="00:19:59.000" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""on social media or over e-mail.""" start="00:20:00.522" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""My job, the way I see it, is if there's enough interest,""" start="00:20:05.700" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and I do get a lot of people interested in""" start="00:20:09.648" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""starting to contribute,""" start="00:20:12.065" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""my job will be to document the building and testing process""" start="00:20:13.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and make sure that it is as easy as possible to contribute""" start="00:20:17.920" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""code to this project. I want to document the system""" start="00:20:21.040" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""architecture. I'll write blog posts. I'll do videos on""" start="00:20:24.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""PeerTube explaining how everything works. And I will""" start="00:20:27.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""prioritize which built-in functions""" start="00:20:31.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I think are probably going to be the most necessary,""" start="00:20:34.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""the most essential to get the interpreter running,""" start="00:20:36.463" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and then find low-hanging fruit,""" start="00:20:40.879" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""functions that are easy for people to implement""" start="00:20:42.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""as a good introduction to getting them started""" start="00:20:46.520" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""on contributing to the project.""" start="00:20:50.846" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And then, of course, I will take""" start="00:20:53.948" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""responsibility myself of making sure that we can""" start="00:20:56.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""get the Elisp interpreter to the point""" start="00:21:01.720" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""where it can run the Emacs regression tests.""" start="00:21:03.775" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""These are the test suites that are used""" start="00:21:09.080" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""to test Emacs Lisp itself in the GNU Emacs code base. And so""" start="00:21:13.334" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""ERT is itself written in Emacs Lisp. And so""" start="00:21:20.360" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I think if we implement enough of the built-in functions""" start="00:21:24.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""to be able to run ERT,""" start="00:21:27.034" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""then we can actually start""" start="00:21:29.934" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""using the GNU Emacs regression tests""" start="00:21:31.196" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""to test our own interpreter, our own Emacs clone.""" start="00:21:33.618" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And of course, I'll make sure that there's at least""" start="00:21:39.249" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""one usable GUI. I'm currently working on Guile GI""" start="00:21:41.200" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and GTK. It would be great to have an...""" start="00:21:45.834" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""ANSI terminal based...""" start="00:21:51.397" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""something that works in your terminal emulator.""" start="00:21:53.880" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And yeah, it would be great if someday soon,""" start="00:21:58.220" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""hopefully, we get enough done""" start="00:22:00.284" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that you can actually contribute a patch to this project""" start="00:22:03.160" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""from within the Gypsum editor itself.""" start="00:22:06.095" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I was going to do an overview,""" start="00:22:11.779" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""but that would be for more of an hour-long presentation.""" start="00:22:13.381" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So I'm out of time. I guess the last thing""" start="00:22:19.680" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""I should quickly say is there's no""" start="00:22:22.928" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""meta object protocol in this""" start="00:22:25.450" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""project. I think that's a little bit too difficult""" start="00:22:27.160" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""to port to various scheme implementations.""" start="00:22:29.002" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So I've created a substitute, which I'm""" start="00:22:30.963" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""calling "functional lenses", which is inspired by the""" start="00:22:33.740" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Haskell project of the same name.""" start="00:22:36.960" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Everything in this project is based on functional lenses.""" start="00:22:42.060" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Yeah, also a lot a work went into the keymaps data structure.""" start="00:22:47.512" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""The point being that I think I have""" start="00:22:52.604" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""a pretty good foundation here upon which we can build,""" start="00:22:55.207" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""even though there isn't an actual, there isn't""" start="00:22:58.590" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""a lot done in the actual prototype itself, not yet anyway,""" start="00:23:00.840" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""but I made sure to get the fundamentals down""" start="00:23:04.700" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""from the beginning. And so I think we have something""" start="00:23:08.420" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""like a solid foundation on which to build.""" start="00:23:11.081" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So, I'm going to conclude it there.""" start="00:23:16.309" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""And here's my contact details. Like I said,""" start="00:23:21.231" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""this is a project, I'm appealing to the community of all""" start="00:23:24.600" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""people who are interested in Guile and Emacs to help""" start="00:23:29.320" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""contribute to this project. I see myself as just getting the""" start="00:23:31.900" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""ball rolling. Again, taking-off from the work""" start="00:23:35.840" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""that Ken Raeburn left behind, with my own""" start="00:23:40.601" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""from-the-ground-up implementation. So yeah,""" start="00:23:46.279" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""contact me: e-mail, you can take a look at my blog""" start="00:23:50.638" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""where I talk about what I have done.""" start="00:23:53.859" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""My source code, the code for this project, is up on""" start="00:23:57.420" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""Codeberg... The presentation... this""" start="00:24:00.760" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""presentation, the home page for this presentation, you""" start="00:24:06.140" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""can find more details there. Oh, I'm on""" start="00:24:09.380" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""ActivityPub as well, so my handle is""" start="00:24:15.560" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""@ramin_hal9001@fe.disroot.org, and I'm on everyday.""" start="00:24:19.140" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""So yeah, please feel free to contact me if you're interested,""" start="00:24:27.120" video="mainVideo-gypsum" id="subtitle"]] [[!template text="""and thank you for your attention.""" start="00:24:30.940" video="mainVideo-gypsum" id="subtitle"]]
Captioner: ramin

Q&A transcript (unedited)

[[!template text="""...Troy Hinckley's project that I'm talking about. I was going""" start="00:00:00.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""to mention this in my presentation, but it's possible,""" start="00:00:03.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""theoretically, that Troy Hinckley, his project could be""" start="00:00:08.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""used as a scheme of limitation that actually runs my own""" start="00:00:16.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""version of Emacs. And although, you know, This is""" start="00:00:18.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""completely theoretical, and I don't know how difficult""" start="00:00:23.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""that would be. But if Troy Hinckley implemented enough of""" start="00:00:30.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""the R7-RS standard in Rust, it would theoretically be""" start="00:00:34.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""possible to run the Gypsum editor in Troy Hinckley's own""" start="00:00:39.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""editor. I thought that was kind of interesting, and I""" start="00:00:46.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""thought it was worth mentioning, at least in the questions""" start="00:00:50.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""and answers.""" start="00:00:59.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""I also mentioned this in the presentation. I wanted to see""" start="00:01:12.160" video="qanda-gypsum" id="subtitle"]] [[!template text="""Robin Templeton's project presentation, but""" start="00:01:16.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""unfortunately it's going to be at like four in the morning""" start="00:01:20.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""for me. So I'm going to try and watch that tomorrow, but""" start="00:01:22.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""that's also going to be a very interesting project to keep an""" start="00:01:26.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""eye on if you're interested in Scheme. That's the project""" start="00:01:29.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""where you've got the Guylain interpreter running inside of""" start="00:01:34.040" video="qanda-gypsum" id="subtitle"]] [[!template text="""the Emacs process. It's dynamically linked as a library.""" start="00:01:37.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""I'm ready for questions from anybody. You can ask or you can""" start="00:02:04.680" video="qanda-gypsum" id="subtitle"]] [[!template text="""type. It's up to you.""" start="00:02:08.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""Okay, let me check the etherpad.""" start="00:02:32.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""Let's see here.""" start="00:02:37.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""I'm not sure if I'm doing that right.""" start="00:02:41.160" video="qanda-gypsum" id="subtitle"]] [[!template text="""Let me check one more time. Oh, there it goes.""" start="00:02:42.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""Let's see, so this is...""" start="00:02:54.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""I didn't know about that first bit of history. Oh, I've heard""" start="00:03:00.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""RMS say that Scheme Guile is just a nicer Lisp, but I didn't""" start="00:03:02.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""know there were concrete talks attempts to use Guile for""" start="00:03:06.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs that early. Let's see, that was from janneke.""" start="00:03:09.080" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?""" start="00:03:14.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I'm curious to know how the hell Guile Emacs deals with all the""" start="00:03:14.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""dynamically scoped modules out there. Is there any effort""" start="00:03:17.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""to automatically modularize and name? Let's see.""" start="00:03:21.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""That might be a better question for Robin Templeton. In my""" start="00:03:29.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""own project,""" start="00:03:40.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""there's no module system for Emacs Lisp. There is a module""" start="00:03:44.640" video="qanda-gypsum" id="subtitle"]] [[!template text="""system for Scheme. And the Emacs Lisp interpreter runs in""" start="00:03:49.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""its own environment. the require system or whatever module""" start="00:03:55.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""system that Emacs has, once it's implemented, all of that""" start="00:04:01.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""would just happen inside of the Emacs Lisp environment,""" start="00:04:06.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""which is inside of the Scheme environment. And""" start="00:04:09.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""environments are objects in Scheme.""" start="00:04:12.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""I think a more difficult question is how to handle""" start="00:04:21.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""threading, and Scheme has very good threading built in, in""" start="00:04:26.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""Serphe-18[??].""" start="00:04:33.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""But I don't think it will be easy to write Emacs Lisp form""" start="00:04:34.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""bindings to the Scheme multi-threading implementation.""" start="00:04:43.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs Lisp was just not cut out for that kind of thing. So I""" start="00:04:48.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""think each Emacs Lisp, you could, I suppose, have multiple""" start="00:04:52.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""threads each running their own Emacs Lisp environment.""" start="00:04:56.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""Scheme would make that very simple to do.""" start="00:05:00.040" video="qanda-gypsum" id="subtitle"]] [[!template text="""And then there'd just be a question of how you would get those""" start="00:05:05.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""different interpreters to communicate with each other,""" start="00:05:08.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""perhaps using the same protocol that's used by the Emacs""" start="00:05:11.680" video="qanda-gypsum" id="subtitle"]] [[!template text="""server. But I haven't thought that far ahead yet.""" start="00:05:16.280" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: Would it be possible to support a GUI toolkit other than GTK?""" start="00:05:23.640" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Would it be possible to support a GUI toolkit other than the""" start="00:05:23.640" video="qanda-gypsum" id="subtitle"]] [[!template text="""GTK? Like, how is it still supports Lucid? Yes, this is""" start="00:05:26.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""absolutely a goal of the project. I'm trying to keep the back""" start="00:05:31.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""end separate as possible. The scheme has what you call""" start="00:05:37.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""parameters. And these are like global variables that are""" start="00:05:41.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""still somewhat thread safe. And every call to the GUI goes""" start="00:05:45.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""through a parameter. So the Emacs, the interpreter and the""" start="00:05:50.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""editor logic is all in one module. And then that module calls""" start="00:05:58.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""out into a separate GUI module. And then you can implement""" start="00:06:01.680" video="qanda-gypsum" id="subtitle"]] [[!template text="""different GUI modules. So you could have one for GTK3, one""" start="00:06:06.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""for GTK4, if you want to write the extern C bindings around Qt""" start="00:06:11.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""or full tick, that would certainly be possible as well. It""" start="00:06:16.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""would be nice maybe to have an SDL implementation based""" start="00:06:21.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""maybe on Chikiti or some kind of immediate mode GUI,""" start="00:06:25.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""something like that. But definitely GTK3 through Guile GI""" start="00:06:31.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""is the reference implementation. Things start there. But""" start="00:06:37.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""I'm very interested in supporting other GUIs, yes. Let's""" start="00:06:41.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""see.""" start="00:06:44.000" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?""" start="00:06:46.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Question, do you plan to provide improvements to ELisp""" start="00:06:46.040" video="qanda-gypsum" id="subtitle"]] [[!template text="""as a language or focus on a compatibility layer to""" start="00:06:50.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""facilitate all new extensions in Scheme? Yeah, the second""" start="00:06:54.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""one. I want to move off to Scheme. I would like for this""" start="00:06:58.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""project to try and keep up to date with each new release of""" start="00:07:04.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs and Emacs Lisp. That's a difficult moving target to""" start="00:07:09.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""follow, I realize. But to the greatest extent possible, any""" start="00:07:13.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""new features to Emacs Lisp will be pulled in from GNU Emacs.""" start="00:07:18.640" video="qanda-gypsum" id="subtitle"]] [[!template text="""If we happen to be able to implement something cool in""" start="00:07:25.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""Scheme, and be able to port it over to Emacs Lisp, then sure,""" start="00:07:28.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""it'd be nice to be able to upload or to submit that upstream to""" start="00:07:31.640" video="qanda-gypsum" id="subtitle"]] [[!template text="""the GNU Emacs. But I think I would prefer to have new features""" start="00:07:35.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""written in Scheme. I would like this gypsum to be more of a""" start="00:07:43.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""Scheme app platform that just happens to be able to also run""" start="00:07:47.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs Lisp. That's how I see it. Of course, this will be a""" start="00:07:51.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""community project. I'm open to debate about that if anybody""" start="00:07:56.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""wants to convince me otherwise.""" start="00:08:00.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""Why is being able to interpret all of that EL a useful goal?""" start="00:08:02.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""Sure, there is a lot of code written in Elisp. Can we""" start="00:08:11.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""consider... Oh, it's still being written. Please go ahead""" start="00:08:15.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""and finish writing.""" start="00:08:18.960" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?""" start="00:08:19.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Can we consider a translator like utility to convert eLisp""" start="00:08:19.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""to Scheme once Guile-Emacs has become a reality?""" start="00:08:32.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""Certainly. For the time being, I just wanted to get the""" start="00:08:37.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""interpreter running. So the actual, the Guile-Emacs Lisp,""" start="00:08:42.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""the one that was written in 2011 that I didn't write, that""" start="00:08:47.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""actually does compile to, I think it's the tree""" start="00:08:51.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""intermediate representation It's one of the intermediate""" start="00:08:57.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""languages that Guile uses to compile Guile scheme itself.""" start="00:08:59.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""So the Emacs lisp that was written before actually does""" start="00:09:03.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""that. It actually compiles and makes use of the entire Guile""" start="00:09:09.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""compiler tool chain and actually produces like JIT""" start="00:09:13.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""compilable binaries, which is really cool. Like I said,""" start="00:09:17.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""that's the one that I had trouble getting to work properly.""" start="00:09:21.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""Maybe we can follow that architecture. I'm not sure how to do""" start="00:09:27.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""that, but I would like to be able to do some kind of""" start="00:09:34.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""translating, keeping in mind that we want to have this be""" start="00:09:37.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""portable, do various schemes. And so Guile makes this very""" start="00:09:42.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""easy, but other schemes don't. Gambit might do this pretty""" start="00:09:48.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""well as well. It compiles to C and then compiles C down to a""" start="00:09:52.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""dynamically linkable library. So yeah, I think probably""" start="00:09:57.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""the most portable, I'm just thinking out loud right now,""" start="00:10:06.160" video="qanda-gypsum" id="subtitle"]] [[!template text="""most portable implementation will just be able to""" start="00:10:09.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""translate Emacs Lisp directly to Scheme, which is not what""" start="00:10:13.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""the old Guile Emacs Lisp implementation does. That goes to""" start="00:10:17.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""TreeIL, so it's very, very Guile-specific, can't be""" start="00:10:22.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""ported. But yeah, if we could somehow get Emacs Lisp""" start="00:10:26.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""translated to Scheme and then compiled, say, in Shea Scheme""" start="00:10:30.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""or Gambit or MIT Scheme or one of those other compilers, that""" start="00:10:37.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""would be very cool. And I would absolutely love to do that.""" start="00:10:40.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""And I would very quickly accept any code into the code base""" start="00:10:44.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""that would do that.""" start="00:10:49.280" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: Why is being able to interpret all of \`init.el\` an useful goal?""" start="00:10:50.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Oh, and to answer the question about init.el,""" start="00:10:50.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""It's just because people spend a lot of time on their configs""" start="00:10:59.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""and it would be nice if, you know, you're starting to use this""" start="00:11:02.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""new editor and want it to be similar to Emacs users, just the""" start="00:11:06.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs community in general and people who are familiar with""" start="00:11:14.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""using Emacs. It would be more useful to everybody in the""" start="00:11:16.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs community if this were more compatible with GNU""" start="00:11:20.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs. And so that's why that's, I think that's an important""" start="00:11:25.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""goal.""" start="00:11:36.000" video="qanda-gypsum" id="subtitle"]] [[!template text="""Question is not yet. Great. Oh, here comes another""" start="00:11:38.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""question.""" start="00:12:01.840" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?""" start="00:12:02.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Okay, what is the plan to handle elisp packages that depend""" start="00:12:02.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""on third-party or external libraries like git or magit""" start="00:12:11.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""or ripgrep? So that's going to be tricky. It depends on how""" start="00:12:16.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""these external packages are linked into emacs. If it's""" start="00:12:22.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""going to be a dynamic library like Robin Templeton's""" start="00:12:27.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""project which you load the libgit library into the Emacs""" start="00:12:32.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""process, that is going to be extremely difficult. So if you""" start="00:12:38.040" video="qanda-gypsum" id="subtitle"]] [[!template text="""have an external library like, I don't know, libgit or""" start="00:12:43.160" video="qanda-gypsum" id="subtitle"]] [[!template text="""what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo""" start="00:12:49.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""to do SVG graphics and so on.""" start="00:12:59.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""You can do that very easily with Guile, but then on top of""" start="00:13:01.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""that, implementing Emacs list bindings to it, I mean,""" start="00:13:09.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""you've got two layers there, and that makes things pretty""" start="00:13:14.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""difficult. So it's possible. And to some degree, maybe""" start="00:13:17.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""necessary for example, Cairo, if we want to do SVG graphics""" start="00:13:23.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""the way that Emacs Lisp does, we're going to have to have""" start="00:13:27.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""that. So that would be necessary. We would have to have those""" start="00:13:30.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""two layers. Yes, let's do that. But if it's like for Magit,""" start="00:13:33.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""you can just call out to your git process, and then you're""" start="00:13:39.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""just using the regular process APIs that Emacs Lisp has. And""" start="00:13:45.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""that can be, already we, like Guile has some very good""" start="00:13:50.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""implementations for process management. And so it would""" start="00:13:57.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""just be a matter of wrapping up those in the Emacs lisp form""" start="00:14:08.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""bindings. So yeah, dynamic libraries, I wanna try to avoid.""" start="00:14:12.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""And I would prefer to do things more through, you know,""" start="00:14:24.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""launching a child process in the Emacs process. and then""" start="00:14:32.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""communicating over the standard in, standard out""" start="00:14:40.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""channels.""" start="00:14:47.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""That's the easier way to do things, I think, because then you""" start="00:14:47.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""can just use the process library that Emacs already has, and""" start="00:14:52.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""you can just reuse all of that code.""" start="00:14:58.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""I'm not sure how ripgrep works, unfortunately, but I""" start="00:15:03.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""believe that's also a process, a child process. So, we can""" start="00:15:09.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""just reuse all of the Emacs Lisp code that does that already.""" start="00:15:15.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""We just need to make sure that the process management""" start="00:15:23.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""implementation and scheme is properly bound to Emacs Lisp,""" start="00:15:30.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""and it works the same as GNU Emacs does. Once that's all set,""" start="00:15:35.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""then these porcelains, like around git, should fall into""" start="00:15:43.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""place. without too much difficulty, hopefully.""" start="00:15:48.400" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: Not really a question, but how about Schemacs as a name?""" start="00:15:55.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""How about Schemax as a name? I like the name. I like that name.""" start="00:15:55.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""I haven't really looked into like, is that already used or is""" start="00:15:59.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""that going to be confusing? But certainly something we can""" start="00:16:03.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""discuss.""" start="00:16:09.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""Another thing I should mention,""" start="00:16:10.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""I should probably set up a server or something like Discord""" start="00:16:13.040" video="qanda-gypsum" id="subtitle"]] [[!template text="""or something like that. Discourse, not Discord.""" start="00:16:18.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""Discourse, the open source one, where we could actually""" start="00:16:25.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""chat about this stuff. For the time being, ActivityPub,""" start="00:16:31.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""mostly Mastodon, is how I communicate with people in real""" start="00:16:49.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""time, that or email. So if you want to get a hold of me, check""" start="00:16:52.400" video="qanda-gypsum" id="subtitle"]] [[!template text="""the notes for this presentation and just send me an email.""" start="00:16:57.280" video="qanda-gypsum" id="subtitle"]] [[!template text="""Any question at all is fine. If you want to contribute code,""" start="00:17:02.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""if you want to just learn how to contribute code, send me any""" start="00:17:09.040" video="qanda-gypsum" id="subtitle"]] [[!template text="""questions. It's fine. I'm happy to answer them. And we can""" start="00:17:12.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""talk about the name as well.""" start="00:17:22.200" video="qanda-gypsum" id="subtitle"]]
[[!template new="1" text="""Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?""" start="00:17:25.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Okay, why is it not feasible for the Emacs layer that""" start="00:17:25.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""interprets Emacs Lisp, the core in C, have a Scheme""" start="00:17:30.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""interpreter instead of using Guile? Let's see, I have to,""" start="00:17:34.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""okay. Emacs layer interprets Emacs Lisp, the core in C, have""" start="00:17:39.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""a Scheme interpreter instead of using Guile. Okay, so that,""" start="00:17:48.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""the question xlarsx is asking, xlars, x, So Lars is asking,""" start="00:17:54.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""is it not feasible for there to be an""" start="00:17:59.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs layer that interprets Emacs Lisp have a scheme""" start="00:18:02.320" video="qanda-gypsum" id="subtitle"]] [[!template text="""interpreter? This is Robin Templeton's project. And""" start="00:18:06.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""they're presenting later today. So check the roster and be""" start="00:18:33.080" video="qanda-gypsum" id="subtitle"]] [[!template text="""sure to see that presentation because that's exactly what""" start="00:18:39.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""Robin Templeton is doing. That's not what I'm doing though.""" start="00:18:45.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""I'm trying to create something in Scheme. But yes, there is""" start="00:18:52.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""an attempt to get an Scheme interpreter to run inside of""" start="00:18:57.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""Emacs itself. And it has its own method of binding to Emacs""" start="00:19:02.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""Lisp functions and translating data like Lisp structures""" start="00:19:07.160" video="qanda-gypsum" id="subtitle"]] [[!template text="""between Guile Scheme and Emacs Lisp. Robin will explain all""" start="00:19:11.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""of that in their presentation.""" start="00:19:14.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""OK, I think I've got through all the questions on Etherpad.""" start="00:19:15.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""But I'm going to hang out here for a bit longer. And yeah, feel""" start="00:19:18.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""free to do a video chat with me or send me more questions on""" start="00:19:23.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""Etherpad or here in the big blue button. And so I'm just going""" start="00:19:28.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""to hang out. And thanks for asking all your questions. And""" start="00:19:33.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""yeah, I look forward to working with all of you if you're""" start="00:21:49.120" video="qanda-gypsum" id="subtitle"]] [[!template text="""interested. take it easy. Thanks so much for the talk and""" start="00:21:50.840" video="qanda-gypsum" id="subtitle"]] [[!template text="""looking forward to seeing some of your progress as this""" start="00:21:51.800" video="qanda-gypsum" id="subtitle"]] [[!template text="""moves forward, exciting space. We'll go ahead and leave the""" start="00:21:53.200" video="qanda-gypsum" id="subtitle"]] [[!template text="""room open for you and thanks for offering to hang out and chat""" start="00:21:54.360" video="qanda-gypsum" id="subtitle"]] [[!template text="""with other people that come by. Feel free to throw something""" start="00:21:54.880" video="qanda-gypsum" id="subtitle"]] [[!template text="""in the chat if you want to remind people you're still here.""" start="00:21:55.640" video="qanda-gypsum" id="subtitle"]] [[!template text="""Meanwhile, on the stream, we have moved along to our next""" start="00:21:56.720" video="qanda-gypsum" id="subtitle"]] [[!template text="""talk on Rust, and that is just getting started. But again,""" start="00:21:57.920" video="qanda-gypsum" id="subtitle"]] [[!template text="""we're continuing to record this, and I'll just keep an eye on""" start="00:21:59.600" video="qanda-gypsum" id="subtitle"]] [[!template text="""it to stop the recording. Thank you. Thank you. It was""" start="00:22:00.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""awesome.""" start="00:22:01.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""So it seems like it's slowed down here for the Q&A. I don't see""" start="00:22:01.560" video="qanda-gypsum" id="subtitle"]] [[!template text="""anybody else on BBB, so I'm going to go ahead and stop the""" start="00:22:03.960" video="qanda-gypsum" id="subtitle"]] [[!template text="""recording. We can start it back up. I would say, yes, there's""" start="00:22:05.440" video="qanda-gypsum" id="subtitle"]] [[!template text="""a lot of things you can do with this. You can handle""" start="00:22:08.480" video="qanda-gypsum" id="subtitle"]] [[!template text="""processing. Yeah, I'm going to try and join over the chat for""" start="00:22:09.520" video="qanda-gypsum" id="subtitle"]] [[!template text="""the next talk. I'm not sure if I can do both big blue buttons at""" start="00:22:11.240" video="qanda-gypsum" id="subtitle"]] [[!template text="""the same time. You should be able to just watch your mute""" start="00:22:14.680" video="qanda-gypsum" id="subtitle"]] [[!template text="""settings and mute tab settings and whatever all you have to""" start="00:22:15.760" video="qanda-gypsum" id="subtitle"]] [[!template text="""avoid bleed through. Okay.""" start="00:22:19.160" video="qanda-gypsum" id="subtitle"]]
Questions or comments? Please e-mail [ramin.honary@gmail.com](mailto:ramin.honary@gmail.com?subject=Comment%20for%20EmacsConf%202023%20gypsum%3A%20Gypsum%3A%20my%20clone%20of%20Emacs%20and%20ELisp%20written%20in%20Scheme)