diff options
Diffstat (limited to '2024')
-rw-r--r-- | 2024/info/gypsum-after.md | 3 | ||||
-rw-r--r-- | 2024/info/gypsum-before.md | 1 | ||||
-rw-r--r-- | 2024/info/rust-after.md | 292 | ||||
-rw-r--r-- | 2024/info/rust-before.md | 8 | ||||
-rw-r--r-- | 2024/talks/rust.md | 115 |
5 files changed, 414 insertions, 5 deletions
diff --git a/2024/info/gypsum-after.md b/2024/info/gypsum-after.md index b055a819..68f4baf9 100644 --- a/2024/info/gypsum-after.md +++ b/2024/info/gypsum-after.md @@ -473,8 +473,7 @@ Captioner: ramin [[!template text="""Emacs Lisp. That's how I see it. Of course, this will be a""" start="00:07:43.989" video="qanda-gypsum" id="subtitle"]] [[!template text="""community project. I'm open to debate about that if anybody""" start="00:07:54.577" video="qanda-gypsum" id="subtitle"]] [[!template text="""wants to convince me otherwise.""" start="00:07:58.809" video="qanda-gypsum" id="subtitle"]] - -<div class="transcript-heading">[[!template new="1" text="""Q: Why is being able to interpret all of \`init.el\` an useful goal?""" start="00:08:08.439" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Why is being able to interpret all of that EL a useful goal?""" start="00:08:08.439" video="qanda-gypsum" id="subtitle"]] +[[!template text="""Why is being able to interpret all of that EL a useful goal?""" start="00:08:08.439" video="qanda-gypsum" id="subtitle"]] [[!template text="""Sure, there is a lot of code written in Elisp. Can we""" start="00:08:12.464" video="qanda-gypsum" id="subtitle"]] [[!template text="""consider... Oh, it's still being written. Please go ahead""" start="00:08:15.206" video="qanda-gypsum" id="subtitle"]] [[!template text="""and finish writing.""" start="00:08:18.390" video="qanda-gypsum" id="subtitle"]] diff --git a/2024/info/gypsum-before.md b/2024/info/gypsum-before.md index 466e14cb..384b61f0 100644 --- a/2024/info/gypsum-before.md +++ b/2024/info/gypsum-before.md @@ -18,7 +18,6 @@ Status: TO_CAPTION_QA 03:09.370 Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff? 05:23.646 Q: Would it be possible to support a GUI toolkit other than GTK? 06:45.257 Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme? -08:08.439 Q: Why is being able to interpret all of \`init.el\` an useful goal? 08:29.673 Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality? 10:54.390 Q: Why is being able to interpret all of \`init.el\` an useful goal? 12:08.539 Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)? diff --git a/2024/info/rust-after.md b/2024/info/rust-after.md index 4031d4c4..3fb6e1a1 100644 --- a/2024/info/rust-after.md +++ b/2024/info/rust-after.md @@ -468,7 +468,297 @@ Captioner: sachac -Questions or comments? Please e-mail [troy@troyhinckley.com](mailto:troy@troyhinckley.com?subject=Comment%20for%20EmacsConf%202023%20rust%3A%20An%20experimental%20Emacs%20core%20in%20Rust) +<div class="transcript transcript-qanda"><a name="rust-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1> + +[[!template text="""Okay, so I'm going to look at some of the questions showing up""" start="00:00:00.000" video="qanda-rust" id="subtitle"]] +[[!template text="""in the etherpad we got here. It says, have you considered""" start="00:00:06.520" video="qanda-rust" id="subtitle"]] +[[!template text="""using a CRDT to share buffers between threads and merge any""" start="00:00:09.440" video="qanda-rust" id="subtitle"]] +[[!template text="""concurrent edits automatically? So I have looked at that.""" start="00:00:12.800" video="qanda-rust" id="subtitle"]] +[[!template text="""And the problem with CRDTs is that even though they give you a""" start="00:00:16.040" video="qanda-rust" id="subtitle"]] +[[!template text="""mathematically correct answer when you're trying to merge""" start="00:00:20.560" video="qanda-rust" id="subtitle"]] +[[!template text="""two conflicts, it's not always a useful answer. Like, it's""" start="00:00:22.840" video="qanda-rust" id="subtitle"]] +[[!template text="""not coherent. If you have two things trying to edit the same""" start="00:00:26.480" video="qanda-rust" id="subtitle"]] +[[!template text="""thing, there's no good way to resolve that. And so they""" start="00:00:29.200" video="qanda-rust" id="subtitle"]] +[[!template text="""really work well when you have two people working live, both""" start="00:00:31.360" video="qanda-rust" id="subtitle"]] +[[!template text="""editing the same document, because they can fix any""" start="00:00:33.560" video="qanda-rust" id="subtitle"]] +[[!template text="""particular issues like that, like you would with Google""" start="00:00:35.640" video="qanda-rust" id="subtitle"]] +[[!template text="""Docs. But you have different packages that aren't aware of""" start="00:00:37.200" video="qanda-rust" id="subtitle"]] +[[!template text="""each other, and you're going to run into problems. And so""" start="00:00:39.920" video="qanda-rust" id="subtitle"]] +[[!template text="""this is something, if you read from the Xi editor, which was""" start="00:00:42.160" video="qanda-rust" id="subtitle"]] +[[!template text="""one of the first ones to use CRDTs, in the retrospective, he""" start="00:00:45.000" video="qanda-rust" id="subtitle"]] +[[!template text="""talks about how they had this problem, where the CRDTs They""" start="00:00:48.040" video="qanda-rust" id="subtitle"]] +[[!template text="""give you an answer, but it's not always an answer that's""" start="00:00:52.360" video="qanda-rust" id="subtitle"]] +[[!template text="""useful. And so I feel like locks at least are going to make it.""" start="00:00:54.000" video="qanda-rust" id="subtitle"]] +[[!template text="""It's not going to be as efficient if you have a whole bunch of""" start="00:00:59.080" video="qanda-rust" id="subtitle"]] +[[!template text="""packages, but I don't imagine there's going to be a ton of""" start="00:01:00.440" video="qanda-rust" id="subtitle"]] +[[!template text="""those. It can actually, I think it'll be more useful in""" start="00:01:02.320" video="qanda-rust" id="subtitle"]] +[[!template text="""practice. I might host on GitHub because that's what I know.""" start="00:01:04.800" video="qanda-rust" id="subtitle"]] +[[!template text="""If there's a way to host it on somewhere else, I'd be""" start="00:01:11.240" video="qanda-rust" id="subtitle"]] +[[!template text="""interested in doing that. If you're interested in setting""" start="00:01:13.240" video="qanda-rust" id="subtitle"]] +[[!template text="""patches without using GitHub, you could always send an""" start="00:01:15.440" video="qanda-rust" id="subtitle"]] +[[!template text="""email. I'm more than happy to accept email patches. Um, do""" start="00:01:17.800" video="qanda-rust" id="subtitle"]] +[[!template text="""you think it's possible to achieve with the current Emacs""" start="00:01:22.960" video="qanda-rust" id="subtitle"]] +[[!template text="""code? I do. I think, I think you can do that. Um, like I said,""" start="00:01:24.960" video="qanda-rust" id="subtitle"]] +[[!template text="""there's a couple things inside there that are intentional""" start="00:01:29.720" video="qanda-rust" id="subtitle"]] +[[!template text="""breaks with existing Emacs code. And some of those being""" start="00:01:33.280" video="qanda-rust" id="subtitle"]] +[[!template text="""like functions are immutable. As well as having data shared""" start="00:01:37.920" video="qanda-rust" id="subtitle"]] +[[!template text="""switch between different threads, which means there's""" start="00:01:43.160" video="qanda-rust" id="subtitle"]] +[[!template text="""going to be some copying going on. So there's going to be""" start="00:01:44.760" video="qanda-rust" id="subtitle"]] +[[!template text="""subtle things that are going to be different. And we've""" start="00:01:46.600" video="qanda-rust" id="subtitle"]] +[[!template text="""really got to think about those intentionally, but I'm""" start="00:01:48.400" video="qanda-rust" id="subtitle"]] +[[!template text="""really going for bug compatibility with GNU Emacs so that""" start="00:01:50.360" video="qanda-rust" id="subtitle"]] +[[!template text="""you can take an existing Elisp package and just run it. And it""" start="00:01:54.520" video="qanda-rust" id="subtitle"]] +[[!template text="""just works. Cause I think that's one of the big strengths of""" start="00:01:57.160" video="qanda-rust" id="subtitle"]] +[[!template text="""the Emacs ecosystem is the millions of lines of Elisp that""" start="00:01:59.880" video="qanda-rust" id="subtitle"]] +[[!template text="""people have written.""" start="00:02:03.400" video="qanda-rust" id="subtitle"]] +[[!template text="""Um,""" start="00:02:07.480" video="qanda-rust" id="subtitle"]] +[[!template text="""So I'm not, okay, so since you're re-implementing Elisp and""" start="00:02:10.960" video="qanda-rust" id="subtitle"]] +[[!template text="""Rust, have you considered using more modern Lisp such as""" start="00:02:14.280" video="qanda-rust" id="subtitle"]] +[[!template text="""Scheme? So I'm not re-implementing Elisp and Rust. I'm""" start="00:02:17.040" video="qanda-rust" id="subtitle"]] +[[!template text="""re-implementing the C in Rust. In fact, I would like to make""" start="00:02:20.920" video="qanda-rust" id="subtitle"]] +[[!template text="""more of the core that's written in C in Elisp instead of C or""" start="00:02:25.440" video="qanda-rust" id="subtitle"]] +[[!template text="""Rust, because then it's actually introspectible. There's""" start="00:02:30.480" video="qanda-rust" id="subtitle"]] +[[!template text="""a talk by Tom Tromey that he gave a while ago about Emacs""" start="00:02:33.840" video="qanda-rust" id="subtitle"]] +[[!template text="""should be Emacs Lisp. And I kind of like that philosophy,""" start="00:02:38.720" video="qanda-rust" id="subtitle"]] +[[!template text="""that as much of it as should be Elisp as possible. And we""" start="00:02:42.240" video="qanda-rust" id="subtitle"]] +[[!template text="""should only have C or Rust or some systems level language for""" start="00:02:44.800" video="qanda-rust" id="subtitle"]] +[[!template text="""really low level stuff. Um, using a more modern LISP such as""" start="00:02:48.080" video="qanda-rust" id="subtitle"]] +[[!template text="""Scheme. I know there's, I mean, there's two talks, I think,""" start="00:02:52.320" video="qanda-rust" id="subtitle"]] +[[!template text="""in this conference about using Scheme inside Emacs. And I""" start="00:02:54.840" video="qanda-rust" id="subtitle"]] +[[!template text="""looked at this at one point about what if you wrote it inside""" start="00:02:58.240" video="qanda-rust" id="subtitle"]] +[[!template text="""Common LISP, because that's also has some really low level""" start="00:03:00.720" video="qanda-rust" id="subtitle"]] +[[!template text="""details. And then you could go from E-LISP down to Common""" start="00:03:03.920" video="qanda-rust" id="subtitle"]] +[[!template text="""LISP. But the problem is, is under the hood, you still need a""" start="00:03:05.880" video="qanda-rust" id="subtitle"]] +[[!template text="""systems language. You can't, you still need either C or Rust""" start="00:03:09.200" video="qanda-rust" id="subtitle"]] +[[!template text="""or something underneath the Common LISP. implement the""" start="00:03:12.560" video="qanda-rust" id="subtitle"]] +[[!template text="""primitives. And so it's not going to give you just two""" start="00:03:15.640" video="qanda-rust" id="subtitle"]] +[[!template text="""languages, you know, you'll have three. You'll have the""" start="00:03:17.800" video="qanda-rust" id="subtitle"]] +[[!template text="""elisp, common lisp, and C under the hood. And so in this case""" start="00:03:19.720" video="qanda-rust" id="subtitle"]] +[[!template text="""we just have the two. We have the elisp and the rest.""" start="00:03:24.920" video="qanda-rust" id="subtitle"]] +[[!template text="""All right that's all the questions I see there. Let""" start="00:03:29.560" video="qanda-rust" id="subtitle"]] +[[!template text="""me go look at... Okay,""" start="00:03:43.000" video="qanda-rust" id="subtitle"]] +[[!template text="""so I see into the chat.""" start="00:03:54.080" video="qanda-rust" id="subtitle"]] +[[!template text="""Does it features from the Rust compiler that are missing""" start="00:04:01.400" video="qanda-rust" id="subtitle"]] +[[!template text="""that way you would take advantage of? Oh, that is a great""" start="00:04:03.840" video="qanda-rust" id="subtitle"]] +[[!template text="""question. Um, there's a handful of them. Uh, I should've""" start="00:04:06.240" video="qanda-rust" id="subtitle"]] +[[!template text="""written down a list of these. One of them is Polonius, which""" start="00:04:10.680" video="qanda-rust" id="subtitle"]] +[[!template text="""is the new borrow checker because we're trying to be used""" start="00:04:13.600" video="qanda-rust" id="subtitle"]] +[[!template text="""lifetime to track our objects. We often run into situations""" start="00:04:17.960" video="qanda-rust" id="subtitle"]] +[[!template text="""where we've kind of got a hack around things because the""" start="00:04:21.760" video="qanda-rust" id="subtitle"]] +[[!template text="""limitations with the borrow checker. And so I have a whole""" start="00:04:24.240" video="qanda-rust" id="subtitle"]] +[[!template text="""bunch of like notes inside there about where. a better""" start="00:04:26.200" video="qanda-rust" id="subtitle"]] +[[!template text="""Polonius would help inside there and help ease some of the""" start="00:04:29.560" video="qanda-rust" id="subtitle"]] +[[!template text="""issues. Another thing is enum variances types, because""" start="00:04:34.960" video="qanda-rust" id="subtitle"]] +[[!template text="""right now we have an object which is defined as a big enum that""" start="00:04:40.600" video="qanda-rust" id="subtitle"]] +[[!template text="""had all the possible objects, but if we want to have a subset""" start="00:04:43.000" video="qanda-rust" id="subtitle"]] +[[!template text="""of those objects or just pass in one of those objects, we've""" start="00:04:46.080" video="qanda-rust" id="subtitle"]] +[[!template text="""got to define a new struct. And so we have a whole bunch of""" start="00:04:47.480" video="qanda-rust" id="subtitle"]] +[[!template text="""boilerplate code to define that all out. And if we had""" start="00:04:50.080" video="qanda-rust" id="subtitle"]] +[[!template text="""variances types, that would make the code a lot easier.""" start="00:04:52.840" video="qanda-rust" id="subtitle"]] +[[!template text="""Another one is the allocator API. Right now we're kind of""" start="00:04:56.720" video="qanda-rust" id="subtitle"]] +[[!template text="""working around it, but ultimately we're going to need our""" start="00:05:00.080" video="qanda-rust" id="subtitle"]] +[[!template text="""own allocator. And the allocator API is still nightly only.""" start="00:05:02.480" video="qanda-rust" id="subtitle"]] +[[!template text="""So there's a couple more. I'll look at that more, but that's a""" start="00:05:07.720" video="qanda-rust" id="subtitle"]] +[[!template text="""great question.""" start="00:05:10.920" video="qanda-rust" id="subtitle"]] +[[!template text="""Let's see.""" start="00:05:24.280" video="qanda-rust" id="subtitle"]] +[[!template text="""Okay. I see a question you might not have noticed just asking""" start="00:05:26.880" video="qanda-rust" id="subtitle"]] +[[!template text="""about reuse of Remax. Oh, yes, so I have reused some of Remax""" start="00:05:30.800" video="qanda-rust" id="subtitle"]] +[[!template text="""code. And some taken, like I mentioned, taken some of their""" start="00:05:37.160" video="qanda-rust" id="subtitle"]] +[[!template text="""ideas, but. ultimately we're using a different model""" start="00:05:40.160" video="qanda-rust" id="subtitle"]] +[[!template text="""because under the hood in Remax everything is just defined""" start="00:05:45.320" video="qanda-rust" id="subtitle"]] +[[!template text="""as an opaque external type that's defined inside Emacs and""" start="00:05:49.440" video="qanda-rust" id="subtitle"]] +[[!template text="""so it just pulls those in interacts with those and passes""" start="00:05:53.800" video="qanda-rust" id="subtitle"]] +[[!template text="""them back into C and so we're trying to see what we can do if we""" start="00:05:56.160" video="qanda-rust" id="subtitle"]] +[[!template text="""say okay we're not going to take the same So they're bound to""" start="00:05:58.880" video="qanda-rust" id="subtitle"]] +[[!template text="""the implementation details of Emacs. And we don't want to do""" start="00:06:02.280" video="qanda-rust" id="subtitle"]] +[[!template text="""that. And so we've re-implemented all the core types""" start="00:06:06.840" video="qanda-rust" id="subtitle"]] +[[!template text="""ourselves. And so that means that we can't just take the""" start="00:06:09.560" video="qanda-rust" id="subtitle"]] +[[!template text="""Remax code one for one and use it in our project, but we can""" start="00:06:12.560" video="qanda-rust" id="subtitle"]] +[[!template text="""take a lot of their ideas. And I've spent some time reading""" start="00:06:16.560" video="qanda-rust" id="subtitle"]] +[[!template text="""through their documentation, different things about how""" start="00:06:18.800" video="qanda-rust" id="subtitle"]] +[[!template text="""they approached strings and GC and different stuff like""" start="00:06:20.440" video="qanda-rust" id="subtitle"]] +[[!template text="""that.""" start="00:06:24.400" video="qanda-rust" id="subtitle"]] +[[!template text="""Looks like all the questions.""" start="00:06:24.760" video="qanda-rust" id="subtitle"]] +[[!template text="""Okay, so another question. What are your thoughts on the GUI""" start="00:07:23.600" video="qanda-rust" id="subtitle"]] +[[!template text="""layer? Any plans on how to reimplement it? This is something""" start="00:07:26.200" video="qanda-rust" id="subtitle"]] +[[!template text="""I've thought a lot about, but I still don't have a solid plan""" start="00:07:30.960" video="qanda-rust" id="subtitle"]] +[[!template text="""for. I'm not really a GUI person. I mostly work with low""" start="00:07:34.080" video="qanda-rust" id="subtitle"]] +[[!template text="""level. And so my two thoughts is you can go the GTK route.""" start="00:07:37.520" video="qanda-rust" id="subtitle"]] +[[!template text="""There's Rust bindings for that. That's well understood.""" start="00:07:42.720" video="qanda-rust" id="subtitle"]] +[[!template text="""It's got a good support. But there's also some interesting""" start="00:07:45.520" video="qanda-rust" id="subtitle"]] +[[!template text="""projects to try and do GUI in Rust, native Rust, and have it""" start="00:07:48.320" video="qanda-rust" id="subtitle"]] +[[!template text="""use Rust idioms and stuff like that. And so those are things""" start="00:07:53.920" video="qanda-rust" id="subtitle"]] +[[!template text="""like Druid and there's eGUI and a bunch of those that are that""" start="00:07:57.400" video="qanda-rust" id="subtitle"]] +[[!template text="""way. And I've never used one of them, but I'd be interested to""" start="00:08:01.440" video="qanda-rust" id="subtitle"]] +[[!template text="""try that out first and see how well does this work and how well""" start="00:08:05.360" video="qanda-rust" id="subtitle"]] +[[!template text="""supported is this doing a Rust-first GUI.""" start="00:08:08.880" video="qanda-rust" id="subtitle"]] +[[!template text="""If money could fix the problem, how much would it cost to ship""" start="00:08:21.240" video="qanda-rust" id="subtitle"]] +[[!template text="""this with feature parody before 2026? Ooh, in a year. Uh,""" start="00:08:23.640" video="qanda-rust" id="subtitle"]] +[[!template text="""that's a good question. I, even if we had the money, it would""" start="00:08:28.400" video="qanda-rust" id="subtitle"]] +[[!template text="""take more than just me, even if I was working on it full time.""" start="00:08:32.080" video="qanda-rust" id="subtitle"]] +[[!template text="""Um, I don't know. That's a good question. I would think it""" start="00:08:36.640" video="qanda-rust" id="subtitle"]] +[[!template text="""would take a team of at least a handful of people to get this""" start="00:08:41.640" video="qanda-rust" id="subtitle"]] +[[!template text="""shipping within one year. Because there's still a lot of""" start="00:08:45.240" video="qanda-rust" id="subtitle"]] +[[!template text="""work to do. And even once you have everything implemented,""" start="00:08:48.560" video="qanda-rust" id="subtitle"]] +[[!template text="""there's a lot of bug finding and smoothing it out so that it""" start="00:08:50.760" video="qanda-rust" id="subtitle"]] +[[!template text="""runs as well as Emacs, which has been, you know, battle""" start="00:08:55.120" video="qanda-rust" id="subtitle"]] +[[!template text="""tested for a long time.""" start="00:08:57.520" video="qanda-rust" id="subtitle"]] +[[!template text="""Um, okay, so this might be a good moment for me to break in and""" start="00:08:58.360" video="qanda-rust" id="subtitle"]] +[[!template text="""just say that we've got about 10 minutes left before we""" start="00:09:06.600" video="qanda-rust" id="subtitle"]] +[[!template text="""resume new talks on on both tracks. Of course, we're happy to""" start="00:09:09.040" video="qanda-rust" id="subtitle"]] +[[!template text="""keep this. This chat open and keep the recording going here,""" start="00:09:12.520" video="qanda-rust" id="subtitle"]] +[[!template text="""which will share after the conference as long as as long as""" start="00:09:18.120" video="qanda-rust" id="subtitle"]] +[[!template text="""there's discussion here. Thank you. Um, GTK project has""" start="00:09:21.600" video="qanda-rust" id="subtitle"]] +[[!template text="""automatic binding with a framework called G object""" start="00:09:29.120" video="qanda-rust" id="subtitle"]] +[[!template text="""introspection, which is what I'm using for gypsum project.""" start="00:09:31.080" video="qanda-rust" id="subtitle"]] +[[!template text="""Probably Rust has a G object implementation, which you can""" start="00:09:33.600" video="qanda-rust" id="subtitle"]] +[[!template text="""use. Yeah, I know it has some GTK bindings. Um, I'm not sure if""" start="00:09:35.960" video="qanda-rust" id="subtitle"]] +[[!template text="""it's specifically G object, but that's a good path because I""" start="00:09:39.120" video="qanda-rust" id="subtitle"]] +[[!template text="""feel like the problem with the Rust GUIs is that they're all""" start="00:09:43.760" video="qanda-rust" id="subtitle"]] +[[!template text="""very new. And so, you know, everything works in a demo, but""" start="00:09:46.760" video="qanda-rust" id="subtitle"]] +[[!template text="""you need something that can work across all different""" start="00:09:50.360" video="qanda-rust" id="subtitle"]] +[[!template text="""devices and all different platforms and have really good""" start="00:09:52.320" video="qanda-rust" id="subtitle"]] +[[!template text="""support and good accessibility and stuff like that.""" start="00:09:54.320" video="qanda-rust" id="subtitle"]] +[[!template text="""All right, Elisp is implemented in C. So if you're not""" start="00:09:56.600" video="qanda-rust" id="subtitle"]] +[[!template text="""implementing Elisp in Rust, we're keeping the C""" start="00:10:03.400" video="qanda-rust" id="subtitle"]] +[[!template text="""implementation of Elisp. So let me see if I can do a better job""" start="00:10:07.360" video="qanda-rust" id="subtitle"]] +[[!template text="""of explaining this. So inside Emacs, you have about a""" start="00:10:13.640" video="qanda-rust" id="subtitle"]] +[[!template text="""million lines of Elisp. And underneath that, you have the C,""" start="00:10:18.440" video="qanda-rust" id="subtitle"]] +[[!template text="""which is the primitives everything's implemented yet. And""" start="00:10:21.520" video="qanda-rust" id="subtitle"]] +[[!template text="""so we're keeping all of the Elisp, and we're just taking that""" start="00:10:24.080" video="qanda-rust" id="subtitle"]] +[[!template text="""C layer and replacing it with Rust. And so when you call a""" start="00:10:27.080" video="qanda-rust" id="subtitle"]] +[[!template text="""built-in function, it's calling into a Rust function""" start="00:10:30.560" video="qanda-rust" id="subtitle"]] +[[!template text="""instead of a C function under the hood. So all the Elisp stays""" start="00:10:33.080" video="qanda-rust" id="subtitle"]] +[[!template text="""Elisp, but the C becomes Rust.""" start="00:10:40.080" video="qanda-rust" id="subtitle"]] +[[!template text="""So looking at the IRC chat, it feels to me like maybe there's a""" start="00:10:42.680" video="qanda-rust" id="subtitle"]] +[[!template text="""little bit of confusion around what do we mean when we say""" start="00:10:54.600" video="qanda-rust" id="subtitle"]] +[[!template text="""rewriting ELISP in Rust, right? I think there are some""" start="00:10:59.160" video="qanda-rust" id="subtitle"]] +[[!template text="""people that are like, A, we're reinventing ELISP, and""" start="00:11:04.840" video="qanda-rust" id="subtitle"]] +[[!template text="""there's other people that are like, no, we're trying to be""" start="00:11:07.400" video="qanda-rust" id="subtitle"]] +[[!template text="""byte-for-byte compatible with Rust. So some people are""" start="00:11:09.680" video="qanda-rust" id="subtitle"]] +[[!template text="""questioning your no answer on that. Aren't you really,""" start="00:11:12.880" video="qanda-rust" id="subtitle"]] +[[!template text="""maybe, is what I'm reading in there. Do you want to respond to""" start="00:11:15.880" video="qanda-rust" id="subtitle"]] +[[!template text="""that? Yeah, I'm trying to think about how I can make this""" start="00:11:19.360" video="qanda-rust" id="subtitle"]] +[[!template text="""clearer. So the ELISP stays ELISP. We're not changing the""" start="00:11:26.120" video="qanda-rust" id="subtitle"]] +[[!template text="""ELISP at all. or at least very minimally. We want to be able to""" start="00:11:29.560" video="qanda-rust" id="subtitle"]] +[[!template text="""take, like I said, bug compatible. So whatever works inside""" start="00:11:33.240" video="qanda-rust" id="subtitle"]] +[[!template text="""existing Emacs, you can take all the Lisp and you can run it in""" start="00:11:36.520" video="qanda-rust" id="subtitle"]] +[[!template text="""Rune and it works the same. So the Elisp stays the same. It's""" start="00:11:40.000" video="qanda-rust" id="subtitle"]] +[[!template text="""just the under the hood core that is getting replaced. And""" start="00:11:43.600" video="qanda-rust" id="subtitle"]] +[[!template text="""this in turn adds some new features such as""" start="00:11:47.120" video="qanda-rust" id="subtitle"]] +[[!template text="""multi-threading. So it's not exactly compatible, but you""" start="00:11:49.200" video="qanda-rust" id="subtitle"]] +[[!template text="""should be able to use your existing code and the Elisp will""" start="00:11:52.800" video="qanda-rust" id="subtitle"]] +[[!template text="""stay Elisp. So the idea is that anything that I've written as""" start="00:11:55.560" video="qanda-rust" id="subtitle"]] +[[!template text="""an Emacs user, my config, my custom packages, whatever it""" start="00:12:00.640" video="qanda-rust" id="subtitle"]] +[[!template text="""may be, that's all going to be valid code. If you take, you""" start="00:12:04.560" video="qanda-rust" id="subtitle"]] +[[!template text="""know, the Elisp implementation as being the C code and the""" start="00:12:09.000" video="qanda-rust" id="subtitle"]] +[[!template text="""parts of Elisp written in Elisp that represent opportunity""" start="00:12:13.960" video="qanda-rust" id="subtitle"]] +[[!template text="""space thinking about Rust as an implementation language""" start="00:12:17.880" video="qanda-rust" id="subtitle"]] +[[!template text="""okay fine you know you can make a semantic argument okay""" start="00:12:20.800" video="qanda-rust" id="subtitle"]] +[[!template text="""we're re-implementing we're creating an alternate""" start="00:12:24.480" video="qanda-rust" id="subtitle"]] +[[!template text="""implementation of Elisp but what Elisp is isn't the problem""" start="00:12:28.560" video="qanda-rust" id="subtitle"]] +[[!template text="""space here that's a fixed a given if you will. Is that all""" start="00:12:31.640" video="qanda-rust" id="subtitle"]] +[[!template text="""right? That's a good way of saying it. Okay Yeah, what you""" start="00:12:35.040" video="qanda-rust" id="subtitle"]] +[[!template text="""said makes sense. I was kind of responding to some comments,""" start="00:12:39.200" video="qanda-rust" id="subtitle"]] +[[!template text="""like I'm not sure it connected for everybody. Makes a lot of""" start="00:12:42.560" video="qanda-rust" id="subtitle"]] +[[!template text="""sense. Yeah, I wasn't sure how much I needed to expand on that""" start="00:12:44.960" video="qanda-rust" id="subtitle"]] +[[!template text="""and explain that, but I appreciate you jumping in.""" start="00:12:47.400" video="qanda-rust" id="subtitle"]] +[[!template text="""Um, okay. So if I were just going to, but what will your Rust""" start="00:12:51.120" video="qanda-rust" id="subtitle"]] +[[!template text="""implementation also be able to run Emacs bytecode or the""" start="00:12:59.160" video="qanda-rust" id="subtitle"]] +[[!template text="""implemented the list level? So I already have a bytecode""" start="00:13:02.240" video="qanda-rust" id="subtitle"]] +[[!template text="""interpreter inside there that runs the existing Elisp""" start="00:13:04.360" video="qanda-rust" id="subtitle"]] +[[!template text="""bytecode. And so that was one of the first things I did was""" start="00:13:06.760" video="qanda-rust" id="subtitle"]] +[[!template text="""bootstrap the interpreter and then bootstrap the bytecode""" start="00:13:09.520" video="qanda-rust" id="subtitle"]] +[[!template text="""engine. And so we compile, we use the, because the bytecode""" start="00:13:11.680" video="qanda-rust" id="subtitle"]] +[[!template text="""compiler is written in Emacs list. And so you bootstrap that""" start="00:13:15.000" video="qanda-rust" id="subtitle"]] +[[!template text="""and it gives you the Emacs bytecode. And so I have a bytecode""" start="00:13:19.080" video="qanda-rust" id="subtitle"]] +[[!template text="""engine that runs the bytecode. So that's already done. And""" start="00:13:22.920" video="qanda-rust" id="subtitle"]] +[[!template text="""you can potentially, on top of that, do something like the""" start="00:13:26.040" video="qanda-rust" id="subtitle"]] +[[!template text="""data compilation or a JIT. But we have both an interpreter""" start="00:13:28.240" video="qanda-rust" id="subtitle"]] +[[!template text="""and a bytecode compiler.""" start="00:13:32.000" video="qanda-rust" id="subtitle"]] +[[!template text="""And I'll just break in one more time to say with about five""" start="00:13:33.120" video="qanda-rust" id="subtitle"]] +[[!template text="""minutes left in our live time with this Q&A session, which""" start="00:13:50.800" video="qanda-rust" id="subtitle"]] +[[!template text="""we're happy to keep going as long as there are questions.""" start="00:13:56.320" video="qanda-rust" id="subtitle"]] +[[!template text="""Coming up in five minutes, we'll have a talk on color on the""" start="00:13:58.440" video="qanda-rust" id="subtitle"]] +[[!template text="""GenTAC track. And then right here, we'll have the P-Search""" start="00:14:03.960" video="qanda-rust" id="subtitle"]] +[[!template text="""talk.""" start="00:14:09.640" video="qanda-rust" id="subtitle"]] +[[!template text="""Thank you.""" start="00:14:09.960" video="qanda-rust" id="subtitle"]] +[[!template text="""Is it possible to bootstrap with just the bytecode""" start="00:14:10.120" video="qanda-rust" id="subtitle"]] +[[!template text="""interpreter? So I'll have to put in a link to one of my blog""" start="00:14:22.560" video="qanda-rust" id="subtitle"]] +[[!template text="""posts. So that was my original idea was to say, I don't want to""" start="00:14:25.760" video="qanda-rust" id="subtitle"]] +[[!template text="""have an interpreter, a bytecode interpreter and a native""" start="00:14:28.520" video="qanda-rust" id="subtitle"]] +[[!template text="""compiler. I want to just have just one. So I'm only going to""" start="00:14:31.560" video="qanda-rust" id="subtitle"]] +[[!template text="""have the bytecode. And so that's what I did initially. The""" start="00:14:34.680" video="qanda-rust" id="subtitle"]] +[[!template text="""problem with that is, is that a bunch of the early bootstrap""" start="00:14:38.160" video="qanda-rust" id="subtitle"]] +[[!template text="""max code is written with the assumption that it's going to be""" start="00:14:42.080" video="qanda-rust" id="subtitle"]] +[[!template text="""interpreted. This is especially true with macros, where""" start="00:14:45.880" video="qanda-rust" id="subtitle"]] +[[!template text="""you'll have a function defined, you'll evaluate part of the""" start="00:14:49.640" video="qanda-rust" id="subtitle"]] +[[!template text="""function. The other half of the function has macros in it""" start="00:14:51.720" video="qanda-rust" id="subtitle"]] +[[!template text="""that are not defined yet, but it doesn't matter because they""" start="00:14:55.600" video="qanda-rust" id="subtitle"]] +[[!template text="""don't get used. But with the bytecode interpreter, it""" start="00:14:59.720" video="qanda-rust" id="subtitle"]] +[[!template text="""expands all macros when it gets the function definition.""" start="00:15:02.400" video="qanda-rust" id="subtitle"]] +[[!template text="""And so those weren't macros when the function was expanded,""" start="00:15:04.640" video="qanda-rust" id="subtitle"]] +[[!template text="""and therefore they got instantiated as functions, but""" start="00:15:08.800" video="qanda-rust" id="subtitle"]] +[[!template text="""they're not functions, they're macros. And so I initially""" start="00:15:12.360" video="qanda-rust" id="subtitle"]] +[[!template text="""spent a bunch of time trying to work around this, trying to""" start="00:15:15.760" video="qanda-rust" id="subtitle"]] +[[!template text="""move code around, work stuff around, refactor the code to""" start="00:15:19.000" video="qanda-rust" id="subtitle"]] +[[!template text="""try and get it to work with only bytecode interpreter. And""" start="00:15:21.600" video="qanda-rust" id="subtitle"]] +[[!template text="""eventually I just gave up. I said, you know what, I'm just""" start="00:15:24.760" video="qanda-rust" id="subtitle"]] +[[!template text="""going to write an actual interpreter to handle this because""" start="00:15:27.040" video="qanda-rust" id="subtitle"]] +[[!template text="""trying to handle all these lazy macros is too much work. And""" start="00:15:30.040" video="qanda-rust" id="subtitle"]] +[[!template text="""everything in the bootstrap is built with the assumption""" start="00:15:33.800" video="qanda-rust" id="subtitle"]] +[[!template text="""that you have lazy macro expansion.""" start="00:15:35.760" video="qanda-rust" id="subtitle"]] +[[!template text="""I'm guessing the Emacs bytecode interpreter isn't""" start="00:15:37.800" video="qanda-rust" id="subtitle"]] +[[!template text="""complete.""" start="00:15:45.160" video="qanda-rust" id="subtitle"]] +[[!template text="""So it's mostly complete. There's a handful of opcodes that""" start="00:15:45.960" video="qanda-rust" id="subtitle"]] +[[!template text="""aren't implemented that are pretty easy to add that I""" start="00:15:52.280" video="qanda-rust" id="subtitle"]] +[[!template text="""haven't run into. And there's some of them that are""" start="00:15:55.240" video="qanda-rust" id="subtitle"]] +[[!template text="""deprecated that aren't implemented, but it's essentially""" start="00:15:57.880" video="qanda-rust" id="subtitle"]] +[[!template text="""complete.""" start="00:16:00.120" video="qanda-rust" id="subtitle"]] +[[!template text="""We also provide a bytecode JIT compilation via libgcc the""" start="00:16:00.480" video="qanda-rust" id="subtitle"]] +[[!template text="""way Emacs currently does it. Eventually I would like to. I'm""" start="00:16:12.000" video="qanda-rust" id="subtitle"]] +[[!template text="""more inclined to have a proper runtime JIT than an""" start="00:16:17.560" video="qanda-rust" id="subtitle"]] +[[!template text="""ahead-of-time compiler like libgcc, like the current""" start="00:16:22.920" video="qanda-rust" id="subtitle"]] +[[!template text="""Emacs native compilation, because it allows you to take""" start="00:16:27.400" video="qanda-rust" id="subtitle"]] +[[!template text="""type information and actually apply that to the code, which""" start="00:16:29.920" video="qanda-rust" id="subtitle"]] +[[!template text="""can let you do more aggressive optimizations to it.""" start="00:16:34.560" video="qanda-rust" id="subtitle"]] +[[!template text="""He said, we may either get a new Emacs with an ancient C core""" start="00:16:37.840" video="qanda-rust" id="subtitle"]] +[[!template text="""with a modern Lisp, or an Emacs with modern core, but stuck""" start="00:17:06.320" video="qanda-rust" id="subtitle"]] +[[!template text="""with ancient Elisp. So there was another project I was""" start="00:17:09.040" video="qanda-rust" id="subtitle"]] +[[!template text="""talking to, one of the Guile implementations, about how we""" start="00:17:11.880" video="qanda-rust" id="subtitle"]] +[[!template text="""could potentially, he was like, what would it take to""" start="00:17:16.640" video="qanda-rust" id="subtitle"]] +[[!template text="""bootstrap Guile in Rune, where you have both, you could have""" start="00:17:19.120" video="qanda-rust" id="subtitle"]] +[[!template text="""Elisp and Guile running inside this project. And so we've""" start="00:17:24.800" video="qanda-rust" id="subtitle"]] +[[!template text="""started that discussion, which I think would be, which""" start="00:17:27.400" video="qanda-rust" id="subtitle"]] +[[!template text="""would be interesting. But it's tricky too, because""" start="00:17:29.000" video="qanda-rust" id="subtitle"]] +[[!template text="""fundamentally Elisp and Guile are two different""" start="00:17:33.320" video="qanda-rust" id="subtitle"]] +[[!template text="""languages. They have different semantics. They have""" start="00:17:36.200" video="qanda-rust" id="subtitle"]] +[[!template text="""different ways of handling things. You've really got to""" start="00:17:38.120" video="qanda-rust" id="subtitle"]] +[[!template text="""consider both of those when you're trying to make them work""" start="00:17:39.880" video="qanda-rust" id="subtitle"]] +[[!template text="""together.""" start="00:17:42.480" video="qanda-rust" id="subtitle"]] +[[!template text="""How would you do the native module system? What would be""" start="00:17:42.800" video="qanda-rust" id="subtitle"]] +[[!template text="""different? We can do the same thing. We have an FFI. So I""" start="00:17:57.320" video="qanda-rust" id="subtitle"]] +[[!template text="""haven't looked into it a ton, but I feel like it could be""" start="00:17:59.800" video="qanda-rust" id="subtitle"]] +[[!template text="""similar. And I'm actually interested, there's a couple""" start="00:18:03.840" video="qanda-rust" id="subtitle"]] +[[!template text="""projects on GitHub right now to have an FFI written in Elisp.""" start="00:18:06.360" video="qanda-rust" id="subtitle"]] +[[!template text="""So you don't even need to create a separate C or Rust module,""" start="00:18:12.760" video="qanda-rust" id="subtitle"]] +[[!template text="""because you can actually write native modules in Rust or C.""" start="00:18:17.240" video="qanda-rust" id="subtitle"]] +[[!template text="""And so you can just have direct bindings to a C FFI written in""" start="00:18:21.680" video="qanda-rust" id="subtitle"]] +[[!template text="""Elisp. You don't need any C code inside there. And I think""" start="00:18:25.560" video="qanda-rust" id="subtitle"]] +[[!template text="""that would be an interesting approach to look at as well.""" start="00:18:27.800" video="qanda-rust" id="subtitle"]] +[[!template text="""Oh, Ramin. Yeah, that's right. We were talking about that,""" start="00:18:29.720" video="qanda-rust" id="subtitle"]] +[[!template text="""about bootstrapping scheme.""" start="00:18:35.840" video="qanda-rust" id="subtitle"]] +[[!template text="""And at this point, we have broken away from, uh, from this""" start="00:18:37.520" video="qanda-rust" id="subtitle"]] +[[!template text="""talk, but we're continuing to record and this will all be""" start="00:18:45.520" video="qanda-rust" id="subtitle"]] +[[!template text="""published. I'd say, go ahead and keep going as long as you'd""" start="00:18:47.400" video="qanda-rust" id="subtitle"]] +[[!template text="""like in here. And, um, thanks once again for the awesome""" start="00:18:50.440" video="qanda-rust" id="subtitle"]] +[[!template text="""discussion. Thank you so much. So I'll just pay attention to""" start="00:18:54.960" video="qanda-rust" id="subtitle"]] +[[!template text="""the ether pad and the chat and see.""" start="00:18:58.640" video="qanda-rust" id="subtitle"]] +[[!template text="""That sounds good. I'll keep an eye on IRC. And if there are""" start="00:19:00.040" video="qanda-rust" id="subtitle"]] +[[!template text="""more questions here, I'll bounce people toward the ether""" start="00:19:05.920" video="qanda-rust" id="subtitle"]] +[[!template text="""pad or this, uh, chat room. All right, thank you.""" start="00:19:08.560" video="qanda-rust" id="subtitle"]] + +</div>Questions or comments? Please e-mail [troy@troyhinckley.com](mailto:troy@troyhinckley.com?subject=Comment%20for%20EmacsConf%202023%20rust%3A%20An%20experimental%20Emacs%20core%20in%20Rust) <!-- End of emacsconf-publish-after-page --> diff --git a/2024/info/rust-before.md b/2024/info/rust-before.md index b09f1e82..30e3f8f1 100644 --- a/2024/info/rust-before.md +++ b/2024/info/rust-before.md @@ -2,12 +2,14 @@ [[!toc ]] Format: 21-min talk ; Q&A: BigBlueButton conference room Etherpad: <https://pad.emacsconf.org/2024-rust> -Status: Q&A finished, IRC and pad will be archived on this page +Status: TO_INDEX_QA +# Talk + <div class="vid"><video controls preload="none" id="rust-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="rust-mainVideo" data=""" 00:00.000 Rune 00:17.082 The Emacs core @@ -41,5 +43,9 @@ Status: Q&A finished, IRC and pad will be archived on this page 19:22.739 How to get involved """]]<div></div>Duration: 20:06 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-rust">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--main.webm">Download --main.webm (46MB)</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--slides.org">Download --slides.org</a></li><li><a href="https://toobnix.org/w/wYBo5m5jsiu1JUfcHzdhhu">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="rust-qanda"><source src="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-rust">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-rust--an-experimental-emacs-core-in-rust--troy-hinckley--answers.webm">Download --answers.webm (42MB)</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2024/talks/rust.md b/2024/talks/rust.md index e994d28f..ce72ffa2 100644 --- a/2024/talks/rust.md +++ b/2024/talks/rust.md @@ -26,6 +26,121 @@ About the speaker: Hardware Engineer with interest in low-level programming and the hardware-software boundary. +# Discussion + +## Questions and answers + +- Q: Have you considered using CRDTs to share buffers between threads + and merge any concurrent edits automatically? + - A: While mathematically correct, CRDT does not always produce a + useful answer. With different packages, this will the issue: not + a useful result. + [https://www.moment.dev/blog/lies-i-was-told-pt-1](https://www.moment.dev/blog/lies-i-was-told-pt-1){rel="noreferrer noopener"} +- Q: Why hosted on GitHub? GitHub is nonfree. Is it possible to report + bugs/send patches without using GitHub? + - A: Email patches are possible. Github is what the speaker knows. +- Q: Do you think it\'s possible to achieve 100% compatibility with + current emacs code? + - A: Most should be compatible (since elisp package is the biggest + emacs strength) but there might be differences on purpose. +- Q: \<janneke\> troyhinckley: so you\'re re-implementing elisp in + rust? have you considered using a more modern lisp, such as scheme? + \[11:03\] + - A: No actually. Only trying to reimplementing the C part of + emacs, replacing it by rust. There are two other talks in the + conference to use something else (guile and scheme). +- Q:\<lounge-681\> can remacs be reused? + - A: Some of the code and some of the ideas (documentation, ideas + and approach to problems) were taken. But different model: in + remacs everything is an external type. Here, instead trying, to + use the builtin type reimplementating the objects instead. +- Q: \<apiraino\> hello, great talk, fascinating topic! I am a + contributor of the compiler team of the Rust prog. language (though + I don\'t delve in the code myself). Do you have specific features + from the Rust compiler that are missing (or are nightly-only) that + you would take advantage of? 10:05:38 + - A: Polonius: the new borrow checker. Would solve + lifetime-tracking issues. A better tracking mechanism would be + better. + - A: Enum with variant types to avoid boilerplate + [https://github.com/rust-lang/lang-team/issues/122](https://github.com/rust-lang/lang-team/issues/122){rel="noreferrer noopener"} + - A: Allocator API could be better (still nightly-only) + - A: \<apiraino\> thanks! Dont forget to fill out the survey :) + [https://blog.rust-lang.org/2024/12/05/annual-survey-2024-launch.html](https://blog.rust-lang.org/2024/12/05/annual-survey-2024-launch.html){rel="noreferrer noopener"} +- Q: What are you thoughts on the GUI layer. Any plans on how to + reimplement it? + - A: Either GTK+ or direct GUI in Rust, but no concrete plan so + far. +- Q: \<ramin\> (not a question) Re. the GUI layer, the Gtk project has + automated bindings with a framework called \"GObject + Introspection,\" which is what I am using for my \"Gypsum\" project. + Probably Rust has a GObject Implementation which you could use. + - A: Problem with Rust GUIs very new and mostly demo without + accessibility and test in all environements. +- Q: If money could fix the problem, how much would it cost to ship + this with feature parity before 2026? + - A: Probably needs a couple people and more than one year of + work. Lots of testing required to fix all bugs. +- Q: \<janneke\> troyhinckley: elisp is implemented in c, so if + you\'re not implementing elisp in rust, are you using/keeping the c + implementation of elisp? + - A: Idea of the project is to keep the Elisp layer and changing + the C layer underneath that is currently called, replacing it by + rust. Elisp does not change. Plan is to be even be bug + compatible to emacs: Elisp should be perfectly compatible with + both C and rust. Elisp is fixed in this approach. +- Q: \<ramin\> sorry if you already discussed this, but will your Rust + implementation also be able to run Emacs bytecode? Or are you + implementing it at the Lisp level? + - A: Bytecode interpreter already exists (actually bytecode + compiler and interpreter was bootstrapped first as it is + implemented in Elisp). + - A: the bytecode is missing some OP-code that have not been + encountered so far. +- Q: Cool, so will you also provide bytecode JIT compilation via + \"libgcc\" the way Emacs currently does? + - A: Eventually maybe, but a proper JIT would be better as it + includes type information to better optimize the code. +- Q: Is it possible to bootstrap without the interprerter? + - A: having only bytecode does not work, as some part are expected + to be interpreted with macros containing functions that are not + yet defined. You really need an interpreter for the lazy macro + expansion. +- Q: How would you do the native module system? What would be + different? Sounded like part of an anwer about Rust Emacs modules + got cut off. + - A: There is an FFI, so it should be possible to have the same + thing. Could possibley implement FFI in elisp. +- Q: \<ramin\> That was me who was discussing with you about + bootstrapping Scheme! (Not Guile, R7RS Scheme) Yes, it would be a + whole other thing than what you have done so far. But it would be + cool, because then you would be able to run the \"Gypsum\" editor on + top of your Emacs engine. + - A: \<troyhinckley\> I still think that would be really cool to + get working! we will have to collaberate on that more. + +## Notes + +- \<Psionic\`\> Getting good vibes from this Rust work +- \<NullNix\> (you can do the offscreen-cursor thing in current emacs + with enough +- effort. see scroll-in-place.el.) +- \<Psionic\`\> Oooooh flow images. My last expectation was Rust + making Dslide +- image animations slick +- \<sctb\> troyhinckley: Very cool talk! +- \<\[\> I recommend + [https://codeberg.org/](https://codeberg.org/){rel="noreferrer noopener"} + (as a freedom-respecting github +- replacement) +- \<NullNix\> one big problem with using gtk \-- there is a + \*two-decade-old\* unfixed bug in gtk where it keeps permanent + references to the x server etc (IIRC, its wayland support has + similar problems). this means a gtk emacs \--daemon crashes if you + connect to an x server and then close the x server down. this + is\.... unfortunate + + [[!inline pages="internal(2024/info/rust-after)" raw="yes"]] |