/
Evolution_of_Emacs_Lisp-PLDI.vtt
4508 lines (3388 loc) · 92.7 KB
/
Evolution_of_Emacs_Lisp-PLDI.vtt
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
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
WEBVTT
1
00:00:12.340 --> 00:00:13.860
Hi Stefan! Good seeing you!
3
00:00:14.440 --> 00:00:00:16.430
Hi, Mike. How're you doing?
6
00:00:16.440 --> 00:00:17.480
Pretty good.
7
00:00:17.490 --> 00:00:20.950
I guess we're here to talk about the evolution of Emacs Lisp.
8
00:00:21.440 --> 00:00:23.060
You want to introduce yourself briefly?
9
00:00:24.040 --> 00:00:24.390
Yes.
10
00:00:24.390 --> 00:00:25.720
So I'm Stefan Monnier.
11
00:00:25.720 --> 00:00:30.560
I do research and teaching in programming languages at University of Montreal.
12
00:00:31.140 --> 00:00:31.360
How about you?
15
00:00:32.340 --> 00:00:35.660
Yeah, I'm CEO of a software consultancy in southern Germany.
17
00:00:36.140 --> 00:00:39.920
So how do.. how did we get into this thing writing this paper?
18
00:00:39.920 --> 00:00:40.120
Right.
19
00:00:40.120 --> 00:00:43.860
I think a lot of people that are seeing a paper on the evolution of something..
20
00:00:43.860 --> 00:00:47.150
..something Emacs would expect Richard Stallman to be here.
21
00:00:49.040 --> 00:00:49.790
Right.
22
00:00:49.790 --> 00:00:52.100
Well, at least, you know,
I work in programming languages.
26
00:00:52.100 --> 00:00:56.860
So there is some relationship. I've been contributing to Emacs
27
00:00:56.860 --> 00:00:58.580
for many, many years,
29
00:00:58.580 --> 00:01:00.660
I've been maintainer of Emacs.
30
00:01:00.670 --> 00:01:02.380
So that's how I ended up here.
31
00:01:02.390 --> 00:01:03.460
Okay. I think,
33
00:01:03.460 --> 00:01:08.220
I think I was contacted by Guy Steele and by you to see there was some
34
00:01:08.220 --> 00:01:09.860
interest in working on this.
36
00:01:10.370 --> 00:01:11.070
How about you?
37
00:01:11.070 --> 00:01:12.030
So, you know,
39
00:01:12.040 --> 00:01:14.980
even though I work in the software consultancy today,
40
00:01:14.980 --> 00:01:18.090
I also used to be in research and programming languages many years ago.
42
00:01:18.880 --> 00:01:22.750
I remember when I started working there at the University of Tübingen about 30 years ago,
45
00:01:25.840 --> 00:01:30.830
we were looking at Emacs and we started using X windows and the version of Emacs that existed at the time
46
00:01:30.830 --> 00:01:33.160
would only run in a terminal or an X term.
47
00:01:33.640 --> 00:01:38.400
but there was a version of Emacs that would allow you to open
48
00:01:38.400 --> 00:01:40.660
multiple windows, called Lucid Emacs.
49
00:01:41.040 --> 00:01:46.160
So we started using that and then I think it didn't run on Linux.
51
00:01:46.160 --> 00:01:50.160
We started usually using at the time and I ported that and I started contributing code.
52
00:01:50.160 --> 00:01:55.140
And that kind of segued into me doing more and more development on first Lucid Emacs
53
00:01:55.140 --> 00:01:57.560
and Lucid Emacs was done by a company called Lucid.
54
00:01:57.570 --> 00:01:59.250
That company folded eventually,
55
00:01:59.540 --> 00:02:02.970
and the project moved to Sun Microsystems,
actually,
57
00:02:02.980 --> 00:02:06.840
where it was renamed to XEmacs by the marketing people there.
62
00:02:09.280 --> 00:02:13.600
So I started using Emacs at the time and then I was a programming Languages researcher,
63
00:02:13.600 --> 00:02:17.740
I think.
So,
I think we were like the two people among the recipients of Guy's
67
00:02:18.230 --> 00:02:23.440
email who,
write,
or who used to write papers for living.
70
00:02:23.450 --> 00:02:25.260
And we didn't say no.
71
00:02:26.140 --> 00:02:28.920
Yeah, so it was a lot of work.
76
00:02:31.420 --> 00:02:34.750
But we're here to talk about Emacs Lisp, right?
78
00:02:34.750 --> 00:02:36.190
Not primarily the editor,
79
00:02:36.190 --> 00:02:38.670
but the programming language of the editor.
80
00:02:38.680 --> 00:02:44.310
So how come, how come Lisp is like the language of Emacs?
82
00:02:44.310 --> 00:02:46.060
Or what does that have to do with the editor?
83
00:02:46.070 --> 00:02:46.660
The language?
84
00:02:48.040 --> 00:02:50.940
Yeah, actually, it it's interesting you ask it this way,
87
00:02:50.940 --> 00:02:54.950
because the first language of Emacs was not Lisp,
it was TECO.
90
00:02:56.010 --> 00:02:56.650
It was TECO, yeah. Ok.
92
00:02:58.340 --> 00:03:03.530
So I think Richard Stallman worked on TECO as well.
94
00:03:03.530 --> 00:03:05.880
Or on the TECO version of Emacs at the time.
95
00:03:05.890 --> 00:03:06.470
That's right.
96
00:03:06.480 --> 00:03:12.150
So the first version of Emacs was written by Richard and many others in TECO.
98
00:03:12.840 --> 00:03:16.120
And so I think you have an example ...
99
00:03:16.130 --> 00:03:17.230
I have an example.
100
00:03:17.230 --> 00:03:20.360
So here let's try this fancy switching feature here.
101
00:03:20.370 --> 00:03:25.150
So here's an example of TECO code and you can kind of see, well you get an inkling why
102
00:03:25.150 --> 00:03:29.230
it wasn't Richard Stallman favorite language to put into
103
00:03:29.240 --> 00:03:33.960
the version of Emacs that he then started developing later.
104
00:03:34.240 --> 00:03:40.080
So the code looks fairly cryptic and you can see every single line kind of
requires a comment to explain what it is.
106
00:03:40.440 --> 00:03:45.440
So you can kind of see that it maybe would not scale so well to both to larger code bases
107
00:03:45.440 --> 00:03:49.930
and also to lots of people were interested in doing something with Emacs,
109
00:03:51.040 --> 00:03:54.660
So that explains why it's not TECO, but why is it Emacs Lisp?
110
00:03:56.140 --> 00:04:01.310
Well, Richard was working at MIT
112
00:04:01.320 --> 00:04:05.260
where Lisp was very popular in the in the lab where he was working.
113
00:04:05.260 --> 00:04:07.490
So he was very familiar with Lisp.
114
00:04:07.500 --> 00:04:09.500
He was using Lisp all the time.
115
00:04:09.510 --> 00:04:12.940
He was probably editing Lisp with TECO Emacs.
117
00:04:12.950 --> 00:04:13.860
Okay.
118
00:04:14.540 --> 00:04:15.970
But I think that was you know,
119
00:04:15.970 --> 00:04:18.950
there was the main the main reason for using it.
120
00:04:19.540 --> 00:04:24.060
It was the obvious choice and I think it is to this day it is his favorite language.
121
00:04:24.640 --> 00:04:25.450
Okay.
122
00:04:25.460 --> 00:04:26.500
But I guess,
123
00:04:26.510 --> 00:04:29.580
I mean Richard Stallman also founded the GNU project, right?
125
00:04:29.580 --> 00:04:33.030
And Emacs is kind of the founding piece of software of that project.
128
00:04:33.970 --> 00:04:38.040
So we all know that it's a very political and idealistic project.
129
00:04:38.040 --> 00:04:42.760
So can we can we draw a line from Emacs Lisp to the ideals of the GNU project?
130
00:04:43.740 --> 00:04:44.530
Yeah, I think so.
132
00:04:44.540 --> 00:04:49.170
I think Emacs Lisp really
133
00:04:49.180 --> 00:04:53.690
embodies some of the ideas he has, the idea of empowering the
134
00:04:53.690 --> 00:05:00.450
user and this is a driving line in in the design of Emacs and Emacs Lisp
136
00:05:01.140 --> 00:05:06.060
and also in his promotion of Free Software.
137
00:05:06.640 --> 00:05:12.250
So empowering the user I guess means not just being able to use the software
to its full ability,
139
00:05:12.640 --> 00:05:16.540
but also to be able to customize it and modify it.
140
00:05:16.550 --> 00:05:16.960
Right.
141
00:05:17.740 --> 00:05:18.050
Right.
142
00:05:18.060 --> 00:05:18.290
Yeah.
143
00:05:18.300 --> 00:05:22.290
If you think of the the ideals of Free Software and you have this,
144
00:05:22.300 --> 00:05:27.700
you know,
being allowed to read the code or
146
00:05:27.700 --> 00:05:30.130
study the code and modify the code,
147
00:05:30.130 --> 00:05:31.360
redistribute the code.
148
00:05:31.370 --> 00:05:33.170
This is all all nice.
149
00:05:33.170 --> 00:05:36.360
But for Richard this is actually not sufficient
150
00:05:37.040 --> 00:05:43.550
because you also want it to be fairly easy to do
in practice.
152
00:05:43.560 --> 00:05:48.120
So you also have kind of pragmatic aspect to it.
154
00:05:48.130 --> 00:05:48.850
Okay.
155
00:05:48.860 --> 00:05:51.040
So I guess, today,
158
00:05:51.040 --> 00:05:53.020
when we look at a programming language like Emacs Lisp,
160
00:05:53.220 --> 00:05:55.830
we think of it mainly as a programmers' language.
161
00:05:55.840 --> 00:05:56.260
Right?
162
00:05:56.270 --> 00:06:03.590
I think it wasn't until, you pointed this out to me - let me switch
165
00:06:03.590 --> 00:06:05.860
here to the documentation here.
166
00:06:05.870 --> 00:06:08.080
So you pointed out to me that, well,
168
00:06:08.080 --> 00:06:13.050
here's the introduction of Emacs Lisp as it sits in the Emacs editor and ships with the
169
00:06:13.050 --> 00:06:18.550
editor and says this is an introduction to programming Emacs Lisp for people
who are not programmers.
171
00:06:19.040 --> 00:06:23.910
and I never saw this all these years that I was using
172
00:06:23.920 --> 00:06:28.460
Emacs and XEmacs and that there was actually a fair amount of effort being made
173
00:06:28.470 --> 00:06:32.750
to make it accessible to non-programmers as well.
174
00:06:32.760 --> 00:06:33.100
Right?
175
00:06:33.110 --> 00:06:36.020
I think that's kind of gone out of fashion since then.
176
00:06:36.020 --> 00:06:36.290
Right.
177
00:06:36.290 --> 00:06:39.050
That that ordinary users would program.
178
00:06:39.540 --> 00:06:45.090
It's definitely not in fashion in the world of of Android and Facebook,
180
00:06:45.100 --> 00:06:48.960
you know, empowering the user is definitely not the goal.
182
00:06:49.340 --> 00:06:53.590
But back then it was and also, you know,
183
00:06:53.600 --> 00:06:57.010
he mentioned experience with having, you know,
185
00:06:57.020 --> 00:07:01.950
secretaries using Emacs, and secretaries who had no experience with programming,
186
00:07:01.960 --> 00:07:05.120
to make it clear, and using Emacs and writing
187
00:07:05.120 --> 00:07:09.360
little chunks of ELisp code to customize their editor for their particular use.
188
00:07:09.740 --> 00:07:10.140
That's right.
189
00:07:10.150 --> 00:07:14.960
I think that's always been a very important aspect to Richard.
193
00:07:16.980 --> 00:07:19.050
You know, if you can't program in Emacs Lisp yourself,
196
00:07:19.050 --> 00:07:20.720
you might get somebody else to do it, right,
199
00:07:21.260 --> 00:07:26.140
which is something that you can't do with software that isn't customizable or doesn't have
200
00:07:26.140 --> 00:07:29.260
its own programming language or extension language that comes with it.
201
00:07:29.740 --> 00:07:30.420
That's right.
205
00:07:32.670 --> 00:07:37.330
I work in a lot of sort of digital transformation projects and there I talk to the managers a lot.
206
00:07:37.340 --> 00:07:42.010
This idea that the users would be able to modify or to a larger degree customize the
207
00:07:42.010 --> 00:07:44.820
software is very alien to them.
210
00:07:45.980 --> 00:07:49.600
I wish we would get back to the ideals of Emacs
211
00:07:49.600 --> 00:07:51.550
and Emacs Lisp at some point.
212
00:07:51.840 --> 00:07:54.060
So I guess that's what we're going to talk about today.
213
00:07:55.440 --> 00:07:55.880
Okay.
214
00:07:55.880 --> 00:07:59.860
So I guess we should give a brief overview of what Emacs Lisp is,
215
00:07:59.870 --> 00:08:02.890
at least for the younger people who don't know Lisp in the audience.
216
00:08:02.890 --> 00:08:03.230
Right?
217
00:08:03.240 --> 00:08:07.790
So Emacs Lisp is a Lisp and that means it's instantly
218
00:08:07.790 --> 00:08:10.500
recognizable to anyone. By the syntax,
219
00:08:10.500 --> 00:08:10.700
right?
220
00:08:10.700 --> 00:08:13.840
The syntax works in that there's a lot of round parentheses,
221
00:08:13.840 --> 00:08:15.680
and also there's prefix notation.
222
00:08:15.690 --> 00:08:19.220
So if you want to add two numbers like 23 and 42,
223
00:08:19.220 --> 00:08:22.820
you write it like this .. open paren operator goes at the front,
224
00:08:22.820 --> 00:08:25.150
then the operations and then close paren.
225
00:08:25.540 --> 00:08:29.110
And you can see I'm typing that into the *scratch* buffer of XEmacs.
228
00:08:29.460 --> 00:08:33.780
And I can just push a button control-J and it will display the result of
229
00:08:33.789 --> 00:08:36.460
evaluating that expression.
230
00:08:36.940 --> 00:08:39.200
And you know, these parentheses,
232
00:08:39.200 --> 00:08:40.250
you can also nest them.
233
00:08:40.250 --> 00:08:41.990
So there's no precedence rules,
234
00:08:41.990 --> 00:08:44.280
like there are in a lot of other programming languages,
235
00:08:44.290 --> 00:08:49.090
and you have like the sum of 23 and the product of
236
00:08:49.090 --> 00:08:50.390
15 and 42.
237
00:08:50.390 --> 00:08:51.070
And again,
238
00:08:51.080 --> 00:08:56.040
I can press control-J and it will instantly display the result of evaluating that.
239
00:08:56.040 --> 00:09:00.460
A lot of people looking at this kind of get scared by all of these parentheses.
240
00:09:00.460 --> 00:09:03.700
But experienced Lisp programmers just look at the indentation.
241
00:09:03.700 --> 00:09:04.720
And in fact, you know,
243
00:09:04.720 --> 00:09:06.460
Emacs will automatically indent if I
244
00:09:06.460 --> 00:09:11.010
press a button, in a way that is pretty much standardized, and
245
00:09:11.020 --> 00:09:14.560
everybody adheres to that standard when they indent their program.
246
00:09:15.440 --> 00:09:17.840
All right, we could also do like a variable.
248
00:09:17.850 --> 00:09:21.050
So here's a variable, I don't know.
251
00:09:23.640 --> 00:09:28.640
Something like this. So here's pi. Right?
255
00:09:28.640 --> 00:09:30.170
And then I can just evaluate Pie.
256
00:09:30.170 --> 00:09:33.710
And it will give me the value that comes with it.
257
00:09:33.720 --> 00:09:35.660
And I could also write a function,
258
00:09:35.670 --> 00:09:35.920
you know,
259
00:09:35.920 --> 00:09:40.590
let me write a function that computes the circumference of a circle with a given radius
260
00:09:40.600 --> 00:09:44.410
might look like this. And again,
262
00:09:44.410 --> 00:09:47.570
I can evaluate that will define that function and then I can say,
263
00:09:47.570 --> 00:09:50.350
well, what's the circumference of a circle of radius 10?
265
00:09:50.540 --> 00:09:52.800
And it will display the result of that.
266
00:09:52.810 --> 00:09:56.570
So it's not just the fact that it's this programming language with parentheses,
267
00:09:56.570 --> 00:09:57.880
but also with Emacs,
268
00:09:57.880 --> 00:10:02.150
there's also instantly an interactive programming environment for it.
269
00:10:02.640 --> 00:10:07.510
Now you can also locally bind variables in
270
00:10:07.510 --> 00:10:10.730
Emacs Lisp with a construct called let. So you can do this,
271
00:10:10.740 --> 00:10:16.160
you know? And so 10 and 20 bound to
273
00:10:16.540 --> 00:10:18.520
variables X and Y.
274
00:10:18.530 --> 00:10:21.510
You could evaluate this and get a result.
275
00:10:21.510 --> 00:10:23.260
So that gives me local variables.
276
00:10:23.740 --> 00:10:29.320
And now here's something that I guess nowadays is pretty unique to
Emacs Lisp.
278
00:10:29.330 --> 00:10:35.040
You know, I could write a function called F that takes a parameter called X.
281
00:10:35.050 --> 00:10:37.760
And I could add X to Y.
282
00:10:37.770 --> 00:10:41.110
And now there's no visible binding for Y. Right?
284
00:10:41.120 --> 00:10:44.590
And of course if I kind of do F of 5.
286
00:10:44.590 --> 00:10:45.680
It will say, oh,
287
00:10:45.690 --> 00:10:46.870
symbol's variable is void,
289
00:10:46.880 --> 00:10:48.960
symbol's value as variable is void.
290
00:10:48.960 --> 00:10:50.560
Why? Y is not bound.
292
00:10:50.570 --> 00:10:54.510
But I can bind it using let. Right?
294
00:10:54.510 --> 00:10:56.060
So I can do this.
295
00:10:56.070 --> 00:11:00.870
I can bind Y to 7 and then I can call F of 5
296
00:11:00.880 --> 00:11:03.110
and it will give me the value 12.
297
00:11:03.110 --> 00:11:06.850
And this is a feature known as dynamic scoping.
298
00:11:07.340 --> 00:11:11.020
And you know every every piece of code that we've seen so far, actually,
300
00:11:11.030 --> 00:11:13.940
in Emacs Lisp could also be a MacLisp program.
301
00:11:13.940 --> 00:11:18.560
So MacLisp was one of the predecessors of Emacs Lisp, and was just a regular Lisp implementation that
302
00:11:18.560 --> 00:11:20.910
existed at the time. Right?
304
00:11:20.990 --> 00:11:26.920
So, so there's a strange thing is that the binding that we do with let
306
00:11:26.930 --> 00:11:29.170
works more like an assignment. Right?
308
00:11:29.180 --> 00:11:34.170
So, so when F refers to Y it doesn't refer to kind of lexically
310
00:11:34.180 --> 00:11:37.890
bound binding of of Y,
311
00:11:37.890 --> 00:11:41.050
but to the one that was done last at run time.
312
00:11:41.840 --> 00:11:46.150
So there's dynamic scoping and it seems just
313
00:11:46.160 --> 00:11:48.470
very unusual to do that. Right?
315
00:11:48.470 --> 00:11:53.060
Why? Why, Stefan, is there dynamic scoping in Emacs Lisp?
317
00:11:54.040 --> 00:11:55.860
Is that a feature or is it a bug?
319
00:11:57.240 --> 00:11:57.980
That is a feature.
320
00:11:58.080 --> 00:12:02.460
Okay, so can you show me something I can actually do with dynamic scoping?
323
00:12:03.680 --> 00:12:05.890
I can show you an example here.
324
00:12:05.900 --> 00:12:07.960
I'm switching to your Emacs.
325
00:12:08.640 --> 00:12:09.260
Yeah.
326
00:12:09.740 --> 00:12:12.080
See it's prettier than XEmacs.
328
00:12:15.140 --> 00:12:18.460
It's boringer than XEmacs, I can say that much.
330
00:12:19.040 --> 00:12:24.230
Okay, so here is an example of an Emacs Lisp package.
332
00:12:24.240 --> 00:12:25.390
Okay,
333
00:12:25.400 --> 00:12:30.230
it chose it somewhat randomly - I was just passing through the other day - and you can see
334
00:12:30.230 --> 00:12:34.560
it has a bunch of variable declarations and then a bunch of function declarations
335
00:12:35.140 --> 00:12:36.790
and I have it here folded
336
00:12:36.790 --> 00:12:38.970
so it doesn't overwhelm you with everything.
337
00:12:38.970 --> 00:12:40.970
But so here, for example,
339
00:12:40.970 --> 00:12:43.900
the isearch-mb--message function,
340
00:12:43.910 --> 00:12:44.890
it doesn't really matter
341
00:12:44.900 --> 00:12:49.770
what it's for, but you can see that the first thing you can see
342
00:12:49.770 --> 00:12:52.390
here is that it has a string at the beginning.
343
00:12:52.400 --> 00:12:53.260
Okay.
344
00:12:53.270 --> 00:12:55.970
And that's not what you were asking me.
345
00:12:55.970 --> 00:12:59.050
But since we see it, I just mentioned it.
347
00:12:59.440 --> 00:13:01.680
So that's a documentation string.
348
00:13:01.690 --> 00:13:03.220
That's a kind of, you know,
350
00:13:03.220 --> 00:13:06.460
ancestor to the JavaDoc style of programming.
351
00:13:06.940 --> 00:13:08.890
It was actually introduced by Richard Stallman,
352
00:13:08.890 --> 00:13:09.960
but not in Emacs Lisp.
353
00:13:10.640 --> 00:13:12.760
It was originally introduced in TECO.
354
00:13:13.440 --> 00:13:18.410
So he added it to TECO and then and then carried it to Emacs Lisp and from there
355
00:13:18.410 --> 00:13:20.180
it spread to other languages.
356
00:13:20.190 --> 00:13:23.490
Okay, so I guess that's another kind of facet of user empowerment.
358
00:13:23.490 --> 00:13:23.720
Right?
359
00:13:23.720 --> 00:13:27.960
That you can then easily look up that documentation and it kind of comes with the code.
360