Transcript

[[!template text="""Hi, EmacsConf 2025. My name is Ramin Honary,""" start="00:00:01.060" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and I'd like to talk to you today""" start="00:00:05.640" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""about my project called Schemacs""" start="00:00:07.560" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""which I presented last year.""" start="00:00:10.400" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Back then it was called "Gypsum"""" start="00:00:12.080" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and the name has since changed.""" start="00:00:13.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So my name is Ramin Honary.""" start="00:00:18.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'm an Emacs enthusiast, have been since 2017 or so.""" start="00:00:20.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'm a full stack software developer.""" start="00:00:25.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I love Haskell, Scheme,""" start="00:00:27.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""anything functional programming related,""" start="00:00:29.301" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and of course Emacs.""" start="00:00:31.434" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I started learning Scheme about three years ago,""" start="00:00:32.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and this is my third time presenting""" start="00:00:36.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""at EmacsConf.""" start="00:00:38.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So the Schemacs project that I'm talking to,""" start="00:00:40.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'm talking about to you today,""" start="00:00:46.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""was originally called "Gypsum".""" start="00:00:48.160" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The reason I did not call it "Schemacs"""" start="00:00:50.280" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""was that the name "Schemacs" was taken on GitHub.""" start="00:00:53.360" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But in the past year,""" start="00:00:58.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I was able to get the permission""" start="00:00:59.568" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""of the author of GitHub's Schemacs""" start="00:01:02.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""project to name my project the same thing,""" start="00:01:04.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""even though it's a very similar project.""" start="00:01:08.841" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So I changed the name.""" start="00:01:11.321" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Let me see if I can quickly show the screen.""" start="00:01:14.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So yeah, I have archived the old project.""" start="00:01:19.701" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It's still there, but there's an explanation in""" start="00:01:24.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the readme file and a screen grab""" start="00:01:27.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""of the conversation I had""" start="00:01:30.168" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""with the original author of GitHub Schemacs.""" start="00:01:31.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""My Schemacs is not on GitHub at all.""" start="00:01:36.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It's only on Codeberg. So please don't get confused.""" start="00:01:38.680" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But yes, I received permission""" start="00:01:43.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""to change the name and so I did.""" start="00:01:46.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And I would like to give a quick shout-out to""" start="00:01:50.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""user "Tusharhero" for helping me with that.""" start="00:01:52.840" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This person really helped make that name change happen.""" start="00:01:57.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So back to the slides.""" start="00:02:02.640" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""The scope of the project""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""And so now I'd like to clarify the scope of the project.""" start="00:02:07.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I don't think I quite made it clear""" start="00:02:11.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""well enough last year,""" start="00:02:13.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but... Although I'm definitely cloning""" start="00:02:14.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the Emacs Lisp programming language,""" start="00:02:18.401" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the actual scope of the Schemacs project""" start="00:02:20.168" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""is to make an Emacs-like app platform for Scheme.""" start="00:02:25.268" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I don't consider Emacs to be a text editor.""" start="00:02:29.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I consider Emacs to be a Lisp app platform.""" start="00:02:32.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So it's similar to something like the""" start="00:02:38.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""World Wide Web, or Microsoft's .NET app platform, or Java.""" start="00:02:39.840" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""These are all examples of app platforms.""" start="00:02:48.540" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I would like Schemacs to make it easy""" start="00:02:52.560" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""for not only people to use it for""" start="00:02:55.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""things like editing text or, you know, for""" start="00:02:59.400" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""using your computer through a command line""" start="00:03:03.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""or manipulating your Git repository.""" start="00:03:06.440" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'd also like you to be able to create simple""" start="00:03:10.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""GUIs or TUIs using Scheme.""" start="00:03:13.160" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So that's also one of the goals of this project.""" start="00:03:16.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It will of course have an Emacs-like text editor,""" start="00:03:19.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and I will clone Emacs Lisp.""" start="00:03:23.080" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So hopefully GNU Emacs users""" start="00:03:25.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""will feel comfortable moving over to Schemacs""" start="00:03:29.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""because they'll be able to use your init.""" start="00:03:32.780" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You'll be able to use your init.el file.""" start="00:03:35.680" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So configuring and scripting Schemacs""" start="00:03:40.400" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""should be done in Scheme.""" start="00:03:43.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'd like to encourage scripting in Scheme""" start="00:03:44.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and creating new workflows and macros in Scheme.""" start="00:03:47.680" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It will support Emacs Lisp depending on""" start="00:03:51.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""how much of the Emacs Lisp interpreter I can clone.""" start="00:03:54.268" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""That will be supported but not encouraged.""" start="00:03:59.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But you should still be able to run your init.el.""" start="00:04:03.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And I would like it to be good enough,""" start="00:04:06.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""this Emacs Lisp interpreter""" start="00:04:08.840" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""should be good enough to run packages from ELPA.""" start="00:04:10.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Although it will probably be some time""" start="00:04:13.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""before it will be able to run""" start="00:04:15.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""something as large as Org Mode or Magit.""" start="00:04:17.560" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Difference with Robin Templeton's project (Guile-Emacs)""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""It is slightly different from the Guile-Emacs project.""" start="00:04:24.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This is the work of Robin Templeton""" start="00:04:27.440" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""who presented last year.""" start="00:04:30.334" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Guile-Emacs links the Guile runtime""" start="00:04:32.220" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""into the Emacs executable.""" start="00:04:36.034" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It's not a Scheme application. Emacs,""" start="00:04:38.501" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the core of Emacs is written in C.""" start="00:04:41.581" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Guile, the core of Guile is written in C.""" start="00:04:44.201" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""What Robin Templeton has done is, at the C level, linked""" start="00:04:48.121" video="mainVideo-schemacs" id="subtitle"]] [[!template text=""""libguile.so" into Emacs and then provided""" start="00:04:53.701" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""a programming layer where you can""" start="00:04:56.834" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""call the Scheme interpreter from Emacs Lisp""" start="00:04:59.501" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""so that you can run Scheme programs from within Emacs""" start="00:05:04.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""without having to launch a separate process""" start="00:05:11.280" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and communicate over a channel such as a socket.""" start="00:05:13.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You won't need "SLIME" or anything.""" start="00:05:18.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The Guile interpreter is just right there inside of Emacs.""" start="00:05:19.840" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But my project is not like this at all.""" start="00:05:23.420" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Schemacs is written completely from the ground up""" start="00:05:26.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""in R7RS-compliant Scheme. And because it's R7RS-compliant,""" start="00:05:28.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""it's not bound to any one particular Scheme implementation,""" start="00:05:35.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""although Guile is the reference implementation.""" start="00:05:38.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""One goal of this project is to be able to run""" start="00:05:39.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Schemacs on any R7RS-compliant Scheme implementation.""" start="00:05:42.360" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Progress made since last year""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""The work that I've done this past year mostly is internal.""" start="00:05:49.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""There's not much that you can see on the surface.""" start="00:05:56.260" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But the most... One of the most important things that I""" start="00:06:00.940" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""did was I rewrote the parser in R7RS Scheme,""" start="00:06:04.520" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""so it no longer depends on""" start="00:06:06.840" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the Guile regular expressions library.""" start="00:06:07.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The parser now also provides source locations,""" start="00:06:12.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""so if an error occurs in Emacs Lisp,""" start="00:06:14.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""there will be a stack trace""" start="00:06:18.940" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and it will show you where in the source code""" start="00:06:20.568" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the error occured. This was not possible last year.""" start="00:06:23.634" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And because it no longer depends on Guile,""" start="00:06:28.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I can make it work on multiple Scheme implementations.""" start="00:06:30.861" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So far, I've been able to get it to run on""" start="00:06:34.521" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the Chibi Scheme interpreter""" start="00:06:36.821" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and the Gauche Scheme interpreter, as well as""" start="00:06:38.921" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Guile, which is the reference implementation.""" start="00:06:41.281" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""For a short time, it did work also on Chez Scheme,""" start="00:06:44.280" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the Chez Scheme compiler, using Gwen Weinholt's "Akku,"""" start="00:06:48.560" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""which is a program that translates R7RS Scheme to R6RS Scheme.""" start="00:06:53.180" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And with that translation, because Chez Scheme""" start="00:06:59.300" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""is pretty strictly an R6RS compiler,""" start="00:07:04.520" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the translation allows you to run R7RS programs.""" start="00:07:07.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But due to some change, I'm not sure where,""" start="00:07:11.520" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""it may have been changed in the Schemacs source code,""" start="00:07:15.220" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""or it may have been a change to Akku,""" start="00:07:17.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but it no longer builds on Chez.""" start="00:07:19.640" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It did at one point. I'd like to try to fix that.""" start="00:07:21.240" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Portable React-like GUI""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""The second most important thing that I've worked on is a""" start="00:07:28.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""portable React-like GUI. And so React,""" start="00:07:30.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""for anyone who has done web programming,""" start="00:07:36.440" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""is a very popular framework for programming web applications.""" start="00:07:41.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And I've provided something""" start="00:07:46.840" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""very similar to that in Scheme now.""" start="00:07:48.234" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So it works. I have constructed a DOM data structure""" start="00:07:49.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""in Scheme. It's just an ordinary Scheme data structure.""" start="00:07:54.680" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It works like the web's "Document Object Model"""" start="00:07:59.080" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""or the "DOM" data structure.""" start="00:08:01.520" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And then this Scheme DOM data structure can be rendered""" start="00:08:03.961" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""using any GUI framework that is convenient""" start="00:08:10.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""for the Scheme implementation that you're targeting.""" start="00:08:13.060" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And you should be able to implement""" start="00:08:16.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""also rendering to a CLI as well.""" start="00:08:18.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The current reference implementation""" start="00:08:22.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""is using a framework called Guile-GI.""" start="00:08:24.601" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This is the "GObject Introspection" framework.""" start="00:08:27.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It's a very simple""" start="00:08:30.640" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""GObject Introspection framework for Guile,""" start="00:08:31.968" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and it binds to GTK3 on Linux.""" start="00:08:36.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""There's a similar framework called G-Golf""" start="00:08:40.980" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""which I'd like to begin using as well, also for Guile.""" start="00:08:42.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""G-Golf seems to be a bit more well-maintained, a bit...""" start="00:08:48.360" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It has better features. G-Golf may be a""" start="00:08:53.740" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""better rendering backend for the reference""" start="00:08:57.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""implementation, but I would like to provide both.""" start="00:09:00.040" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Demo""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""I will give a demo of this now.""" start="00:09:06.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Unfortunately not a whole lot""" start="00:09:07.934" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""to see compared to last year.""" start="00:09:13.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""First thing I'd like to show is""" start="00:09:18.140" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""that I now have a Makefile. You can look inside""" start="00:09:20.640" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""this Makefile and if you're able to read a Makefile,""" start="00:09:24.280" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""you can see that I have several targets now available.""" start="00:09:28.401" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You can build Schemacs for Guile,""" start="00:09:31.968" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""you can build Schemacs for Gambit,""" start="00:09:35.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""or Stklos, or Chicken, or Chez,""" start="00:09:36.668" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""although none of these (except for Guile)""" start="00:09:40.334" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""currently works. These targets will actually""" start="00:09:42.901" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""build the source code, but then you would have to""" start="00:09:51.168" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""load it into the REPL separately.""" start="00:09:56.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""There are targets for launching""" start="00:09:59.434" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""a Gauche REPL and a Chibi REPL.""" start="00:10:02.468" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You can also run the Emacs Lisp tests""" start="00:10:06.468" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""in Gauche and Chibi.""" start="00:10:10.868" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You can also start a Guile REPL through this Makefile.""" start="00:10:13.068" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So I will do that right now in the shell.""" start="00:10:19.080" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""(...make the text larger...there we go...)""" start="00:10:27.500" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""OK, so we have this directory of the source code.""" start="00:10:31.834" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Let's just begin by running "guile.sh".""" start="00:10:38.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This will launch a REPL and you can load "main-guile".""" start="00:10:44.560" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This will launch the GUI. This is the basic""" start="00:10:52.601" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""proof of concept GUI that uses Guile-GI.""" start="00:10:59.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So it may be hard to see.""" start="00:11:04.801" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I cannot change the size of the text yet.""" start="00:11:10.520" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I've implemented the M-: feature""" start="00:11:14.560" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""where you can eval in a minibuffer some Scheme code.""" start="00:11:17.334" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""(string-append "hello" ...)""" start="00:11:24.068" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It outputs the result in the buffer.""" start="00:11:34.440" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This is basically the "\*Messages\*" buffer.""" start="00:11:38.280" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And that's all the more that I have.""" start="00:11:40.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This is the same state it was in last year.""" start="00:11:42.620" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It hasn't changed a whole lot since back then.""" start="00:11:45.480" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Additional changes""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""But I have made additional changes.""" start="00:11:48.700" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So first of all, you can run""" start="00:11:52.820" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""(let me just go back into the Guile)... you can""" start="00:12:05.380" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""run the Emacs Lisp interpreter tests, so "elisp-tests".""" start="00:12:10.201" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""As you can see, it gives you a stack trace.""" start="00:12:16.620" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So this is an error that I've been able to reproduce.""" start="00:12:18.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I know exactly what the cause of this error is.""" start="00:12:22.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It is not finding a variable""" start="00:12:24.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""because the closure is not correctly""" start="00:12:27.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""capturing its environment. So there should be a variable""" start="00:12:30.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""in the closure, but that variable has not been captured""" start="00:12:35.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and so it is causing an error.""" start="00:12:38.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It is currently loading "byte-run.el".""" start="00:12:43.460" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Let me show you what code that is here.""" start="00:12:48.081" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So I've copied into the source repository""" start="00:12:49.821" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""for Schemacs some of the Elisp code from GNU Emacs.""" start="00:12:53.501" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So I have this "subr.el".""" start="00:12:58.761" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This declares most of the core of Emacs Lisp""" start="00:13:04.421" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""that's not written in C.""" start="00:13:09.861" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""There's also "byte-run.el". Schemacs Emacs Lisp can now""" start="00:13:12.861" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""evaluate this. This is where functions like "defun" are""" start="00:13:19.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""defined, and "defmacro". So as you can see,""" start="00:13:24.380" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""defun itself is a defmacro defined right here.""" start="00:13:28.360" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It's written in Emacs Lisp itself,""" start="00:13:30.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""defined in terms of defalias.""" start="00:13:34.860" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So I can evaluate "byte-run",""" start="00:13:37.720" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I can evaluate "macroexp",""" start="00:13:40.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and the failure occurs somewhere in "subr.el".""" start="00:13:42.740" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Although if you look at the stack trace,""" start="00:13:46.020" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""it doesn't provide all the necessary information.""" start="00:13:48.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So it appears to be happening in byte-run.el.""" start="00:13:51.160" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Really, it's an error that's occurring inside of a macro,""" start="00:13:56.440" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and the macro call site is somewhere in subr.el.""" start="00:14:00.620" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Anyway, take note of this stack trace.""" start="00:14:05.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This was run from within Guile.""" start="00:14:08.640" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Other Scheme implementations""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""Now what I've done this past year""" start="00:14:12.020" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""is make it work on other Scheme implementations.""" start="00:14:14.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Use "make" to launch a Gauche REPL.""" start="00:14:19.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Now I'm inside of Gauche.""" start="00:14:23.834" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This is the command that""" start="00:14:26.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""you would use to launch a Gauche REPL.""" start="00:14:27.234" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And I can load the same program (load "elisp-tests.scm").""" start="00:14:30.080" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You get the exact same result as Guile.""" start="00:14:38.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So we have two different Scheme implementations""" start="00:14:42.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""producing the same result.""" start="00:14:45.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Let's try "make" a Chibi REPL. This is Chibi Scheme.""" start="00:14:46.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And you can (load "elisp-tests.scm").""" start="00:14:53.080" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Chibi is a bit slower, but you get the exact same result.""" start="00:15:00.220" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So we have three different Scheme implementations""" start="00:15:04.081" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""all running Emacs Lisp,""" start="00:15:07.401" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and all producing the same result.""" start="00:15:11.540" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I think that's...""" start="00:15:14.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'm fairly proud of that accomplishment.""" start="00:15:14.768" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I was able to get the code written to the point""" start="00:15:17.100" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""where it actually runs on multiple implementations.""" start="00:15:21.201" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You can also try making it for other Scheme compilers""" start="00:15:24.880" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""like "schemacs-mitscheme" for example,""" start="00:15:30.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but this will fail.""" start="00:15:35.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You can try building it for "schemacs-chez",""" start="00:15:40.020" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Let's try Chez... there we go.""" start="00:15:46.680" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And it will use Akku,""" start="00:15:51.801" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and it will fetch the necessary dependencies.""" start="00:15:54.234" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But it fails, and I haven't been able to""" start="00:15:58.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""debug that quite yet.""" start="00:16:03.434" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Stklos fails for a similar reason.""" start="00:16:05.960" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Gambit... Chicken still doesn't build all the way yet.""" start="00:16:13.140" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The Makefile at least has places for it.""" start="00:16:21.700" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""If anyone can help me out and get Schemacs to compile""" start="00:16:27.121" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""on these other Scheme implementations,""" start="00:16:30.968" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'd appreciate it.""" start="00:16:32.734" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I can probably figure it out myself,""" start="00:16:34.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but that will take more time.""" start="00:16:35.468" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And let me just show you quickly""" start="00:16:37.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the test program.""" start="00:16:40.121" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Basically this is the Emacs Lisp test program""" start="00:16:41.721" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""that I was just running, and it produces an error.""" start="00:16:44.501" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""All it does is it loads these files here in this order,""" start="00:16:48.581" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and it fails right around here.""" start="00:16:53.221" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So it's able to load these two.""" start="00:16:55.181" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And yeah, that's what I've accomplished""" start="00:16:58.320" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""on the Emacs Lisp side of things.""" start="00:17:01.361" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""The next thing I want to show you is the GUI framework""" start="00:17:06.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""that I've written, which I'm fairly proud of so far.""" start="00:17:09.120" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So this is the GUI framework""" start="00:17:13.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""(oops, I better launch it again, OK...)""" start="00:17:15.834" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and let me show you the tests.""" start="00:17:19.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So here in the tests, you can start to see""" start="00:17:22.601" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""some examples of how you use it.""" start="00:17:25.701" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So here is a "counter" test, and this is kind of like""" start="00:17:29.068" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the "hello world" of reactive programming frameworks,""" start="00:17:31.834" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""where you have a state variable,""" start="00:17:35.941" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""sometimes called an "observable."""" start="00:17:38.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'm calling it "number",""" start="00:17:41.660" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and it uses "=" to check if the state has updated.""" start="00:17:43.440" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""If an update occurs and the new value is different""" start="00:17:49.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""from the old value according to the "=" function,""" start="00:17:52.821" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""then trigger a state update in the GUI as well.""" start="00:17:55.033" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Initialize to 0, bound to "number".""" start="00:17:59.233" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I have a "button" function which creates a simple button.""" start="00:18:03.100" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""It takes a label and an action.""" start="00:18:06.133" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Right here you see the "div" command.""" start="00:18:07.833" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This is what creates a "div".""" start="00:18:10.866" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Using the properties, I describe that this div is a""" start="00:18:13.040" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""push-button and the "on-button-push" is an action.""" start="00:18:19.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The action is to update the variable "number"""" start="00:18:22.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""using whatever function or lambda was provided to it.""" start="00:18:25.266" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And then the content that you see on screen,""" start="00:18:30.400" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""that you will see on screen when it runs,""" start="00:18:31.966" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""is here. You create a "div-pack cut-vertical".""" start="00:18:34.034" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""You declare two buttons and then you declare""" start="00:18:38.668" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""this "use-vars" which will take the content""" start="00:18:43.234" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""of this variable here, this observable,""" start="00:18:46.801" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and place it into the GUI next to the buttons here.""" start="00:18:48.834" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So what you will see on screen is""" start="00:18:51.734" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""a "plus" button which increments,""" start="00:18:54.234" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""here is the "increment" function,""" start="00:18:57.068" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""a "minus" button which decrements,""" start="00:18:59.321" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and then the content of the variable that is""" start="00:19:02.780" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""being incremented and decremented.""" start="00:19:05.480" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The advantage of these reactive frameworks is that""" start="00:19:09.700" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""with very few lines of code""" start="00:19:11.866" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""you can create fairly complex interfaces.""" start="00:19:13.066" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The less code you have to write,""" start="00:19:16.033" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the fewer chances you have to make mistakes.""" start="00:19:18.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So let's just run this program.""" start="00:19:21.233" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""This was the "counter-test."""" start="00:19:23.968" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And that is the debug window. Here's the "counter."""" start="00:19:33.293" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'm sorry it's not much larger than this.""" start="00:19:35.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""But here's the "plus" button, the "minus" button,""" start="00:19:38.453" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and here's the "number", 0.""" start="00:19:41.133" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And I can increment or decrement as much as I like.""" start="00:19:43.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So yeah, that's kind of the hello world""" start="00:19:49.793" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""of reactive programming. (I'll reboot the REPL...)""" start="00:19:51.101" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The next thing I want to show you is this layout test.""" start="00:19:55.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And I'll just run the test first.""" start="00:19:58.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So here we have basically""" start="00:20:02.193" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""a tiling window manager kind of thing,""" start="00:20:05.020" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""where you can resize the tiles""" start="00:20:08.540" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and then by clicking on these buttons here,""" start="00:20:11.280" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""you can change the layout.""" start="00:20:12.934" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So you can do two on the right,""" start="00:20:16.940" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""two up above, or three up above. So, yeah.""" start="00:20:20.168" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Those tiling windows, as you can see,""" start="00:20:27.101" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""once I work this branch into the main branch of Schemacs,""" start="00:20:30.268" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I can use that to implement""" start="00:20:33.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the split window functionality for Schemacs,""" start="00:20:35.274" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""the editor. So here's what this split...""" start="00:20:38.266" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Here's the layout test that you just saw.""" start="00:20:42.466" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Let me make it a bit smaller""" start="00:20:44.866" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""so that it all fits on one screen.""" start="00:20:46.733" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So basically we have the "button" command again,""" start="00:20:48.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and then these are the button actions""" start="00:20:51.366" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""which basically just changes the layout,""" start="00:20:54.133" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and then I have the layout. So this layout is a "div."""" start="00:20:57.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The first div just places three buttons in a row.""" start="00:21:01.460" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""The next layout is a div within a div.""" start="00:21:04.920" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So we have one div which places the button""" start="00:21:07.533" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""called "two right" buttons, and the div above it,""" start="00:21:13.000" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""which places the "three in a row" button""" start="00:21:18.633" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""or the "two above" buttons.""" start="00:21:21.493" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""And here's the next... So there's three different""" start="00:21:22.661" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""layouts, and clicking on one of their associated buttons""" start="00:21:26.001" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""will just change the layout.""" start="00:21:30.601" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""As you can see, very little code""" start="00:21:32.101" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""to create a somewhat complex user interface.""" start="00:21:33.434" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""That's the advantage of using reactive or declarative""" start="00:21:38.501" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""UI programming paradigms.""" start="00:21:42.868" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So yeah, this has not been merged into Schemacs""" start="00:21:44.234" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""at the time of this recording,""" start="00:21:47.233" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but will be soon hopefully.""" start="00:21:48.701" video="mainVideo-schemacs" id="subtitle"]]
[[!template new="1" text="""Wrapping up""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]]
[[!template text="""So yeah, I think I've already gone on for 20 minutes.""" start="00:21:51.520" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So I guess I'll just end my presentation here.""" start="00:21:55.166" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I have lots more to talk about.""" start="00:21:59.140" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I guess I will say one last thing before I go:""" start="00:22:00.466" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""that I would very much like for others""" start="00:22:03.980" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""to try and contribute to this project.""" start="00:22:07.066" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I will do my best to try and help teach anybody""" start="00:22:09.200" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""or work with anybody, especially even""" start="00:22:14.233" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""if you don't have much experience with Scheme.""" start="00:22:16.833" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I'd like to help everybody try to contribute.""" start="00:22:18.600" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Basically I want to get this proof of concept working.""" start="00:22:22.760" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""I want to get a stable user interface up and running,""" start="00:22:26.240" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""and then we can start working on""" start="00:22:30.674" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""improving the Emacs Lisp interpreter all together.""" start="00:22:33.066" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""There are close to 1,400 built-in functions""" start="00:22:36.700" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""which need to be implemented.""" start="00:22:41.066" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""We don't need to get all of them""" start="00:22:43.660" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""in order to be able to run probably most of ELPA,""" start="00:22:44.966" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but as much as possible.""" start="00:22:48.466" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""We would like to clone Emacs Lisp and I need help.""" start="00:22:50.866" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""So get a hold of me. My project is on Codeberg.""" start="00:22:54.800" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""Well, (oh, I can't show this here),""" start="00:23:02.580" video="mainVideo-schemacs" id="subtitle"]] [[!template text="""but I will end it there. Thank you for listening.""" start="00:23:06.920" video="mainVideo-schemacs" id="subtitle"]]
Captioner: sachac

Q&A transcript (unedited)

[[!template text="""[oops, forgot to start] object protocol has a scheme implementation.""" start="00:00:00.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""Does this mean schemacs will be""" start="00:00:03.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""meta object changeable in practice?""" start="00:00:07.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""So I don't actually need the meta object protocol so far.""" start="00:00:11.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""In the reference implementation for Guile,""" start="00:00:16.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Guile has its own object-oriented system called Goops.""" start="00:00:19.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm sorry, I'm hearing a delay.""" start="00:00:27.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""Anyway, I'm going to turn off my stream quick. There we go.""" start="00:00:29.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, um. Yes, uh, I, I don't I wasn't aware of the, um.""" start="00:00:32.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""the meta-object protocol that you have mentioned here,""" start="00:00:39.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""but I will look into it.""" start="00:00:43.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""I know that there isn't really a standard""" start="00:00:45.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""meta-object protocol for Scheme.""" start="00:00:48.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""That was an issue for me""" start="00:00:52.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""because I'm trying to make this cross-platform,""" start="00:00:53.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""and so I've done all of my work so far""" start="00:00:56.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""without a meta-object protocol""" start="00:00:59.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""because that's the easiest way to make it work""" start="00:01:00.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""on multiple Scheme implementations.""" start="00:01:02.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""But if there is a nice portable one""" start="00:01:04.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""that works on many implementations, I would use that, yes.""" start="00:01:07.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's just that so far it hasn't been necessary.""" start="00:01:12.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""I've been doing mostly functional reactive programming""" start="00:01:15.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""and React.js-like framework.""" start="00:01:19.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""I've created that for the GUI front end.""" start="00:01:21.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""And that's all the more I've needed so far.""" start="00:01:23.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, yeah. Oh, yeah, please, next question. Sure.""" start="00:01:26.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""So how will the GUI display code be R7RS compliant?""" start="00:01:33.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""As far as I know, there's no DL open in R7RS. That's right.""" start="00:01:39.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, R7RS small is extremely small""" start="00:01:45.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""and does not have any features at all.""" start="00:01:48.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""But it does provide a conv expand macro.""" start="00:01:50.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""And this allows you to load in different code""" start="00:01:54.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""depending on which scheme implementation you're using.""" start="00:01:57.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""So basically, I'll have to write a different back end""" start="00:02:00.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""for each scheme implementation.""" start="00:02:03.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I think that's really""" start="00:02:05.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""the only way is possible at all,""" start="00:02:06.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""because there's no standardization.""" start="00:02:10.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""So essentially, the libraries""" start="00:02:12.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""that I've written for schemacs""" start="00:02:14.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""will become kind of a platform-independent way""" start="00:02:15.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""of writing GUIs for Scheme.""" start="00:02:22.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's just a matter of,""" start="00:02:25.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""will your Scheme implementation""" start="00:02:27.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""support the Schemacs GUI protocol?""" start="00:02:28.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""So I've kind of written my own protocol,""" start="00:02:32.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""and it's entirely R7 RSML compliant.""" start="00:02:34.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's all done with record,""" start="00:02:36.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""what are they called, record types.""" start="00:02:38.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""Do you think some of the Schemacs""" start="00:02:43.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""could be extracted into SFRIs since you've made it portable""" start="00:02:46.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""between scheme implementations?""" start="00:02:50.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yes, I would definitely like to do that.""" start="00:02:52.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""Probably first thing I'll do is start splitting up""" start="00:02:55.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""and publishing independent libraries""" start="00:02:59.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""on the Aku package manager.""" start="00:03:01.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""This is a kind of a package manager ecosystem for Scheme,""" start="00:03:04.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""and in particular R7RS Scheme.""" start="00:03:07.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""And it's also mirrored on the other package manager,""" start="00:03:11.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""Snowfort, just by the way.""" start="00:03:15.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""But yeah, and then I might be also,""" start="00:03:18.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""I've considered creating a SRFI for the lens library,""" start="00:03:21.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""which is based on the Haskell lens library.""" start="00:03:25.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""I don't think that exists yet in Scheme,""" start="00:03:27.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""so I thought that might make a good SRFI.""" start="00:03:29.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Is there a recommended Scheme implementation?""" start="00:03:34.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""Guile is the reference implementation.""" start="00:03:36.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's the only one that works with GUI,""" start="00:03:44.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""but as I demonstrated in my presentation,""" start="00:03:47.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""the Emacs Lisp interpreter""" start="00:03:51.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""works on multiple schemes so far,""" start="00:03:52.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""and I've had trouble with some of the scheme compilers.""" start="00:03:55.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""But yeah, I would recommend Guile.""" start="00:04:00.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""But how would schemacs deal with""" start="00:04:04.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Emacs's re-display architecture""" start="00:04:07.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""will be having its own display architecture?""" start="00:04:10.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""And if so, how will you handle""" start="00:04:13.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""things like overlays and images?""" start="00:04:15.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, definitely. That's to be determined.""" start="00:04:18.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""So basically, the scheme way of doing things""" start="00:04:25.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, I've created this React-like programming framework.""" start="00:04:31.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's like ReactJS or Vue.js.""" start="00:04:36.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""That is just the API of how you write GUI code in Scheme.""" start="00:04:41.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""And each Scheme implementation""" start="00:04:45.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""will have its own GUI backend,""" start="00:04:49.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""which implements that Protocol.""" start="00:04:52.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so when it comes time to link""" start="00:04:55.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""the Emacs Lisp built-in functions""" start="00:04:59.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""that do these things like overlays and so on,""" start="00:05:03.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""we're going to have to come up with some way""" start="00:05:08.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""of modeling that""" start="00:05:11.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""using the scheme framework that I've designed.""" start="00:05:12.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I may have to make alterations""" start="00:05:15.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""specifically to support Emacs Lisp.""" start="00:05:17.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""I don't know yet. I haven't got that far.""" start="00:05:22.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""You were saying that you would like""" start="00:05:28.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""to get the most out of the 1300""" start="00:05:30.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""and something Emacs packages that exist.""" start="00:05:33.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""Are there technical blockers to doing them all""" start="00:05:36.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""or just a problem of getting enough people to jump into it?""" start="00:05:38.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, it's just a matter of implementing enough""" start="00:05:44.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""of the Emacs built-in functions.""" start="00:05:48.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""Right now, there's kind of a big bug.""" start="00:05:50.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""I mentioned this also in the presentation.""" start="00:05:57.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""The stacks trace that you saw during my presentation,""" start="00:05:59.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""that is the biggest bug right now""" start="00:06:02.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""that's preventing me from running most other code.""" start="00:06:05.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I don't think other people""" start="00:06:08.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""will be able to contribute to the code base""" start="00:06:10.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""until I get that bug fixed,""" start="00:06:13.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""because it doesn't capture closures correctly.""" start="00:06:14.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""it doesn't behave like Emacs Lisp does,""" start="00:06:18.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""and that's the big problem.""" start="00:06:22.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""So once I get that worked out,""" start="00:06:26.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""then it's just a matter of implementing enough""" start="00:06:31.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""of the EmacsLisp built-in functions,""" start="00:06:35.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""these are the functions that are mostly implemented in C,""" start="00:06:37.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""implementing those in Scheme.""" start="00:06:40.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""And that, yeah, that's the thing""" start="00:06:42.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""that I'm going to need a lot of help with""" start="00:06:45.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""because there's quite a few of those APIs.""" start="00:06:47.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""But I imagine, I have no idea, no way of knowing,""" start="00:06:49.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""but I imagine we don't need 100% of them""" start="00:06:53.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""in order to run most of Elpa.""" start="00:06:56.460" video="qanda-schemacs" id="subtitle"]] [[!template text="""We probably can get some of the important large Elpa packages""" start="00:06:58.168" video="qanda-schemacs" id="subtitle"]] [[!template text="""like Magit and Org mode with just enough of the Emacs Lisp""" start="00:07:05.085" video="qanda-schemacs" id="subtitle"]] [[!template text="""built-in functions to handle that.""" start="00:07:12.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""But we won't really know until we've tried.""" start="00:07:14.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""So yeah, I'll try to get this bug fixed right away.""" start="00:07:19.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""That way we can all start working on it together, hopefully.""" start="00:07:22.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""Highly relatable answer there.""" start="00:07:24.980" video="qanda-schemacs" id="subtitle"]] [[!template text="""We'll burn that bridge when we're on it or something.""" start="00:07:27.127" video="qanda-schemacs" id="subtitle"]] [[!template text="""What are your thoughts on chicken scheme?""" start="00:07:31.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""Will that be a good fit? Do you think?""" start="00:07:34.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think it will be, um, I, I did show""" start="00:07:37.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""trying to run chicken scheme in my, um, presentation""" start="00:07:41.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""and, uh, I ran up against some kind of issue,""" start="00:07:44.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""which I really don't know how to debug.""" start="00:07:48.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Um, it's probably something to do with the, uh, pattern matcher.""" start="00:07:51.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""Um, I'm using the pattern matcher,""" start="00:07:55.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""uh, written by Alex shin,""" start="00:07:58.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""which seems to be the most portable.""" start="00:08:00.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Pattern matcher, uh, for our seven RS scheme.""" start="00:08:02.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""But not all scheme compilers implement, what is it called?""" start="00:08:05.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""The macro, I can't remember what it's called.""" start="00:08:13.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""There's the macro expansion system for R7 RS small.""" start="00:08:19.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""All of these scheme implementations""" start="00:08:24.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""seem to have a slightly different take on how they work.""" start="00:08:27.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so that macro expander has been, for pattern matching,""" start="00:08:29.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""has been the biggest difficulty""" start="00:08:33.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""in making this code portable.""" start="00:08:35.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so I'm thinking of ways of maybe trying to ditch pattern matching,""" start="00:08:37.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""but that's such a useful feature and it's hard.""" start="00:08:42.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""So I don't know, we'll see if I can,""" start="00:08:45.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""if somebody can help me get it to work on chicken team,""" start="00:08:49.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'd really appreciate it.""" start="00:08:52.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""Can this implementation be used by Guile's Emacs Lisp mode?""" start="00:08:56.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Guile's Emacs list mode. Okay. Yeah, good question.""" start="00:09:01.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""I did mention this last year in my presentation.""" start="00:09:08.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""Emacs list in Guile is totally different""" start="00:09:10.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""from what I've done.""" start="00:09:13.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""That implementation was written about 10 or 15 years ago.""" start="00:09:16.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""I can't remember exactly when. It is quite incomplete.""" start="00:09:21.293" video="qanda-schemacs" id="subtitle"]] [[!template text="""I don't think it even runs most of the macro expanding code.""" start="00:09:26.502" video="qanda-schemacs" id="subtitle"]] [[!template text="""Some of the code that is written""" start="00:09:36.543" video="qanda-schemacs" id="subtitle"]] [[!template text="""for GNU Emacs in Emacs Lisp,""" start="00:09:39.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""where GNU Emacs is initializing itself,""" start="00:09:42.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""it can't even get the first file in that code.""" start="00:09:45.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""It hasn't been touched in 10 or 15 years.""" start="00:09:51.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""Initially, when I first started this project,""" start="00:09:53.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""I was using the parser""" start="00:09:57.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""for Guile's Emacs Lisp implementation,""" start="00:09:59.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""but it didn't give me things like source locations,""" start="00:10:02.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""so I had to rewrite that. And also, it wasn't portable.""" start="00:10:05.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""So yeah, because I want it to be portable,""" start="00:10:10.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""it's necessarily going to be not reliant""" start="00:10:14.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""on anything that's inside of the Guile library,""" start="00:10:16.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""including the Emacs LISP interpreter that's there.""" start="00:10:19.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""Maybe I could replace the Emacs LISP interpreter in Guile""" start="00:10:21.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""if Andy Wingo would be interested. All right.""" start="00:10:24.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I see we've got a few people""" start="00:10:29.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""that did jump into the BBB.""" start="00:10:31.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm just going to quickly, oops.""" start="00:10:34.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""quickly try to make my text a little bigger""" start="00:10:37.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""so I can read a question that came here.""" start="00:10:40.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""I wonder if we can do some sort of pragmatic analysis""" start="00:10:42.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""on popular Emacs packages""" start="00:10:48.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""to see what list of functions they tend to depend on""" start="00:10:49.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""while a function calls down to the lower level.""" start="00:10:52.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, that would be good.""" start="00:10:54.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""Somebody please do that for me. Awesome.""" start="00:10:57.210" video="qanda-schemacs" id="subtitle"]] [[!template text="""Somebody's raising their hand. Divya.""" start="00:11:02.252" video="qanda-schemacs" id="subtitle"]] [[!template text="""Let's see. Yeah, can you hear me?""" start="00:11:05.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yes, I can. Yeah, go ahead. Hello, thank you.""" start="00:11:08.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, this is really awesome.""" start="00:11:12.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""I use Guile, and I love Guile,""" start="00:11:14.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""and I also love functional programming,""" start="00:11:16.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""so this is really nice that you took""" start="00:11:18.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""the declarative approach.""" start="00:11:21.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""One thing that I'm interested in is,""" start="00:11:22.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""are you also considering Racket in the scheme group?""" start="00:11:26.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""Because I know a lot of people do not consider Racket""" start="00:11:29.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""as a sort of scheme thing, because it grew out of it.""" start="00:11:32.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""Do you think you'll take something from Racket?""" start="00:11:36.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""Because I think Racket has""" start="00:11:39.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""a lot of good ideas that can be used.""" start="00:11:42.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, I briefly looked at Racket's GUI library,""" start="00:11:44.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""but it's very, very heavily dependent""" start="00:11:48.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""on Racket's macro expander,""" start="00:11:51.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""which is, well, yeah, the macro expander""" start="00:11:53.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""is extremely complex for Racket,""" start="00:11:57.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""and I don't think it's possible to port it to any other scheme,""" start="00:11:59.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""as far as I know. But Racket is based on SheaScheme.""" start="00:12:02.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I am making an effort to port my code to Shea's scheme.""" start="00:12:07.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""I mentioned this earlier,""" start="00:12:14.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""but there's the Gwen Weinholdt Aku system,""" start="00:12:18.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""which allows you to translate R7RS to R6RS.""" start="00:12:22.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""And since Shea is an R6RS compiler,""" start="00:12:25.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""I did at one point get the Emacs Lisp interpreter""" start="00:12:28.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""to compile for Shea,""" start="00:12:33.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""although I think There's been a change""" start="00:12:34.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""either to Aku or somewhere in my own code base.""" start="00:12:38.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""It doesn't build anymore, and I'm not sure why.""" start="00:12:40.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""But I would also very much like to run this on Che.""" start="00:12:42.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I guess in that sense, we'll be able to work on Racket as well.""" start="00:12:47.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""There's also one other option.""" start="00:12:54.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""Alexis King has written an R7RS language package for Racket.""" start="00:12:56.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""I have not yet tried.""" start="00:13:03.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""running my package on R7RS for Racket.""" start="00:13:05.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""But that would be something interesting.""" start="00:13:08.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yes, I would like to try that.""" start="00:13:11.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, it'll be interesting.""" start="00:13:12.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""I do have some experience with chairs.""" start="00:13:13.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, uh, if I can find some time,""" start="00:13:15.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'll, I'll, I'll certainly like to, I would appreciate.""" start="00:13:17.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yes. Yeah. Go ahead. Yeah.""" start="00:13:21.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""Another question I have is, like,""" start="00:13:24.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""what exactly is sort of, like, the, the approach is that""" start="00:13:26.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""you'll 1st want to do the interpreter""" start="00:13:29.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""and then have enough list functions.""" start="00:13:31.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""Uh, getting the max list functions""" start="00:13:33.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""interpreted or interpretable.""" start="00:13:36.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""And then go for GUI or do you want""" start="00:13:38.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""to sort of like go hand in hand""" start="00:13:41.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""is like we have the interpreter working on""" start="00:13:42.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""and we have also the GUI""" start="00:13:45.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""and we sort of use one for the other.""" start="00:13:46.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, I consider the two tasks to be parallel.""" start="00:13:53.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""So I'm actually doing the GUI separately.""" start="00:13:56.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""The reason why is because the GUI for Schemacs""" start="00:13:59.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""is really just a clone of the look and feel of Emacs.""" start="00:14:05.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's not like an actual clone of the low-level C code""" start="00:14:10.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""that puts everything on screen.""" start="00:14:14.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I'm actually not really that interested""" start="00:14:16.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""in the low-level details""" start="00:14:18.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""of how Emacs draws things on screen either.""" start="00:14:21.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think it has a lot of historical baggage,""" start="00:14:23.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""and I'm actually trying to move away from that.""" start="00:14:26.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""So that was part of the reason why I started""" start="00:14:28.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""with this React.js or Vue.js-like Reactive GUI framework.""" start="00:14:31.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""So that GUI part is completely separate.""" start="00:14:36.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I want to worry about the details""" start="00:14:39.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""of how we make the GUI look and feel""" start="00:14:42.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""similar in Schemacs, similar to GNU Emacs.""" start="00:14:46.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""In Schemacs, using the Emacs programming language,""" start="00:14:50.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think that's something that we should worried about""" start="00:14:54.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""after we have enough of the Emacs list implemented.""" start="00:14:59.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, that makes sense.""" start="00:15:03.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""There are sort of, I'm a bit worried.""" start="00:15:04.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, I don't know if, so one of my presentations""" start="00:15:06.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""is going to be tomorrow.""" start="00:15:10.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm working on something called Emacs Viewer.""" start="00:15:11.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's a document viewer in Emacs.""" start="00:15:13.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""And essentially one of the issues that I'm up against""" start="00:15:15.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""is that Emacs's display system""" start="00:15:17.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""is sort of very let's say, not flexible.""" start="00:15:20.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""When trying to analyze where this inflexibility comes from,""" start="00:15:25.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""I don't think it's just the display architecture.""" start="00:15:31.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think parts of eLISP itself""" start="00:15:35.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""are connected to the display architecture.""" start="00:15:38.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""The notion of a cell in a buffer,""" start="00:15:43.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""itself is connected tightly to""" start="00:15:48.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""how the re-display architecture works.""" start="00:15:52.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""So I think you'll have to sort of figure out""" start="00:15:54.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""what exactly you can salvage from ELISP""" start="00:15:57.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""without taking the display architecture baggage.""" start="00:16:00.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""That's right. I do anticipate""" start="00:16:05.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""that's going to be fairly challenging.""" start="00:16:08.002" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's all Turing-complete,""" start="00:16:09.877" video="qanda-schemacs" id="subtitle"]] [[!template text="""so I imagine we're probably going to end up""" start="00:16:14.585" video="qanda-schemacs" id="subtitle"]] [[!template text="""creating something like an emulator""" start="00:16:17.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""for the Emacs Lisp display architecture in Scheme""" start="00:16:21.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""that will somehow translate down""" start="00:16:24.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""to the React-like protocol that I've written.""" start="00:16:27.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""But yeah, I don't I haven't that's nice.""" start="00:16:30.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""No, this is this is very exciting. Yeah. Oh Yes, it is.""" start="00:16:32.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, I'm glad so like a lot of people have told me""" start="00:16:36.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""that they really Are excited to see this project""" start="00:16:39.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""and this really helps me""" start="00:16:41.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""You know keep focused on this project""" start="00:16:42.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""because a lot of people are very interested.""" start="00:16:46.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""So It's so I'd like to move on""" start="00:16:48.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""to a couple of questions from the past.""" start="00:16:50.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""We're starting to build up a good backlog.""" start="00:16:52.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""Thank you for that. Yeah Next question from the pad I have.""" start="00:16:54.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""Can you tell us more about the show stopping bug?""" start="00:16:59.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""How to squash it? How can people help?""" start="00:17:02.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""OK, well, that one, unfortunately, I think,""" start="00:17:04.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""unless you're really a scheme genius""" start="00:17:08.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""and you can really read my code""" start="00:17:11.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""and immediately understand how it all works,""" start="00:17:13.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""I don't think you'd be able to help.""" start="00:17:15.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""It shouldn't be too difficult for me to fix.""" start="00:17:18.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""So it has to do with how closures work.""" start="00:17:22.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""And a closure is basically an object""" start="00:17:26.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""that can be created with stuff that's on the stack.""" start="00:17:30.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""And this is a feature, I think,""" start="00:17:33.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""that was introduced with Emacs 27.""" start="00:17:37.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""I can't remember exactly,""" start="00:17:39.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""but it's actually a relatively recent feature.""" start="00:17:40.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""It was ever since they introduced""" start="00:17:43.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""lexically scoped variable bindings in Emacs Lisp.""" start="00:17:45.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so yeah, the problem is that""" start="00:17:51.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""when you create like a let structure""" start="00:17:54.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""and you could declare a variable in the let.""" start="00:17:59.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""And then you create inside of that a second let structure,""" start="00:18:01.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""and you have a lambda inside of that.""" start="00:18:05.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""And the lambda references or uses a variable""" start="00:18:07.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""that was declared in the outer let binding.""" start="00:18:11.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""That outer let binding is somewhere on the stack.""" start="00:18:14.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""And the lambda you can actually return it as a value.""" start="00:18:18.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""So when you do return that lambda,""" start="00:18:23.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""it has to have a note somewhere inside""" start="00:18:25.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""that says, by the way, I'm using that variable.""" start="00:18:27.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""So you need to capture it and restore it to the stack""" start="00:18:31.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""whenever this lambda is applied, whenever you execute it.""" start="00:18:34.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""And that is where the error is.""" start="00:18:38.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's not capturing the stack variable properly.""" start="00:18:40.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I think what I'm going to do,""" start="00:18:44.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""I haven't looked into it in detail yet""" start="00:18:46.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""because I've gone back to GUI stuff recently,""" start="00:18:49.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""but what I'm going to do, I think,""" start="00:18:53.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""is just do a static analysis""" start="00:18:55.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""of the code inside of the Lambda""" start="00:18:57.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""and see which symbols are being used,""" start="00:18:59.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""and then just capture all of those""" start="00:19:02.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""and place those into the record type""" start="00:19:05.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""that stores the lambda.""" start="00:19:07.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""That's how I'm going to fix that, I think.""" start="00:19:09.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""I hope anyway that's going to work.""" start="00:19:12.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""You never know with bugs.""" start="00:19:16.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""They're always a little bit tricky. Okay, next question.""" start="00:19:17.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""Are there performance concerns""" start="00:19:21.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""with implementing certain C primitives in PeerScheme?""" start="00:19:23.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""So who is it? The famous computer scientist that said""" start="00:19:28.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""premature optimization is the root of all evil.""" start="00:19:32.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think it was the guy who invented the A star algorithm.""" start="00:19:35.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""His name escapes me at the minute.""" start="00:19:39.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""But yeah, I'm not concerned about performance yet,""" start="00:19:42.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""although most of the scheme compilers that I have seen,""" start="00:19:49.360" video="qanda-schemacs" id="subtitle"]] [[!template text="""especially Shea and Gambit""" start="00:19:52.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""have extremely good performance characteristics.""" start="00:19:57.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so I think there won't be""" start="00:20:02.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""too much difficulty with performance,""" start="00:20:03.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""even implementing some of the C stuff.""" start="00:20:05.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""And besides, a lot of the GUI stuff""" start="00:20:08.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""is already written in C anyway.""" start="00:20:10.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""I mean, it would be cool""" start="00:20:12.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""if we had a scheme GUI library""" start="00:20:14.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""that painted to a canvas,""" start="00:20:16.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""maybe for a Wayland implementation or something.""" start="00:20:18.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""But I don't know. It's not a concern for me, performance.""" start="00:20:21.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""Okay, there are a few more questions. I do want to mention""" start="00:20:29.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""that the stream has cut away at this point,""" start="00:20:32.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""but we're still recording live.""" start="00:20:33.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""All of this will be put up on the website""" start="00:20:36.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""and so on like that.""" start="00:20:38.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, I appreciate all the enthusiastic questions""" start="00:20:40.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""and you're kind of tanking through them all.""" start="00:20:44.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""Me too. I love how many questions I'm getting.""" start="00:20:47.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""This is very encouraging""" start="00:20:52.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""and it really makes me want to keep on working on it.""" start="00:20:54.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""So it's great.""" start="00:20:56.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm so glad to hear that because that's exactly the message""" start="00:20:56.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think you should be receiving.""" start="00:21:00.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""This is a fantastic project. Thank you so much.""" start="00:21:01.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'll just say so myself. If the project is successful,""" start="00:21:04.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""are you worried about a possible split in the community""" start="00:21:08.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""between Schemacs and GNU Emacs?""" start="00:21:11.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""Oh, I have thought about that.""" start="00:21:15.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I really don't know what's going to happen.""" start="00:21:18.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""There seems to be already a huge demand""" start="00:21:24.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""for a scheme-based, a modern scheme-based editor.""" start="00:21:26.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""You know, the Edwin scheme for MIT scheme""" start="00:21:30.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""hasn't been touched since like 1987 or something,""" start="00:21:33.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""maybe 1993 or, but anyway.""" start="00:21:37.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""There seems to be huge demand.""" start="00:21:41.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so I guess a lot of people""" start="00:21:43.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""who are currently using GNU Emacs""" start="00:21:45.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""will probably just switch over""" start="00:21:47.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""because they've been wanting""" start="00:21:49.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""something like this for a very long time.""" start="00:21:50.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""And then, I mean, is that going to cause fragmentation?""" start="00:21:53.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""Is it really a big deal, though?""" start="00:21:56.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""I mean, it's all GPL-licensed code.""" start="00:21:58.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""I mean, I think a rising tide raises all the ships at the same time.""" start="00:22:02.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, yeah, also, the last thing I want to say about that""" start="00:22:08.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""is I would like to contribute some of what I do in Schemacs""" start="00:22:13.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""back into GNU Emacs, if I can. So, for example, I'm going""" start="00:22:19.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""to be working on like a canvas library""" start="00:22:24.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""where you can have interactive canvases""" start="00:22:25.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""and you know you can actually like draw pictures""" start="00:22:27.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""and put things with the mouse and drag things around.""" start="00:22:30.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I was thinking you know""" start="00:22:33.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""if if I can figure out how that works""" start="00:22:36.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""maybe I can write something like that for Emacs""" start="00:22:37.668" video="qanda-schemacs" id="subtitle"]] [[!template text="""or GNU Emacs using the Cairo library, you know,""" start="00:22:41.918" video="qanda-schemacs" id="subtitle"]] [[!template text="""SVG rendering library that they have.""" start="00:22:47.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, you know, if I have time,""" start="00:22:49.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""I would like to continue contributing to GNU Emacs as well.""" start="00:22:51.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm sorry, what was the name of the library you mentioned?""" start="00:22:55.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""Oh, Cairo, like Cairo.""" start="00:22:57.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Oh, Cairo, yeah. Absolutely. I spelled that poorly.""" start="00:23:01.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""The dream of never needing to change to the web browser.""" start="00:23:07.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Would schemacs bring us closer to that? I hope so.""" start="00:23:12.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""That's also a dream of mine.""" start="00:23:18.377" video="qanda-schemacs" id="subtitle"]] [[!template text="""The part of the reason why I wanted to work, you know,""" start="00:23:21.710" video="qanda-schemacs" id="subtitle"]] [[!template text="""make sure I had a really good workable GUI framework""" start="00:23:26.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""is so that I could, you know,""" start="00:23:31.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""we could write apps like, you know,""" start="00:23:32.627" video="qanda-schemacs" id="subtitle"]] [[!template text="""they have a mastodon client written in Emacs Lisp.""" start="00:23:34.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""that would be so nice to have this, you know,""" start="00:23:38.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""a really nice Mastodon client""" start="00:23:42.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""that was right inside of, you know, our scheme environment""" start="00:23:43.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""where we were doing our text editing and other stuff.""" start="00:23:47.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""I've always wanted something like that,""" start="00:23:50.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""or it would be cool to have""" start="00:23:52.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""just a slightly nicer GUI for Magit.""" start="00:23:53.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, yeah, I mean, like, yeah, being able to avoid the web entirely""" start="00:23:56.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""and just be able to like, you know, do social networking""" start="00:24:04.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""and do your GitHub stuff,""" start="00:24:08.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""everything from within Emacs or Schemacs in this case,""" start="00:24:11.440" video="qanda-schemacs" id="subtitle"]] [[!template text="""that's a dream of mine as well.""" start="00:24:14.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""And so I hope that that's where we end up in a couple of years.""" start="00:24:16.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""The sooner the better. Anything, just double checking.""" start="00:24:20.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""Anything specific other than minimalism""" start="00:24:30.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""that made you choose Scheme over Commonwealth?""" start="00:24:33.320" video="qanda-schemacs" id="subtitle"]] [[!template text="""Oh, yeah, it's kind of a philosophical question.""" start="00:24:35.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""So a couple of things. First of all, it was a conversation""" start="00:24:40.200" video="qanda-schemacs" id="subtitle"]] [[!template text="""I had with William Byrd,""" start="00:24:45.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""and he's a guy who makes the Mini Conran framework for Scheme.""" start="00:24:47.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""It was his PhD thesis.""" start="00:24:50.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""He worked with, I'm sorry, I just can't remember his name.""" start="00:24:52.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""He worked at the University of Indiana.""" start="00:24:57.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""Another famous Scheme or Lisp person was there.""" start="00:24:59.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""Friedman, Dan Friedman was his advisor.""" start="00:25:03.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, big name in Lisp.""" start="00:25:06.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""Anyway, so I was talking with William Byrd,""" start="00:25:09.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""and I'm a huge Haskell fan,""" start="00:25:12.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""and he told me why he didn't like Haskell at all,""" start="00:25:14.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""and kind of convinced me to try Scheme out.""" start="00:25:16.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""And what I really like about Scheme is,""" start="00:25:19.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""yeah, like you said, the minimalism,""" start="00:25:22.760" video="qanda-schemacs" id="subtitle"]] [[!template text="""but it's more that it is very close""" start="00:25:25.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""to the mathematical framework of lambda calculus.""" start="00:25:29.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Haskell is probably the most pure""" start="00:25:34.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""lambda calculus that I've ever used,""" start="00:25:38.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""but Scheme is like the simply typed lambda calculus,""" start="00:25:39.920" video="qanda-schemacs" id="subtitle"]] [[!template text="""and That just appeals to me.""" start="00:25:45.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think, you know, if you have this tiny, tiny core language""" start="00:25:47.800" video="qanda-schemacs" id="subtitle"]] [[!template text="""from which all of the computing can be defined,""" start="00:25:50.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think it's kind of a shame""" start="00:25:55.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""that so far we just haven't explored that space yet.""" start="00:25:57.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""I mean, there's compared to JavaScript or Python,""" start="00:26:00.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""there's very little scheme code out there""" start="00:26:03.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""and it could be doing so much. And I would just like to try""" start="00:26:05.880" video="qanda-schemacs" id="subtitle"]] [[!template text="""and expand the scheme ecosystem""" start="00:26:08.240" video="qanda-schemacs" id="subtitle"]] [[!template text="""and see just what this tiny little language can do.""" start="00:26:10.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""And I think we haven't even seen""" start="00:26:13.000" video="qanda-schemacs" id="subtitle"]] [[!template text="""a fraction of what it can do.""" start="00:26:14.480" video="qanda-schemacs" id="subtitle"]] [[!template text="""That's why I've chosen scheme.""" start="00:26:16.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Divya, I see you've got a bunch more comments.""" start="00:26:22.400" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think we're just about close to our time here,""" start="00:26:24.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""but if you wanted to jump back in,""" start="00:26:26.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm sorry, I had to cut you off a little before.""" start="00:26:28.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""No, it's fine. No, it's fine.""" start="00:26:30.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""I think I agree with most of what he said.""" start="00:26:33.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, yeah, thank you so much.""" start="00:26:36.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""Um, closing thoughts, Ramin.""" start="00:26:40.680" video="qanda-schemacs" id="subtitle"]] [[!template text="""Yeah, I guess everybody, please, if you're interested,""" start="00:26:45.160" video="qanda-schemacs" id="subtitle"]] [[!template text="""keep watching my Mastodon and keep watching my Codeberg.""" start="00:26:51.640" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'm going to try and squash this bug as quickly as I can.""" start="00:26:56.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""I hope early next year,""" start="00:27:01.560" video="qanda-schemacs" id="subtitle"]] [[!template text="""hopefully not much later than February,""" start="00:27:03.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""I'll actually be able to start taking in contributions""" start="00:27:07.520" video="qanda-schemacs" id="subtitle"]] [[!template text="""for some of the Emacs Lisp built-ins in the code base.""" start="00:27:12.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""So, please keep watching. The pace of my development""" start="00:27:16.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""has increased pretty rapidly recently,""" start="00:27:21.960" video="qanda-schemacs" id="subtitle"]] [[!template text="""and I think we're pretty close""" start="00:27:24.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""to getting something that we can all use together.""" start="00:27:25.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""Thank you once again for your amazing talk,""" start="00:27:29.120" video="qanda-schemacs" id="subtitle"]] [[!template text="""for your exceptional work,""" start="00:27:31.720" video="qanda-schemacs" id="subtitle"]] [[!template text="""and for jumping in, doing the live Q&A,""" start="00:27:34.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""rolling with us here as we have yet another""" start="00:27:36.600" video="qanda-schemacs" id="subtitle"]] [[!template text="""We'll See How It Goes conference.""" start="00:27:40.040" video="qanda-schemacs" id="subtitle"]] [[!template text="""It's been just amazing so far,""" start="00:27:42.080" video="qanda-schemacs" id="subtitle"]] [[!template text="""and this talk is no small part of that. Thank you.""" start="00:27:44.280" video="qanda-schemacs" id="subtitle"]] [[!template text="""Oh, thank you so much. Yeah. OK, cool.""" start="00:27:46.840" video="qanda-schemacs" id="subtitle"]] [[!template text="""And thanks for all the questions, everyone.""" start="00:27:50.280" video="qanda-schemacs" id="subtitle"]]
Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20schemacs%3A%20One%20year%20progress%20update%20Schemacs%20%28formerly%20Gypsum%29)