1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
|
WEBVTT
00:00.069 --> 00:01.850
Troy Hinckley's project that I'm talking about. I was going
00:02.350 --> 00:22.139
to mention this in my presentation, but it's possible,
00:02.350 --> 00:22.139
theoretically, that Troy Hinckley, his project could be
00:02.350 --> 00:22.139
used as a scheme of limitation that actually runs my own
00:02.350 --> 00:22.139
version of Emacs. And although, you know, This is
00:25.478 --> 00:29.380
completely theoretical, and I don't know how difficult
00:25.478 --> 00:29.380
that would be. But if Troy Hinckley implemented enough of
00:30.781 --> 00:47.029
the R7-RS standard in Rust, it would theoretically be
00:30.781 --> 00:47.029
possible to run the Gypsum editor in Troy Hinckley's own
00:30.781 --> 00:47.029
editor. I thought that was kind of interesting, and I
00:48.270 --> 00:53.833
thought it was worth mentioning, at least in the questions
00:48.270 --> 00:53.833
and answers.
01:12.179 --> 01:14.080
I also mentioned this in the presentation. I wanted to see
01:14.940 --> 01:22.364
Robin Templeton's project presentation, but
01:14.940 --> 01:22.364
unfortunately it's going to be at like four in the morning
01:14.940 --> 01:22.364
for me. So I'm going to try and watch that tomorrow, but
01:22.984 --> 01:31.428
that's also going to be a very interesting project to keep an
01:22.984 --> 01:31.428
eye on if you're interested in Scheme. That's the project
01:33.149 --> 01:38.051
where you've got the Guylain interpreter running inside of
01:33.149 --> 01:38.051
the Emacs process. It's dynamically linked as a library.
02:04.699 --> 02:06.748
I'm ready for questions from anybody. You can ask or you can
02:07.431 --> 02:09.079
type. It's up to you.
02:32.319 --> 02:34.521
Okay, let me check the etherpad.
02:37.304 --> 02:38.245
Let's see here.
02:41.208 --> 02:42.830
I'm not sure if I'm doing that right.
02:46.373 --> 02:47.554
Let me check one more time. Oh, there it goes.
02:54.221 --> 02:55.702
Let's see, so this is...
03:00.151 --> 03:02.072
I didn't know about that first bit of history. Oh, I've heard
03:02.332 --> 00:03:09.369
RMS say that Scheme Guile is just a nicer Lisp, but I didn't
03:02.332 --> 03:09.776
know there were concrete talks attempts to use Guile for
03:02.332 --> 03:09.776
Emacs that early. Let's see, that was from janneke.
NOTE 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?
00:03:09.370 --> 00:03:19.241
I'm curious to know how the hell Guile Emacs deals with all the
03:14.318 --> 03:19.241
dynamically scoped modules out there. Is there any effort
03:20.181 --> 03:24.943
to automatically modularize and name? Let's see.
03:30.523 --> 03:35.806
That might be a better question for Robin Templeton. In my
03:36.727 --> 03:46.573
own project,
03:36.727 --> 03:46.573
there's no module system for Emacs Lisp. There is a module
03:46.693 --> 03:48.234
system for Scheme. And the Emacs Lisp interpreter runs in
03:49.695 --> 03:55.158
its own environment. the require system or whatever module
03:57.068 --> 04:11.736
system that Emacs has, once it's implemented, all of that
03:57.068 --> 04:11.736
would just happen inside of the Emacs Lisp environment,
03:57.068 --> 04:11.736
which is inside of the Scheme environment. And
04:12.437 --> 04:15.898
environments are objects in Scheme.
04:21.522 --> 04:24.103
I think a more difficult question is how to handle
04:26.420 --> 04:31.942
threading, and Scheme has very good threading built in, in
04:26.420 --> 04:31.942
Serphe-18[??].
04:34.283 --> 04:48.028
But I don't think it will be easy to write Emacs Lisp form
04:34.283 --> 04:48.028
bindings to the Scheme multi-threading implementation.
04:48.548 --> 04:50.749
Emacs Lisp was just not cut out for that kind of thing. So I
04:51.710 --> 04:59.894
think each Emacs Lisp, you could, I suppose, have multiple
04:51.710 --> 04:59.894
threads each running their own Emacs Lisp environment.
05:01.375 --> 05:02.956
Scheme would make that very simple to do.
05:06.018 --> 05:16.744
And then there'd just be a question of how you would get those
05:06.018 --> 05:16.744
different interpreters to communicate with each other,
05:06.018 --> 05:16.744
perhaps using the same protocol that's used by the Emacs
05:06.018 --> 05:16.744
server. But I haven't thought that far ahead yet.
NOTE Q: Would it be possible to support a GUI toolkit other than GTK?
05:23.646 --> 05:28.709
Would it be possible to support a GUI toolkit other than the
05:23.646 --> 05:28.709
GTK? Like, how is it still supports Lucid? Yes, this is
05:31.291 --> 05:33.232
absolutely a goal of the project. I'm trying to keep the back
05:33.873 --> 05:38.416
end separate as possible. The scheme has what you call
05:39.817 --> 05:42.478
parameters. And these are like global variables that are
05:43.199 --> 05:46.221
still somewhat thread safe. And every call to the GUI goes
05:47.484 --> 05:51.225
through a parameter. So the Emacs, the interpreter and the
05:52.125 --> 05:59.367
editor logic is all in one module. And then that module calls
05:59.987 --> 06:04.309
out into a separate GUI module. And then you can implement
06:04.989 --> 06:07.690
different GUI modules. So you could have one for GTK3, one
06:08.430 --> 06:13.171
for GTK4, if you want to write the extern C bindings around Qt
06:13.843 --> 06:20.725
or full tick, that would certainly be possible as well. It
06:21.185 --> 06:32.168
would be nice maybe to have an SDL implementation based
06:21.185 --> 06:32.168
maybe on Chikiti or some kind of immediate mode GUI,
06:21.185 --> 06:32.168
something like that. But definitely GTK3 through Guile GI
06:33.808 --> 06:38.750
is the reference implementation. Things start there. But
06:41.298 --> 06:43.959
I'm very interested in supporting other GUIs, yes. Let's
06:45.199 --> 00:06:45.256
see.
NOTE 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?
00:06:45.257 --> 00:06:45.879
Question, do you plan to provide improvements to ELisp
06:47.540 --> 06:56.342
as a language or focus on a compatibility layer to
06:47.540 --> 06:56.342
facilitate all new extensions in Scheme? Yeah, the second
06:57.142 --> 06:57.962
one. I want to move off to Scheme. I would like for this
07:03.384 --> 07:05.264
project to try and keep up to date with each new release of
07:05.666 --> 07:10.789
Emacs and Emacs Lisp. That's a difficult moving target to
07:11.850 --> 07:14.552
follow, I realize. But to the greatest extent possible, any
07:15.152 --> 07:23.397
new features to Emacs Lisp will be pulled in from GNU Emacs.
07:25.419 --> 07:29.041
If we happen to be able to implement something cool in
07:25.419 --> 07:29.041
Scheme, and be able to port it over to Emacs Lisp, then sure,
07:29.437 --> 07:36.543
it'd be nice to be able to upload or to submit that upstream to
07:29.437 --> 07:36.543
the GNU Emacs. But I think I would prefer to have new features
07:38.584 --> 07:43.708
written in Scheme. I would like this gypsum to be more of a
07:43.989 --> 07:52.075
Scheme app platform that just happens to be able to also run
07:43.989 --> 07:52.075
Emacs Lisp. That's how I see it. Of course, this will be a
07:54.577 --> 07:56.699
community project. I'm open to debate about that if anybody
07:58.809 --> 08:02.012
wants to convince me otherwise.
08:08.439 --> 08:11.683
Why is being able to interpret all of that EL a useful goal?
08:12.464 --> 08:14.626
Sure, there is a lot of code written in Elisp. Can we
08:15.206 --> 08:17.749
consider... Oh, it's still being written. Please go ahead
08:18.390 --> 08:19.491
and finish writing.
NOTE Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?
08:29.673 --> 08:35.576
Can we consider a translator like utility to convert eLisp
08:29.673 --> 08:35.576
to Scheme once Guile-Emacs has become a reality?
08:36.716 --> 08:37.076
Certainly. For the time being, I just wanted to get the
08:38.717 --> 08:42.639
interpreter running. So the actual, the Guile-Emacs Lisp,
08:44.520 --> 08:58.666
the one that was written in 2011 that I didn't write, that
08:44.520 --> 08:58.666
actually does compile to, I think it's the tree
08:44.520 --> 08:58.666
intermediate representation It's one of the intermediate
08:59.076 --> 09:03.697
languages that Guile uses to compile Guile scheme itself.
09:04.817 --> 09:09.299
So the Emacs lisp that was written before actually does
09:04.817 --> 09:09.299
that. It actually compiles and makes use of the entire Guile
09:09.339 --> 09:20.761
compiler tool chain and actually produces like JIT
09:09.339 --> 09:20.761
compilable binaries, which is really cool. Like I said,
09:23.342 --> 09:25.943
that's the one that I had trouble getting to work properly.
09:29.209 --> 09:30.890
Maybe we can follow that architecture. I'm not sure how to do
09:33.052 --> 09:45.102
that, but I would like to be able to do some kind of
09:33.052 --> 09:45.102
translating, keeping in mind that we want to have this be
09:33.052 --> 09:45.102
portable, do various schemes. And so Guile makes this very
09:45.988 --> 09:50.289
easy, but other schemes don't. Gambit might do this pretty
09:51.549 --> 09:53.530
well as well. It compiles to C and then compiles C down to a
09:53.950 --> 10:01.471
dynamically linkable library. So yeah, I think probably
10:03.372 --> 10:09.373
the most portable, I'm just thinking out loud right now,
10:10.652 --> 10:21.715
most portable implementation will just be able to
10:10.652 --> 10:21.715
translate Emacs Lisp directly to Scheme, which is not what
10:10.652 --> 10:21.715
the old Guile Emacs Lisp implementation does. That goes to
10:21.755 --> 10:26.777
TreeIL, so it's very, very Guile-specific, can't be
10:21.755 --> 10:26.777
ported. But yeah, if we could somehow get Emacs Lisp
10:28.359 --> 10:42.045
translated to Scheme and then compiled, say, in Shea Scheme
10:28.359 --> 10:42.045
or Gambit or MIT Scheme or one of those other compilers, that
10:28.359 --> 10:42.045
would be very cool. And I would absolutely love to do that.
10:44.906 --> 10:49.948
And I would very quickly accept any code into the code base
10:44.906 --> 10:49.948
that would do that.
NOTE Q: Why is being able to interpret all of \`init.el\` an useful goal?
10:54.390 --> 10:56.291
Oh, and to answer the question about init.el,
10:59.207 --> 11:17.215
It's just because people spend a lot of time on their configs
10:59.207 --> 11:17.215
and it would be nice if, you know, you're starting to use this
10:59.207 --> 11:17.215
new editor and want it to be similar to Emacs users, just the
10:59.207 --> 11:17.215
Emacs community in general and people who are familiar with
10:59.207 --> 11:17.215
using Emacs. It would be more useful to everybody in the
11:17.715 --> 11:25.379
Emacs community if this were more compatible with GNU
11:17.715 --> 11:25.379
Emacs. And so that's why that's, I think that's an important
11:25.679 --> 11:27.960
goal.
11:34.465 --> 11:35.467
Question is not yet. Great. Oh, here comes another
11:38.471 --> 11:39.613
question.
NOTE Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?
12:08.539 --> 12:17.742
Okay, what is the plan to handle elisp packages that depend
12:08.539 --> 12:17.742
on third-party or external libraries like git or magit
12:08.539 --> 12:17.742
or ripgrep? So that's going to be tricky. It depends on how
12:21.523 --> 12:26.224
these external packages are linked into emacs. If it's
12:26.844 --> 12:33.646
going to be a dynamic library like Robin Templeton's
12:26.844 --> 12:33.646
project which you load the libgit library into the Emacs
12:35.289 --> 12:41.931
process, that is going to be extremely difficult. So if you
12:44.032 --> 12:52.975
have an external library like, I don't know, libgit or
12:44.032 --> 12:52.975
what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo
12:57.736 --> 13:01.398
to do SVG graphics and so on.
13:04.483 --> 13:17.480
You can do that very easily with Guile, but then on top of
13:04.483 --> 13:17.480
that, implementing Emacs list bindings to it, I mean,
13:04.483 --> 13:17.480
you've got two layers there, and that makes things pretty
13:04.483 --> 13:17.480
difficult. So it's possible. And to some degree, maybe
13:21.935 --> 13:30.842
necessary for example, Cairo, if we want to do SVG graphics
13:21.935 --> 13:30.842
the way that Emacs Lisp does, we're going to have to have
13:21.935 --> 13:30.842
that. So that would be necessary. We would have to have those
13:32.643 --> 13:33.944
two layers. Yes, let's do that. But if it's like for Magit,
13:38.047 --> 13:50.596
you can just call out to your git process, and then you're
13:38.047 --> 13:50.596
just using the regular process APIs that Emacs Lisp has. And
13:51.451 --> 13:58.475
that can be, already we, like Guile has some very good
13:51.451 --> 13:58.475
implementations for process management. And so it would
13:59.055 --> 14:05.438
just be a matter of wrapping up those in the Emacs lisp form
13:59.055 --> 14:05.438
bindings. So yeah, dynamic libraries, I wanna try to avoid.
14:12.222 --> 14:20.366
And I would prefer to do things more through, you know,
14:12.222 --> 14:20.366
launching a child process in the Emacs process. and then
14:20.956 --> 14:24.798
communicating over the standard in, standard out
14:20.956 --> 14:24.798
channels.
14:29.460 --> 14:40.386
That's the easier way to do things, I think, because then you
14:29.460 --> 14:40.386
can just use the process library that Emacs already has, and
14:29.460 --> 14:40.386
you can just reuse all of that code.
14:43.969 --> 14:49.912
I'm not sure how ripgrep works, unfortunately, but I
14:43.969 --> 14:49.912
believe that's also a process, a child process. So, we can
14:50.412 --> 14:53.774
just reuse all of the Emacs Lisp code that does that already.
14:54.014 --> 15:05.979
We just need to make sure that the process management
14:54.014 --> 15:05.979
implementation and scheme is properly bound to Emacs Lisp,
14:54.014 --> 15:05.979
and it works the same as GNU Emacs does. Once that's all set,
15:06.360 --> 15:13.383
then these porcelains, like around git, should fall into
15:06.360 --> 15:13.383
place. without too much difficulty, hopefully.
NOTE Q: Not really a question, but how about Schemacs as a name?
15:21.112 --> 15:22.593
How about Schemax as a name? I like the name. I like that name.
15:28.937 --> 15:32.920
I haven't really looked into like, is that already used or is
15:28.937 --> 15:32.920
that going to be confusing? But certainly something we can
15:33.380 --> 15:35.021
discuss.
15:38.243 --> 15:39.264
Another thing I should mention,
15:42.157 --> 15:48.278
I should probably set up a server or something like Discord
15:42.157 --> 15:48.278
or something like that. Discourse, not Discord.
15:51.619 --> 15:56.220
Discourse, the open source one, where we could actually
15:51.619 --> 15:56.220
chat about this stuff. For the time being, ActivityPub,
15:56.540 --> 16:05.562
mostly Mastodon, is how I communicate with people in real
15:56.540 --> 16:05.562
time, that or email. So if you want to get a hold of me, check
16:09.809 --> 16:15.571
the notes for this presentation and just send me an email.
16:16.752 --> 16:18.012
Any question at all is fine. If you want to contribute code,
16:19.633 --> 16:25.495
if you want to just learn how to contribute code, send me any
16:19.633 --> 16:25.495
questions. It's fine. I'm happy to answer them. And we can
16:30.256 --> 16:31.757
talk about the name as well.
NOTE Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?
16:45.931 --> 16:54.215
Okay, why is it not feasible for the Emacs layer that
16:45.931 --> 16:54.215
interprets Emacs Lisp, the core in C, have a Scheme
16:45.931 --> 16:54.215
interpreter instead of using Guile? Let's see, I have to,
16:55.496 --> 16:57.257
okay. Emacs layer interprets Emacs Lisp, the core in C, have
16:57.737 --> 17:05.942
a Scheme interpreter instead of using Guile. Okay, so that,
17:07.362 --> 17:13.906
the question xlarsx is asking, xlars, x, So Lars is asking,
17:14.744 --> 17:28.093
is it not feasible for there to be an
17:14.744 --> 17:28.093
Emacs layer that interprets Emacs Lisp have a scheme
17:14.744 --> 17:28.093
interpreter? This is Robin Templeton's project. And
17:30.815 --> 17:32.156
they're presenting later today. So check the roster and be
17:32.697 --> 17:41.303
sure to see that presentation because that's exactly what
17:32.697 --> 17:41.303
Robin Templeton is doing. That's not what I'm doing though.
17:44.419 --> 17:46.459
I'm trying to create something in Scheme. But yes, there is
17:48.280 --> 17:54.921
an attempt to get an Scheme interpreter to run inside of
17:48.280 --> 17:54.921
Emacs itself. And it has its own method of binding to Emacs
17:55.181 --> 18:05.323
Lisp functions and translating data like Lisp structures
17:55.181 --> 18:05.323
between Guile Scheme and Emacs Lisp. Robin will explain all
18:05.943 --> 18:08.284
of that in their presentation.
18:28.519 --> 18:33.020
OK, I think I've got through all the questions on Etherpad.
18:33.620 --> 18:35.500
But I'm going to hang out here for a bit longer. And yeah, feel
18:37.621 --> 18:46.182
free to do a video chat with me or send me more questions on
18:37.621 --> 18:46.182
Etherpad or here in the big blue button. And so I'm just going
18:47.002 --> 18:48.082
to hang out. And thanks for asking all your questions. And
18:51.663 --> 18:56.024
yeah, I look forward to working with all of you if you're
18:51.663 --> 18:56.024
interested. take it easy. Thanks so much for the talk and
18:59.935 --> 19:08.180
looking forward to seeing some of your progress as this
18:59.935 --> 19:08.180
moves forward, exciting space. We'll go ahead and leave the
19:09.261 --> 19:14.925
room open for you and thanks for offering to hang out and chat
19:09.261 --> 19:14.925
with other people that come by. Feel free to throw something
19:15.025 --> 19:18.287
in the chat if you want to remind people you're still here.
19:19.557 --> 19:25.143
Meanwhile, on the stream, we have moved along to our next
19:19.557 --> 19:25.143
talk on Rust, and that is just getting started. But again,
19:25.283 --> 19:30.549
we're continuing to record this, and I'll just keep an eye on
19:25.283 --> 19:30.549
it to stop the recording. Thank you. Thank you. It was
19:33.352 --> 19:33.853
awesome.
21:47.935 --> 21:50.558
So it seems like it's slowed down here for the Q&A. I don't see
21:50.638 --> 21:53.741
anybody else on BBB, so I'm going to go ahead and stop the
21:50.638 --> 21:53.741
recording. We can start it back up. I would say, yes, there's
21:55.282 --> 21:58.906
a lot of things you can do with this. You can handle
21:58.926 --> 22:00.627
processing. Yeah, I'm going to try and join over the chat for
22:02.029 --> 22:07.614
the next talk. I'm not sure if I can do both big blue buttons at
22:08.635 --> 22:11.538
the same time. You should be able to just watch your mute
22:13.206 --> 22:19.998
settings and mute tab settings and whatever all you have to
22:13.206 --> 22:19.998
avoid bleed through. Okay.
|