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
|
<!-- Automatically generated by emacsconf-publish-after-page -->
<div class="transcript transcript-mainVideo"><a name="gypsum-mainVideo-transcript"></a><h1>Transcript</h1>
[[!template text="""Hi, my name is Ramin Honary,""" start="00:00:00.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and I'm here to talk to you today""" start="00:00:02.781" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""about my clone of Emacs and Emacs Lisp that I've written in""" start="00:00:04.481" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Scheme so far.""" start="00:00:08.941" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I am an Emacs enthusiast since 2017,""" start="00:00:12.981" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""currently employed as a full stack developer,""" start="00:00:19.103" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""mostly working with Python and JavaScript,""" start="00:00:22.665" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""although my true love is functional""" start="00:00:25.226" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""programming, especially Haskell, and Scheme. I started""" start="00:00:27.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""learning Scheme about two years ago. And for the past year,""" start="00:00:30.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I've been working on a project that I'm tentatively calling""" start="00:00:33.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Gypsum. Naming things is hard. It's not a great name.""" start="00:00:36.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I'm open to suggestions.""" start="00:00:40.795" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""But yes, this is the project in which""" start="00:00:43.377" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I am trying to write an Emacs Lisp interpreter in Scheme.""" start="00:00:45.898" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There are many clones already of Emacs. You've probably""" start="00:00:53.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""heard of Edwin, Jed, Jedit, Jove, Lem, MG, Yi, Zile. Edwin""" start="00:00:58.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""itself is also written in Scheme--MIT Scheme. These only""" start="00:01:04.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""clone the key bindings of Emacs and not Emacs Lisp itself.""" start="00:01:10.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The only alternative to GNU Emacs that I'm aware of is""" start="00:01:16.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""XEmacs, which is a fork of GNU Emacs.""" start="00:01:21.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Most people don't use Emacs for the key bindings. I mean,""" start="00:01:26.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this is anecdotally speaking, but the people who I've""" start="00:01:30.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""talked to, I would say don't use Emacs for the key bindings.""" start="00:01:34.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""They use it really more because of the power of Emacs Lisp.""" start="00:01:39.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs is as powerful as any system shell, perhaps even more""" start="00:01:42.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""powerful than system shells like Bash.""" start="00:01:48.440" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The reason why it's so powerful is because""" start="00:01:53.106" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""there's a good programming language""" start="00:01:55.208" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""which you can use to control everything on your system. You""" start="00:01:56.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""can control processes. You can load and save files.""" start="00:02:00.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can create files. You can configure things.""" start="00:02:01.733" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can capture the output of processes in buffers.""" start="00:02:06.417" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can filter text through buffers.""" start="00:02:10.220" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And a good programming language is what""" start="00:02:13.422" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you need in order to do all of this. So one big goal of this""" start="00:02:17.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""project is to try to stick as closely as possible to the R7RS""" start="00:02:23.480" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""standard Scheme definition. That is the latest Scheme""" start="00:02:29.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""standard: R7. And this is just because I want my project to""" start="00:02:33.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""work on many scheme implementations, not just Guile.""" start="00:02:38.920" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Although Guile certainly is the reference""" start="00:02:43.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""implementation.""" start="00:02:45.500" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So another goal is to be able to run any "init.el".""" start="00:02:50.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So you can take your existing "init.el"""" start="00:02:56.460" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and run it in my program without""" start="00:02:59.741" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""significant changes. That's one of my goals in the end.""" start="00:03:01.721" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I should be able to do that.""" start="00:03:05.341" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""A lot of people invest significant""" start="00:03:07.316" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""time in their configs, and it's kind of disruptive""" start="00:03:09.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""if you want to change editors,""" start="00:03:12.718" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""not be able to use your Emacs Lisp""" start="00:03:14.301" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""config. And so I think a useful Emacs clone""" start="00:03:16.501" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""would be able to clone Emacs Lisp well enough""" start="00:03:21.647" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that you can run your "init.el".""" start="00:03:25.128" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so overall, why am I doing this? It's just because I like""" start="00:03:29.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the Scheme programming language. I love its simplicity and""" start="00:03:33.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""its power. It's an extremely well thought-out language.""" start="00:03:38.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It's one of those languages where you can understand the""" start="00:03:42.440" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""entire language from top to bottom. You can read the entire""" start="00:03:46.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""specification and understand it yourself.""" start="00:03:48.740" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It's like the computers I grew up with when I was a kid.""" start="00:03:52.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""They were all very simple computers""" start="00:03:57.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in the late 80s, early 90s. And back then,""" start="00:03:59.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""theoretically, an engineer could understand the entire""" start="00:04:02.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""system at the software level all the way down to the circuit""" start="00:04:05.580" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""level. You can't do that nowadays. And so nowadays, my""" start="00:04:07.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""computer is not really a physical computer anymore. It's""" start="00:04:12.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the Scheme language standard itself. That is the core of""" start="00:04:16.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""computation, of all of computation for me. And I would like""" start="00:04:21.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to use it as more than just an academic curiosity. It was""" start="00:04:25.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""originally designed for teaching at MIT, but it's found use""" start="00:04:30.580" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in industry. And the R7RS standard is still""" start="00:04:36.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""relatively new. It's over 10 years old at this point,""" start="00:04:41.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""but hasn't, I mean, the""" start="00:04:44.271" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Scheme ecosystem itself is already fairly small.""" start="00:04:48.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There still, I don't think,""" start="00:04:52.981" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""has been a whole lot of adoption of R7RS""" start="00:04:54.342" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""quite yet. Kind of a shame.""" start="00:04:56.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I'd like a project like this, a""" start="00:04:58.786" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""very large scale, kind of a killer-app-like project""" start="00:05:01.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""where you're developing a text editor""" start="00:05:04.010" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and perhaps even an integrated development environment""" start="00:05:05.921" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in Scheme, I think would be very useful""" start="00:05:09.061" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""just even as a study of, you know, what""" start="00:05:11.921" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""can this language do? And just overall,""" start="00:05:13.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""there seems to be a lot of interest in""" start="00:05:18.462" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile-based Emacs and well, maybe a""" start="00:05:21.221" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Scheme-based Emacs, but Guile in particular.""" start="00:05:24.321" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There has been talk of""" start="00:05:27.164" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""changing Emacs Lisp or the core of the Emacs Lisp over to""" start="00:05:28.221" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile for about 30 years or so,""" start="00:05:33.661" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""talks originally in the early""" start="00:05:38.470" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""mid 90s. There were discussions between Richard Stallman,""" start="00:05:41.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Tom Lord, and Aubrey Jaffer. They considered""" start="00:05:44.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually replacing Emacs Lisp with Scheme.""" start="00:05:49.920" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""In 1999, and going for about 10 years,""" start="00:05:53.220" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""someone named Ken Raeburn actually started""" start="00:05:56.828" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a project where he started writing Emacs in Guile.""" start="00:06:01.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""My project is very similar to this.""" start="00:06:07.241" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Here's a quote from his webpage, which is still up, even""" start="00:06:11.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""though it hasn't been updated in 15 years.""" start="00:06:15.121" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This project that I have started""" start="00:06:18.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is for converting GNU Emacs to Guile""" start="00:06:20.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""as its programming language.""" start="00:06:23.102" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Support for Emacs Lisp will continue to exist,""" start="00:06:24.122" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""of course, but it may be through""" start="00:06:26.083" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""translation and/or interpretation.""" start="00:06:27.761" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The Lisp engine itself""" start="00:06:29.245" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""may no longer be the core of the program.""" start="00:06:30.340" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And this is my goal as well. In 2010,""" start="00:06:32.907" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Andy Wingo and Ludovic Courtes""" start="00:06:38.539" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""took maintainership of the Guile project.""" start="00:06:41.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""From 2009, so while Andy... 2009""" start="00:06:46.403" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to 2011, the first Emacs Lisp interpreter was already being""" start="00:06:52.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""implemented in Guile. And even to this day,""" start="00:06:59.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this Emacs Lisp interpreter ships with Guile.""" start="00:07:02.090" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so this was happening""" start="00:07:05.652" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""while Andy Wingo took control of the project.""" start="00:07:06.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""In 2011, so shortly after Andy Wingo""" start="00:07:10.113" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""took control of the project,""" start="00:07:13.834" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile 2.0 was released. And also in 2011, in the summertime,""" start="00:07:15.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""someone named Robin Templeton, I believe it was a Google""" start="00:07:22.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Summer of Code project, started actually trying to""" start="00:07:27.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""incorporate libguile, that's the guile interpreter, as a""" start="00:07:33.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""linkable or loadable library, linking it to the Emacs""" start="00:07:38.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""executable, and then providing some built-in functions in""" start="00:07:45.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs that allows you to call the scheme""" start="00:07:49.180" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interpreter, the Guile Scheme interpreter, from Emacs.""" start="00:07:54.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so it's not like a wrapper around the REPL like Geiser or""" start="00:07:58.740" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""SLIME. It's actually the whole Scheme interpreter loaded""" start="00:08:02.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""into your Emacs process. And that means your Emacs will have""" start="00:08:08.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the ability to actually load compiled Scheme programs and""" start="00:08:13.940" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually run them and share memory with Emacs Lisp""" start="00:08:20.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""processes. And, well, Robin Templeton will explain all of""" start="00:08:25.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this. They're presenting today, and I'm very excited to""" start="00:08:29.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually see their presentation. They'll explain""" start="00:08:33.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""everything.""" start="00:08:37.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So, let's see. Moving on. 2020, someone named Vasilij""" start="00:08:40.180" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Schneidermann, I'm not sure how you pronounce that, published""" start="00:08:45.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""an overview called The State of Emacs Lisp on Guile. Let's see""" start="00:08:49.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""if I have that here. Yep, it's this page right here. He goes""" start="00:08:53.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""into detail about who has done what so far, and what can you do""" start="00:08:58.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""in Guile with Emacs Lisp so far, and so on. Like, what is the""" start="00:09:04.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""state of the project overall?""" start="00:09:09.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so (speak of the devil)""" start="00:09:12.718" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""(Andy Wingo on social media).""" start="00:09:15.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So, 2020 to present. Guile Emacs""" start="00:09:20.961" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is dead? So there's GCC Emacs now.""" start="00:09:24.340" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp now has its own JIT compiler.""" start="00:09:32.072" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And it seems like over the past few years,""" start="00:09:35.753" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp has kind of moved off into the direction of""" start="00:09:39.260" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""becoming its own programming language in its own right,""" start="00:09:44.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and it is decidedly Common Lisp-flavored. It is""" start="00:09:48.440" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""very similar to Common Lisp,""" start="00:09:51.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and that seems to be the direction""" start="00:09:54.167" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that it's headed now, and I don't know if there's really any""" start="00:09:56.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interest anymore amongst the Emacs maintainers of""" start="00:10:00.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""continuing with a Guile-based Emacs.""" start="00:10:05.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""But as far as I know, there's still a lot of interest in the""" start="00:10:09.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""community amongst Scheme and Lisp and Emacs users who are""" start="00:10:13.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interested in maybe continuing to try to get Guile to become""" start="00:10:19.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the core of Emacs, or if not, you know, what Robin Templeton""" start="00:10:24.780" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""has been doing, at least trying to get Guile a""" start="00:10:28.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""language, a first class supported language in Emacs. So""" start="00:10:31.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that's enough talking. Let me just show you what I have so""" start="00:10:37.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""far. The GUI is barely working, because I have very little""" start="00:10:40.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""experience with GTK or GObject Introspection. It's very""" start="00:10:45.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""difficult to debug, so it's very slow to develop. Any crash""" start="00:10:50.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""at C level produces no stack traces. So far, most of the""" start="00:10:53.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""crashes that I've experienced are due to simple mistakes""" start="00:10:58.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""like passing the wrong data type. So, so far, no, not a whole""" start="00:11:03.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""lot of need for GDB or rebuilding all GTK, glib,""" start="00:11:09.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and so on with the debugging symbols.""" start="00:11:14.175" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""But yes, still development's been""" start="00:11:17.878" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""very slow. I'm learning as I go. I've chosen to use Guile GI as""" start="00:11:19.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the foundation for the GUI. Let me just load it up quick here.""" start="00:11:25.500" video="mainVideo-gypsum" id="subtitle"]]
[[!template text=""""load main-guile.scm". And this will launch the GUI. I also""" start="00:11:30.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""happen to have a REPL that runs in a separate thread and""" start="00:11:39.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""submits any form that you type to be evaluated inside of the""" start="00:11:44.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""running GUI environment. But you can just type stuff. So""" start="00:11:49.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text=""""hello world." And of course there is...""" start="00:11:57.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""as you can see, it's not quite rendering correctly.""" start="00:12:02.904" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This "*Messages*" thing here,""" start="00:12:08.060" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that should be over here, obviously. I haven't been able to""" start="00:12:11.091" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""figure out how to get those little details down. But yeah,""" start="00:12:13.761" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you can do M-:, and you get your eval,""" start="00:12:17.821" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and you can just evaluate, like (what's an emacs,)""" start="00:12:23.216" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""(or what's a Scheme-specific thing?)""" start="00:12:26.638" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Like "(import (srfi 1))", and""" start="00:12:29.281" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""let's see, do "(iota 20)", for example.""" start="00:12:37.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And so that is the procedure""" start="00:12:44.889" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that iterates and produces some 20 elements of a""" start="00:12:46.781" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""list. Or you can do something like, let's see,""" start="00:12:52.901" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""string-append "hello" with space "world".""" start="00:12:58.420" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And you get the result and so on. And,""" start="00:13:08.115" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you know, scheme allows you to return multiple values. So""" start="00:13:10.260" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""what I have done here is just""" start="00:13:13.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""every value is captured in a list""" start="00:13:14.999" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and it prints all of the return values in the list.""" start="00:13:17.980" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So if a procedure returns no values,""" start="00:13:21.002" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you get an empty list.""" start="00:13:23.463" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And that's that. It's still quite buggy.""" start="00:13:26.145" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So like, here's a bug""" start="00:13:29.406" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that I can reproduce fairly consistently.""" start="00:13:31.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can, yeah, if you do...""" start="00:13:37.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""there seems to be a problem with a""" start="00:13:41.408" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""widget being freed too soon, so it will crash. I'm going to""" start="00:13:46.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""try and solve that, hopefully, before this presentation""" start="00:13:49.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""goes live. Let's see here.""" start="00:13:53.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The Emacs Lisp parser is based on""" start="00:13:57.110" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile Emacs Lisp. So the Guile Emacs Lisp interpreter that""" start="00:13:59.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ships with Guile, that is what I am using. I've actually""" start="00:14:04.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""copied and pasted the source code from the Guile source base""" start="00:14:09.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""into my own project so that I can iterate on it more quickly.""" start="00:14:15.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And I've already had to make some modifications to the""" start="00:14:20.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp interpreter in Guile. So here's the evaluator.""" start="00:14:25.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I've actually already modified the parser and the lexer a""" start="00:14:29.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""little bit. And it's at least able to parse""" start="00:14:33.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""all of the "subr.el" program, the Emacs Lisp program.""" start="00:14:37.859" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It can actually load that, but not""" start="00:14:43.150" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""evaluate it, or parse it, but not evaluate it...""" start="00:14:44.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Read, not eval.""" start="00:14:47.571" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""By the time this goes live, I will have submitted a patch""" start="00:14:51.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""upstream. And that's another goal of this project,""" start="00:14:53.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""incidentally, is that anything that we can contribute to""" start="00:14:57.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile and any built-in functions that we can implement""" start="00:15:01.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I would like to, for this project, I would like to try and""" start="00:15:08.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""contribute upstream to Guile. The Emacs Lisp interpreter""" start="00:15:11.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is not working well, unfortunately. So this copy, this is""" start="00:15:15.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the copy of the code base (from this commit in particular)""" start="00:15:21.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and well, I can't get it working. I can't actually get the""" start="00:15:29.480" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""non-copy, the actual built-in version of""" start="00:15:34.980" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the Emacs Lisp interpreter to work properly quite yet.""" start="00:15:37.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So let me quick go to, (what is this here?)""" start="00:15:41.212" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Guile Elisp. So suppose you have this""" start="00:15:47.034" video="mainVideo-gypsum" id="subtitle"]]
[[!template text=""""eval-elisp" procedure here and it takes""" start="00:15:51.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""an Elisp environment and then it evaluates an expression in that""" start="00:15:56.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""environment. And evaluates to a value. So this""" start="00:16:00.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""is the standard way of doing it in Guile.""" start="00:16:03.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""If you can see here,""" start="00:16:05.085" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""you've got this expression, "compile" expression.""" start="00:16:06.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This is like "eval". And so actually trying to load this.""" start="00:16:09.947" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So let's do "load gypsum". (Let's see here. This is, no),""" start="00:16:16.860" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I wanted to "import gypsum backend guile Elisp".""" start="00:16:24.673" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And if I actually want to do this... So elisp eval, first of all,""" start="00:16:35.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""it says it failed because there's an unbound variable""" start="00:16:39.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text=""""elisp-eval". Don't know what it's talking about.""" start="00:16:42.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""There's no such variable in any of my programs.""" start="00:16:45.349" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I have no idea what's going on here.""" start="00:16:48.230" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You can try to run eval elisp on some simple form like""" start="00:16:51.152" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""(+ 1 2). And it gives you this exception. This works.""" start="00:16:59.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""This is the same issue that I have with all of the,""" start="00:17:04.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""every version of the Emacs Lisp Interpreter in Guile.""" start="00:17:09.580" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can get it to work with this big ",L" mode.""" start="00:17:13.201" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I can actually do (+ 1 2) here.""" start="00:17:18.752" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can do "princ" like here.""" start="00:17:21.594" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""That all works fine. It gives me, for some reason,""" start="00:17:26.817" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a stack trace here.""" start="00:17:30.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And yeah, so it's a bit, it's not well-documented.""" start="00:17:34.941" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The code base is fairly old.""" start="00:17:43.927" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""As I said, it was developed around 2011,""" start="00:17:45.888" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and it's fairly opaque, and I have not been able to figure out""" start="00:17:50.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""how to get Emacs Lisp in Guile working smoothly. So I have""" start="00:17:53.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""started writing my own Emacs Lisp interpreter. And, uh,""" start="00:17:57.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text=""""gypsum/elisp/eval-tests.scm".""" start="00:18:04.540" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""It's, uh, not entirely ready.""" start="00:18:13.400" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can show you some of the tests at least.""" start="00:18:18.270" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Here is a simple Emacs Lisp program""" start="00:18:21.696" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that you can evaluate.""" start="00:18:25.037" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""You got "progn", "setq" a to 3, "setq" b to 5,""" start="00:18:25.857" video="mainVideo-gypsum" id="subtitle"]]
[[!template text=""""setq" c to the sum of a and b, return c.""" start="00:18:31.140" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And this at least works correctly.""" start="00:18:35.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""As you can see here, the result is eight. Um, but""" start="00:18:39.060" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the "let*" semantics are not completed yet.""" start="00:18:43.280" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Lots of work left to do there.""" start="00:18:46.521" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So in the time I have left, I guess I can just,""" start="00:18:51.104" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""talk a little bit about what my plans""" start="00:18:54.465" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""are for the future.""" start="00:18:56.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I would like to begin by evaluating or""" start="00:18:59.388" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""actually loading the "subr.el" into my Emacs Lisp""" start="00:19:02.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""interpreter. I actually have tests set up for that as well,""" start="00:19:06.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""so I can actually select any form I want from "subr.el".""" start="00:19:09.640" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I can just run this through my interpreter""" start="00:19:15.910" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and test to see if everything is working""" start="00:19:18.833" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""once I get that far.""" start="00:19:21.594" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And yeah, let me just say that this is my formal appeal to the""" start="00:19:28.780" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""community for help on this project. Emacs Lisp has""" start="00:19:33.240" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""1,393 built-in functions.""" start="00:19:37.800" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I could never implement that many functions on my own, so if""" start="00:19:41.180" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this project is going to be useful to anybody in any""" start="00:19:45.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""reasonable amount of time, I'm going to need help.""" start="00:19:47.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And I know that there are people out there""" start="00:19:51.115" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""who are very interested in a Guile-based Emacs,""" start="00:19:53.477" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and so if you're watching this,""" start="00:19:56.399" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""please feel free to contact me""" start="00:19:59.000" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""on social media or over e-mail.""" start="00:20:00.522" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""My job, the way I see it, is if there's enough interest,""" start="00:20:05.700" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and I do get a lot of people interested in""" start="00:20:09.648" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""starting to contribute,""" start="00:20:12.065" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""my job will be to document the building and testing process""" start="00:20:13.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and make sure that it is as easy as possible to contribute""" start="00:20:17.920" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""code to this project. I want to document the system""" start="00:20:21.040" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""architecture. I'll write blog posts. I'll do videos on""" start="00:20:24.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""PeerTube explaining how everything works. And I will""" start="00:20:27.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""prioritize which built-in functions""" start="00:20:31.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I think are probably going to be the most necessary,""" start="00:20:34.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""the most essential to get the interpreter running,""" start="00:20:36.463" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and then find low-hanging fruit,""" start="00:20:40.879" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""functions that are easy for people to implement""" start="00:20:42.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""as a good introduction to getting them started""" start="00:20:46.520" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""on contributing to the project.""" start="00:20:50.846" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And then, of course, I will take""" start="00:20:53.948" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""responsibility myself of making sure that we can""" start="00:20:56.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""get the Elisp interpreter to the point""" start="00:21:01.720" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""where it can run the Emacs regression tests.""" start="00:21:03.775" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""These are the test suites that are used""" start="00:21:09.080" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to test Emacs Lisp itself in the GNU Emacs code base. And so""" start="00:21:13.334" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ERT is itself written in Emacs Lisp. And so""" start="00:21:20.360" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I think if we implement enough of the built-in functions""" start="00:21:24.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to be able to run ERT,""" start="00:21:27.034" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""then we can actually start""" start="00:21:29.934" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""using the GNU Emacs regression tests""" start="00:21:31.196" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to test our own interpreter, our own Emacs clone.""" start="00:21:33.618" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And of course, I'll make sure that there's at least""" start="00:21:39.249" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""one usable GUI. I'm currently working on Guile GI""" start="00:21:41.200" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and GTK. It would be great to have an...""" start="00:21:45.834" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ANSI terminal based...""" start="00:21:51.397" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""something that works in your terminal emulator.""" start="00:21:53.880" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And yeah, it would be great if someday soon,""" start="00:21:58.220" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""hopefully, we get enough done""" start="00:22:00.284" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that you can actually contribute a patch to this project""" start="00:22:03.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""from within the Gypsum editor itself.""" start="00:22:06.095" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I was going to do an overview,""" start="00:22:11.779" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""but that would be for more of an hour-long presentation.""" start="00:22:13.381" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I'm out of time. I guess the last thing""" start="00:22:19.680" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""I should quickly say is there's no""" start="00:22:22.928" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""meta object protocol in this""" start="00:22:25.450" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""project. I think that's a little bit too difficult""" start="00:22:27.160" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""to port to various scheme implementations.""" start="00:22:29.002" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So I've created a substitute, which I'm""" start="00:22:30.963" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""calling "functional lenses", which is inspired by the""" start="00:22:33.740" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Haskell project of the same name.""" start="00:22:36.960" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Everything in this project is based on functional lenses.""" start="00:22:42.060" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Yeah, also a lot a work went into the keymaps data structure.""" start="00:22:47.512" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""The point being that I think I have""" start="00:22:52.604" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a pretty good foundation here upon which we can build,""" start="00:22:55.207" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""even though there isn't an actual, there isn't""" start="00:22:58.590" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""a lot done in the actual prototype itself, not yet anyway,""" start="00:23:00.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""but I made sure to get the fundamentals down""" start="00:23:04.700" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""from the beginning. And so I think we have something""" start="00:23:08.420" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""like a solid foundation on which to build.""" start="00:23:11.081" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So, I'm going to conclude it there.""" start="00:23:16.309" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""And here's my contact details. Like I said,""" start="00:23:21.231" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""this is a project, I'm appealing to the community of all""" start="00:23:24.600" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""people who are interested in Guile and Emacs to help""" start="00:23:29.320" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""contribute to this project. I see myself as just getting the""" start="00:23:31.900" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ball rolling. Again, taking-off from the work""" start="00:23:35.840" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""that Ken Raeburn left behind, with my own""" start="00:23:40.601" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""from-the-ground-up implementation. So yeah,""" start="00:23:46.279" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""contact me: e-mail, you can take a look at my blog""" start="00:23:50.638" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""where I talk about what I have done.""" start="00:23:53.859" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""My source code, the code for this project, is up on""" start="00:23:57.420" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""Codeberg... The presentation... this""" start="00:24:00.760" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""presentation, the home page for this presentation, you""" start="00:24:06.140" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""can find more details there. Oh, I'm on""" start="00:24:09.380" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""ActivityPub as well, so my handle is""" start="00:24:15.560" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""@ramin_hal9001@fe.disroot.org, and I'm on everyday.""" start="00:24:19.140" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""So yeah, please feel free to contact me if you're interested,""" start="00:24:27.120" video="mainVideo-gypsum" id="subtitle"]]
[[!template text="""and thank you for your attention.""" start="00:24:30.940" video="mainVideo-gypsum" id="subtitle"]]
</div>
Captioner: ramin
<div class="transcript transcript-qanda"><a name="gypsum-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>
[[!template text="""...Troy Hinckley's project that I'm talking about. I was going""" start="00:00:00.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""to mention this in my presentation, but it's possible,""" start="00:00:03.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""theoretically, that Troy Hinckley, his project could be""" start="00:00:08.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""used as a scheme of limitation that actually runs my own""" start="00:00:16.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""version of Emacs. And although, you know, This is""" start="00:00:18.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""completely theoretical, and I don't know how difficult""" start="00:00:23.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that would be. But if Troy Hinckley implemented enough of""" start="00:00:30.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the R7-RS standard in Rust, it would theoretically be""" start="00:00:34.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""possible to run the Gypsum editor in Troy Hinckley's own""" start="00:00:39.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""editor. I thought that was kind of interesting, and I""" start="00:00:46.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""thought it was worth mentioning, at least in the questions""" start="00:00:50.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""and answers.""" start="00:00:59.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I also mentioned this in the presentation. I wanted to see""" start="00:01:12.160" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Robin Templeton's project presentation, but""" start="00:01:16.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""unfortunately it's going to be at like four in the morning""" start="00:01:20.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""for me. So I'm going to try and watch that tomorrow, but""" start="00:01:22.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that's also going to be a very interesting project to keep an""" start="00:01:26.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""eye on if you're interested in Scheme. That's the project""" start="00:01:29.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""where you've got the Guylain interpreter running inside of""" start="00:01:34.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the Emacs process. It's dynamically linked as a library.""" start="00:01:37.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I'm ready for questions from anybody. You can ask or you can""" start="00:02:04.680" video="qanda-gypsum" id="subtitle"]]
[[!template text="""type. It's up to you.""" start="00:02:08.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Okay, let me check the etherpad.""" start="00:02:32.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Let's see here.""" start="00:02:37.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I'm not sure if I'm doing that right.""" start="00:02:41.160" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Let me check one more time. Oh, there it goes.""" start="00:02:42.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Let's see, so this is...""" start="00:02:54.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I didn't know about that first bit of history. Oh, I've heard""" start="00:03:00.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""RMS say that Scheme Guile is just a nicer Lisp, but I didn't""" start="00:03:02.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""know there were concrete talks attempts to use Guile for""" start="00:03:06.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs that early. Let's see, that was from janneke.""" start="00:03:09.080" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: I'm curious to know how the hell guile-emacs deals with all of the dynamically scoped modules out there. Is there any effort to automatically modularize and namespace stuff?""" start="00:03:14.320" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""I'm curious to know how the hell Guile Emacs deals with all the""" start="00:03:14.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""dynamically scoped modules out there. Is there any effort""" start="00:03:17.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""to automatically modularize and name? Let's see.""" start="00:03:21.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""That might be a better question for Robin Templeton. In my""" start="00:03:29.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""own project,""" start="00:03:40.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""there's no module system for Emacs Lisp. There is a module""" start="00:03:44.640" video="qanda-gypsum" id="subtitle"]]
[[!template text="""system for Scheme. And the Emacs Lisp interpreter runs in""" start="00:03:49.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""its own environment. the require system or whatever module""" start="00:03:55.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""system that Emacs has, once it's implemented, all of that""" start="00:04:01.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""would just happen inside of the Emacs Lisp environment,""" start="00:04:06.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""which is inside of the Scheme environment. And""" start="00:04:09.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""environments are objects in Scheme.""" start="00:04:12.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I think a more difficult question is how to handle""" start="00:04:21.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""threading, and Scheme has very good threading built in, in""" start="00:04:26.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Serphe-18[??].""" start="00:04:33.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""But I don't think it will be easy to write Emacs Lisp form""" start="00:04:34.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""bindings to the Scheme multi-threading implementation.""" start="00:04:43.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp was just not cut out for that kind of thing. So I""" start="00:04:48.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""think each Emacs Lisp, you could, I suppose, have multiple""" start="00:04:52.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""threads each running their own Emacs Lisp environment.""" start="00:04:56.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Scheme would make that very simple to do.""" start="00:05:00.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""And then there'd just be a question of how you would get those""" start="00:05:05.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""different interpreters to communicate with each other,""" start="00:05:08.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""perhaps using the same protocol that's used by the Emacs""" start="00:05:11.680" video="qanda-gypsum" id="subtitle"]]
[[!template text="""server. But I haven't thought that far ahead yet.""" start="00:05:16.280" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Would it be possible to support a GUI toolkit other than GTK?""" start="00:05:23.640" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Would it be possible to support a GUI toolkit other than the""" start="00:05:23.640" video="qanda-gypsum" id="subtitle"]]
[[!template text="""GTK? Like, how is it still supports Lucid? Yes, this is""" start="00:05:26.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""absolutely a goal of the project. I'm trying to keep the back""" start="00:05:31.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""end separate as possible. The scheme has what you call""" start="00:05:37.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""parameters. And these are like global variables that are""" start="00:05:41.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""still somewhat thread safe. And every call to the GUI goes""" start="00:05:45.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""through a parameter. So the Emacs, the interpreter and the""" start="00:05:50.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""editor logic is all in one module. And then that module calls""" start="00:05:58.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""out into a separate GUI module. And then you can implement""" start="00:06:01.680" video="qanda-gypsum" id="subtitle"]]
[[!template text="""different GUI modules. So you could have one for GTK3, one""" start="00:06:06.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""for GTK4, if you want to write the extern C bindings around Qt""" start="00:06:11.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""or full tick, that would certainly be possible as well. It""" start="00:06:16.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""would be nice maybe to have an SDL implementation based""" start="00:06:21.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""maybe on Chikiti or some kind of immediate mode GUI,""" start="00:06:25.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""something like that. But definitely GTK3 through Guile GI""" start="00:06:31.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""is the reference implementation. Things start there. But""" start="00:06:37.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I'm very interested in supporting other GUIs, yes. Let's""" start="00:06:41.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""see.""" start="00:06:44.000" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Do you plan to provide improvements to Elisp as a language, or is the focus on a compatibility layer to facilitate doing all new extensions, etc. in Scheme?""" start="00:06:46.040" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Question, do you plan to provide improvements to ELisp""" start="00:06:46.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""as a language or focus on a compatibility layer to""" start="00:06:50.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""facilitate all new extensions in Scheme? Yeah, the second""" start="00:06:54.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""one. I want to move off to Scheme. I would like for this""" start="00:06:58.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""project to try and keep up to date with each new release of""" start="00:07:04.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs and Emacs Lisp. That's a difficult moving target to""" start="00:07:09.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""follow, I realize. But to the greatest extent possible, any""" start="00:07:13.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""new features to Emacs Lisp will be pulled in from GNU Emacs.""" start="00:07:18.640" video="qanda-gypsum" id="subtitle"]]
[[!template text="""If we happen to be able to implement something cool in""" start="00:07:25.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Scheme, and be able to port it over to Emacs Lisp, then sure,""" start="00:07:28.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""it'd be nice to be able to upload or to submit that upstream to""" start="00:07:31.640" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the GNU Emacs. But I think I would prefer to have new features""" start="00:07:35.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""written in Scheme. I would like this gypsum to be more of a""" start="00:07:43.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Scheme app platform that just happens to be able to also run""" start="00:07:47.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs Lisp. That's how I see it. Of course, this will be a""" start="00:07:51.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""community project. I'm open to debate about that if anybody""" start="00:07:56.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""wants to convince me otherwise.""" start="00:08:00.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Why is being able to interpret all of that EL a useful goal?""" start="00:08:02.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Sure, there is a lot of code written in Elisp. Can we""" start="00:08:11.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""consider... Oh, it's still being written. Please go ahead""" start="00:08:15.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""and finish writing.""" start="00:08:18.960" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Can we consider a translator like utility to convert elisp to scheme, once guile-emacs becomes a reality?""" start="00:08:19.440" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Can we consider a translator like utility to convert eLisp""" start="00:08:19.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""to Scheme once Guile-Emacs has become a reality?""" start="00:08:32.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Certainly. For the time being, I just wanted to get the""" start="00:08:37.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""interpreter running. So the actual, the Guile-Emacs Lisp,""" start="00:08:42.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the one that was written in 2011 that I didn't write, that""" start="00:08:47.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""actually does compile to, I think it's the tree""" start="00:08:51.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""intermediate representation It's one of the intermediate""" start="00:08:57.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""languages that Guile uses to compile Guile scheme itself.""" start="00:08:59.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""So the Emacs lisp that was written before actually does""" start="00:09:03.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that. It actually compiles and makes use of the entire Guile""" start="00:09:09.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""compiler tool chain and actually produces like JIT""" start="00:09:13.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""compilable binaries, which is really cool. Like I said,""" start="00:09:17.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that's the one that I had trouble getting to work properly.""" start="00:09:21.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Maybe we can follow that architecture. I'm not sure how to do""" start="00:09:27.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that, but I would like to be able to do some kind of""" start="00:09:34.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""translating, keeping in mind that we want to have this be""" start="00:09:37.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""portable, do various schemes. And so Guile makes this very""" start="00:09:42.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""easy, but other schemes don't. Gambit might do this pretty""" start="00:09:48.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""well as well. It compiles to C and then compiles C down to a""" start="00:09:52.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""dynamically linkable library. So yeah, I think probably""" start="00:09:57.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the most portable, I'm just thinking out loud right now,""" start="00:10:06.160" video="qanda-gypsum" id="subtitle"]]
[[!template text="""most portable implementation will just be able to""" start="00:10:09.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""translate Emacs Lisp directly to Scheme, which is not what""" start="00:10:13.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the old Guile Emacs Lisp implementation does. That goes to""" start="00:10:17.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""TreeIL, so it's very, very Guile-specific, can't be""" start="00:10:22.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""ported. But yeah, if we could somehow get Emacs Lisp""" start="00:10:26.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""translated to Scheme and then compiled, say, in Shea Scheme""" start="00:10:30.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""or Gambit or MIT Scheme or one of those other compilers, that""" start="00:10:37.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""would be very cool. And I would absolutely love to do that.""" start="00:10:40.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""And I would very quickly accept any code into the code base""" start="00:10:44.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that would do that.""" start="00:10:49.280" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Why is being able to interpret all of \`init.el\` an useful goal?""" start="00:10:50.600" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Oh, and to answer the question about init.el,""" start="00:10:50.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""It's just because people spend a lot of time on their configs""" start="00:10:59.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""and it would be nice if, you know, you're starting to use this""" start="00:11:02.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""new editor and want it to be similar to Emacs users, just the""" start="00:11:06.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs community in general and people who are familiar with""" start="00:11:14.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""using Emacs. It would be more useful to everybody in the""" start="00:11:16.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs community if this were more compatible with GNU""" start="00:11:20.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs. And so that's why that's, I think that's an important""" start="00:11:25.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""goal.""" start="00:11:36.000" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Question is not yet. Great. Oh, here comes another""" start="00:11:38.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""question.""" start="00:12:01.840" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: What is the plan to handle elisp packages that depend on 3rd party/external libraries? (libgit/magit or rg/ripgrep)?""" start="00:12:02.280" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Okay, what is the plan to handle elisp packages that depend""" start="00:12:02.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""on third-party or external libraries like git or magit""" start="00:12:11.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""or ripgrep? So that's going to be tricky. It depends on how""" start="00:12:16.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""these external packages are linked into emacs. If it's""" start="00:12:22.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""going to be a dynamic library like Robin Templeton's""" start="00:12:27.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""project which you load the libgit library into the Emacs""" start="00:12:32.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""process, that is going to be extremely difficult. So if you""" start="00:12:38.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""have an external library like, I don't know, libgit or""" start="00:12:43.160" video="qanda-gypsum" id="subtitle"]]
[[!template text="""what's the GUI thing? Cabal. No, not Cabal. Cairo, libcairo""" start="00:12:49.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""to do SVG graphics and so on.""" start="00:12:59.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""You can do that very easily with Guile, but then on top of""" start="00:13:01.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that, implementing Emacs list bindings to it, I mean,""" start="00:13:09.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""you've got two layers there, and that makes things pretty""" start="00:13:14.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""difficult. So it's possible. And to some degree, maybe""" start="00:13:17.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""necessary for example, Cairo, if we want to do SVG graphics""" start="00:13:23.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the way that Emacs Lisp does, we're going to have to have""" start="00:13:27.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that. So that would be necessary. We would have to have those""" start="00:13:30.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""two layers. Yes, let's do that. But if it's like for Magit,""" start="00:13:33.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""you can just call out to your git process, and then you're""" start="00:13:39.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""just using the regular process APIs that Emacs Lisp has. And""" start="00:13:45.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that can be, already we, like Guile has some very good""" start="00:13:50.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""implementations for process management. And so it would""" start="00:13:57.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""just be a matter of wrapping up those in the Emacs lisp form""" start="00:14:08.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""bindings. So yeah, dynamic libraries, I wanna try to avoid.""" start="00:14:12.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""And I would prefer to do things more through, you know,""" start="00:14:24.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""launching a child process in the Emacs process. and then""" start="00:14:32.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""communicating over the standard in, standard out""" start="00:14:40.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""channels.""" start="00:14:47.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""That's the easier way to do things, I think, because then you""" start="00:14:47.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""can just use the process library that Emacs already has, and""" start="00:14:52.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""you can just reuse all of that code.""" start="00:14:58.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I'm not sure how ripgrep works, unfortunately, but I""" start="00:15:03.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""believe that's also a process, a child process. So, we can""" start="00:15:09.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""just reuse all of the Emacs Lisp code that does that already.""" start="00:15:15.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""We just need to make sure that the process management""" start="00:15:23.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""implementation and scheme is properly bound to Emacs Lisp,""" start="00:15:30.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""and it works the same as GNU Emacs does. Once that's all set,""" start="00:15:35.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""then these porcelains, like around git, should fall into""" start="00:15:43.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""place. without too much difficulty, hopefully.""" start="00:15:48.400" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Not really a question, but how about Schemacs as a name?""" start="00:15:55.280" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""How about Schemax as a name? I like the name. I like that name.""" start="00:15:55.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I haven't really looked into like, is that already used or is""" start="00:15:59.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""that going to be confusing? But certainly something we can""" start="00:16:03.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""discuss.""" start="00:16:09.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Another thing I should mention,""" start="00:16:10.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I should probably set up a server or something like Discord""" start="00:16:13.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""or something like that. Discourse, not Discord.""" start="00:16:18.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Discourse, the open source one, where we could actually""" start="00:16:25.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""chat about this stuff. For the time being, ActivityPub,""" start="00:16:31.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""mostly Mastodon, is how I communicate with people in real""" start="00:16:49.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""time, that or email. So if you want to get a hold of me, check""" start="00:16:52.400" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the notes for this presentation and just send me an email.""" start="00:16:57.280" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Any question at all is fine. If you want to contribute code,""" start="00:17:02.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""if you want to just learn how to contribute code, send me any""" start="00:17:09.040" video="qanda-gypsum" id="subtitle"]]
[[!template text="""questions. It's fine. I'm happy to answer them. And we can""" start="00:17:12.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""talk about the name as well.""" start="00:17:22.200" video="qanda-gypsum" id="subtitle"]]
<div class="transcript-heading">[[!template new="1" text="""Q: Why is it not feasible for the Emacs layer that interprets Emacs Lisp (the core in C) ot have a Scheme interpreter, instead of using Guile?""" start="00:17:25.880" video="qanda-gypsum" id="subtitle"]]</div>[[!template text="""Okay, why is it not feasible for the Emacs layer that""" start="00:17:25.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""interprets Emacs Lisp, the core in C, have a Scheme""" start="00:17:30.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""interpreter instead of using Guile? Let's see, I have to,""" start="00:17:34.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""okay. Emacs layer interprets Emacs Lisp, the core in C, have""" start="00:17:39.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""a Scheme interpreter instead of using Guile. Okay, so that,""" start="00:17:48.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the question xlarsx is asking, xlars, x, So Lars is asking,""" start="00:17:54.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""is it not feasible for there to be an""" start="00:17:59.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs layer that interprets Emacs Lisp have a scheme""" start="00:18:02.320" video="qanda-gypsum" id="subtitle"]]
[[!template text="""interpreter? This is Robin Templeton's project. And""" start="00:18:06.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""they're presenting later today. So check the roster and be""" start="00:18:33.080" video="qanda-gypsum" id="subtitle"]]
[[!template text="""sure to see that presentation because that's exactly what""" start="00:18:39.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Robin Templeton is doing. That's not what I'm doing though.""" start="00:18:45.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""I'm trying to create something in Scheme. But yes, there is""" start="00:18:52.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""an attempt to get an Scheme interpreter to run inside of""" start="00:18:57.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Emacs itself. And it has its own method of binding to Emacs""" start="00:19:02.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Lisp functions and translating data like Lisp structures""" start="00:19:07.160" video="qanda-gypsum" id="subtitle"]]
[[!template text="""between Guile Scheme and Emacs Lisp. Robin will explain all""" start="00:19:11.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""of that in their presentation.""" start="00:19:14.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""OK, I think I've got through all the questions on Etherpad.""" start="00:19:15.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""But I'm going to hang out here for a bit longer. And yeah, feel""" start="00:19:18.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""free to do a video chat with me or send me more questions on""" start="00:19:23.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Etherpad or here in the big blue button. And so I'm just going""" start="00:19:28.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""to hang out. And thanks for asking all your questions. And""" start="00:19:33.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""yeah, I look forward to working with all of you if you're""" start="00:21:49.120" video="qanda-gypsum" id="subtitle"]]
[[!template text="""interested. take it easy. Thanks so much for the talk and""" start="00:21:50.840" video="qanda-gypsum" id="subtitle"]]
[[!template text="""looking forward to seeing some of your progress as this""" start="00:21:51.800" video="qanda-gypsum" id="subtitle"]]
[[!template text="""moves forward, exciting space. We'll go ahead and leave the""" start="00:21:53.200" video="qanda-gypsum" id="subtitle"]]
[[!template text="""room open for you and thanks for offering to hang out and chat""" start="00:21:54.360" video="qanda-gypsum" id="subtitle"]]
[[!template text="""with other people that come by. Feel free to throw something""" start="00:21:54.880" video="qanda-gypsum" id="subtitle"]]
[[!template text="""in the chat if you want to remind people you're still here.""" start="00:21:55.640" video="qanda-gypsum" id="subtitle"]]
[[!template text="""Meanwhile, on the stream, we have moved along to our next""" start="00:21:56.720" video="qanda-gypsum" id="subtitle"]]
[[!template text="""talk on Rust, and that is just getting started. But again,""" start="00:21:57.920" video="qanda-gypsum" id="subtitle"]]
[[!template text="""we're continuing to record this, and I'll just keep an eye on""" start="00:21:59.600" video="qanda-gypsum" id="subtitle"]]
[[!template text="""it to stop the recording. Thank you. Thank you. It was""" start="00:22:00.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""awesome.""" start="00:22:01.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""So it seems like it's slowed down here for the Q&A. I don't see""" start="00:22:01.560" video="qanda-gypsum" id="subtitle"]]
[[!template text="""anybody else on BBB, so I'm going to go ahead and stop the""" start="00:22:03.960" video="qanda-gypsum" id="subtitle"]]
[[!template text="""recording. We can start it back up. I would say, yes, there's""" start="00:22:05.440" video="qanda-gypsum" id="subtitle"]]
[[!template text="""a lot of things you can do with this. You can handle""" start="00:22:08.480" video="qanda-gypsum" id="subtitle"]]
[[!template text="""processing. Yeah, I'm going to try and join over the chat for""" start="00:22:09.520" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the next talk. I'm not sure if I can do both big blue buttons at""" start="00:22:11.240" video="qanda-gypsum" id="subtitle"]]
[[!template text="""the same time. You should be able to just watch your mute""" start="00:22:14.680" video="qanda-gypsum" id="subtitle"]]
[[!template text="""settings and mute tab settings and whatever all you have to""" start="00:22:15.760" video="qanda-gypsum" id="subtitle"]]
[[!template text="""avoid bleed through. Okay.""" start="00:22:19.160" video="qanda-gypsum" id="subtitle"]]
</div>Questions or comments? Please e-mail [ramin.honary@gmail.com](mailto:ramin.honary@gmail.com?subject=Comment%20for%20EmacsConf%202023%20gypsum%3A%20Gypsum%3A%20my%20clone%20of%20Emacs%20and%20ELisp%20written%20in%20Scheme)
<!-- End of emacsconf-publish-after-page -->
|