summaryrefslogblamecommitdiffstats
path: root/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt
blob: 277f3dd12fbab6d6a8cb63d321aab5ec0875cbc2 (plain) (tree)
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019


























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                                         
WEBVTT


00:00:03.540 --> 00:00:03.939
[Speaker 0]: I would invite all on the,

00:00:04.600 --> 00:00:04.960
who are currently watching,

00:00:06.819 --> 00:00:07.200
who have questions, put them into the pad

00:00:08.940 --> 00:00:09.440
that I can ask them. I'm kind of monitoring

00:00:16.320 --> 00:00:16.720
the IRC concurrently. So the first question

00:00:18.640 --> 00:00:18.800
that we have on the pad is concerning why you

00:00:19.600 --> 00:00:20.100
have switched from OCaml.

00:00:22.420 --> 00:00:22.800
Maybe the person has missed it in the talk,

00:00:23.480 --> 00:00:23.980
if you've mentioned it.

00:00:25.080 --> 00:00:25.320
Why have you switched from OCaml to,

00:00:25.920 --> 00:00:26.180
in this case, I guess,

00:00:26.180 --> 00:00:26.680
Rust?

00:00:30.960 --> 00:00:31.080
[Speaker 1]: Yeah, I mentioned like with writing a

00:00:34.280 --> 00:00:34.440
language server that I wrote mine for my

00:00:36.900 --> 00:00:37.120
company in OCaml But I wouldn't recommend it

00:00:38.960 --> 00:00:39.220
just in general unless like you're doing

00:00:41.720 --> 00:00:42.040
something specific with OCaml And the reason

00:00:44.180 --> 00:00:44.340
for that and I recommended Rust or like

00:00:45.780 --> 00:00:46.100
TypeScript is like OCaml is great.

00:00:49.080 --> 00:00:49.360
It's very performant but it's cross

00:00:50.739 --> 00:00:51.100
compilation story is not great.

00:00:54.100 --> 00:00:54.340
It's like really hard to cross compile like

00:00:55.840 --> 00:00:56.320
from 1 platform to another.

00:00:58.120 --> 00:00:58.540
And then like the ecosystem and its standard

00:01:00.380 --> 00:01:00.880
library is also not great.

00:01:03.460 --> 00:01:03.640
And like Rust, its cross compilation is

00:01:05.820 --> 00:01:06.320
great. Its ecosystem is great.

00:01:08.720 --> 00:01:09.060
OCaml is great if you need to use it,

00:01:10.880 --> 00:01:11.380
but it's just it's not ideal.

00:01:14.220 --> 00:01:14.340
And there's just also no good examples of a

00:01:15.240 --> 00:01:15.740
language server in OCaml.

00:01:19.119 --> 00:01:19.619
There's the official like OCaml language

00:01:22.920 --> 00:01:23.420
server, But they use a ton of super advanced

00:01:27.380 --> 00:01:27.540
language features, like module functors and a

00:01:28.440 --> 00:01:28.700
bunch of other random stuff.

00:01:29.479 --> 00:01:29.979
So it's not really readable.

00:01:31.860 --> 00:01:32.300
But Rust, there's Rust analyzer,

00:01:33.340 --> 00:01:33.780
which is readable. In TypeScript,

00:01:34.860 --> 00:01:35.360
there's like a million different ones.

00:01:39.340 --> 00:01:39.660
So it's less of a, not OCaml is like,

00:01:40.920 --> 00:01:41.280
it's not that OCaml isn't great.

00:01:43.320 --> 00:01:43.440
It's more of a, these other languages would

00:01:44.160 --> 00:01:44.660
probably just be easier.

00:01:45.280 --> 00:01:45.780
So.

00:01:48.619 --> 00:01:48.920
[Speaker 0]: I guess since the integration to,

00:01:50.820 --> 00:01:51.000
for example, like NeoVim or some other

00:01:53.320 --> 00:01:53.460
editors are just revenue fine because of the

00:01:56.920 --> 00:01:57.420
[Speaker 1]: Sorry, can you say that again?

00:01:58.580 --> 00:01:59.080
[Speaker 0]: LSP, I guess. The LSP,

00:02:01.979 --> 00:02:02.100
so it's a standard LSP specification that

00:02:03.080 --> 00:02:03.400
you're using. So you can also,

00:02:04.920 --> 00:02:05.340
for instance, use it and other editors,

00:02:06.660 --> 00:02:07.160
like for instance, new them or so.

00:02:08.680 --> 00:02:08.940
[Speaker 1]: Yeah. Yeah. You can use it.

00:02:11.680 --> 00:02:11.920
It's most, most editors nowadays support it.

00:02:13.280 --> 00:02:13.780
Like obviously Emacs, NeoVim,

00:02:16.420 --> 00:02:16.840
Sublime, VS code, Intel,

00:02:17.700 --> 00:02:18.200
all the IntelliJ ones.

00:02:21.560 --> 00:02:21.960
So yeah, that's, that's the fun part.

00:02:23.440 --> 00:02:23.760
You don't have to write 10 different

00:02:26.500 --> 00:02:27.000
languages to get a bunch of editor support.

00:02:30.200 --> 00:02:30.300
[Speaker 0]: Also experience writing it.

00:02:33.820 --> 00:02:34.040
So I didn't have really time to hear into

00:02:36.300 --> 00:02:36.560
your talk. So I'm sorry if I ask you

00:02:38.100 --> 00:02:38.600
questions that you have already said.

00:02:41.400 --> 00:02:41.900
How was the experience of writing an LSP?

00:02:44.340 --> 00:02:44.480
So have you any knowledge beforehand or do

00:02:45.600 --> 00:02:46.100
you just read it all on yourself?

00:02:49.200 --> 00:02:49.700
[Speaker 1]: Yeah, there's not a ton of documentation,

00:02:53.440 --> 00:02:53.940
which is what motivated me to do this talk.

00:02:56.380 --> 00:02:56.580
Basically, I just looked at the

00:02:58.820 --> 00:02:58.980
specification, and I knew Rust Analyzer was

00:03:00.240 --> 00:03:00.740
cool. And so I looked at Rust Analyzer,

00:03:01.600 --> 00:03:02.100
and I looked at PyRite.

00:03:04.200 --> 00:03:04.700
And I just went from there.

00:03:07.920 --> 00:03:08.420
I found out about all this because I already

00:03:10.240 --> 00:03:10.440
using Emacs, I already knew about it.

00:03:12.160 --> 00:03:12.660
I was like, this is going to be easier than

00:03:15.020 --> 00:03:15.480
something else. So yeah,

00:03:17.720 --> 00:03:18.220
there's the experience is fine.

00:03:21.060 --> 00:03:21.300
It's just a lot of wiring stuff up.

00:03:24.100 --> 00:03:24.320
It's not a lot of like hard thinking until

00:03:26.200 --> 00:03:26.700
you get to like performance heavy stuff.

00:03:27.740 --> 00:03:28.080
Like, so for some graph,

00:03:30.760 --> 00:03:31.260
like we're doing a ton of like code parsing

00:03:32.980 --> 00:03:33.480
and like analyzing. And so that's,

00:03:35.760 --> 00:03:36.260
it takes up like a ton of processing power.

00:03:37.280 --> 00:03:37.600
So like for stuff like that,

00:03:39.620 --> 00:03:39.840
like now you have to think about caching and

00:03:43.980 --> 00:03:44.380
like ordering things. So that part's hard,

00:03:47.180 --> 00:03:47.420
but that's more of a, like very much

00:03:48.640 --> 00:03:49.140
application specific thing.

00:03:58.320 --> 00:03:58.620
[Speaker 0]: Right. Anything in the IRC chat.

00:04:01.840 --> 00:04:02.340
I think not. It's nothing I can see.

00:04:13.380 --> 00:04:13.520
No questions, that's kind of odd to be

00:04:17.440 --> 00:04:17.860
honest. I cannot really ask questions

00:04:18.680 --> 00:04:19.180
concerning LSP specific.

00:04:22.400 --> 00:04:22.900
[Speaker 1]: Yeah, no worries.

00:04:31.460 --> 00:04:31.960
[Speaker 0]: Good question, what could be asked?

00:04:35.740 --> 00:04:36.140
Let's call, let's ask something very

00:04:38.260 --> 00:04:38.680
unspecific concerning the Emacs usage.

00:04:39.340 --> 00:04:39.760
And when have you started?

00:04:41.580 --> 00:04:41.780
How did you came through it and stuff like

00:04:41.780 --> 00:04:42.280
this?

00:04:46.560 --> 00:04:46.960
[Speaker 1]: Yeah. I like and when I was in high school,

00:04:48.480 --> 00:04:48.980
me and my friends just were like,

00:04:51.820 --> 00:04:52.320
got obsessed with Linux for whatever reason.

00:04:53.940 --> 00:04:54.140
And then like we traveled down like the,

00:04:55.560 --> 00:04:56.060
like the free software,

00:04:57.700 --> 00:04:57.940
like we just thought that was like very

00:05:00.040 --> 00:05:00.160
entertaining and like interesting to read

00:05:01.200 --> 00:05:01.700
about all the free software stuff.

00:05:03.120 --> 00:05:03.480
They were like, yeah, that's cool.

00:05:04.540 --> 00:05:05.040
And so we all started using Linux.

00:05:06.960 --> 00:05:07.200
And I'm like, well, if I'm using free

00:05:08.300 --> 00:05:08.740
software, I'm going to use Emacs.

00:05:12.280 --> 00:05:12.440
And so I started using Emacs just to try it

00:05:13.940 --> 00:05:14.440
out. And then I kind of got,

00:05:16.880 --> 00:05:17.380
I feel like, Stockholm syndrome into it.

00:05:18.720 --> 00:05:19.220
And now I've realized like,

00:05:21.860 --> 00:05:22.360
I don't know, now that I've done the like

00:05:23.880 --> 00:05:24.340
actual work to get into Emacs,

00:05:26.280 --> 00:05:26.480
it's just, there's so much more I can do with

00:05:30.300 --> 00:05:30.800
it. But yeah, it was somewhat unintentional.

00:05:36.100 --> 00:05:36.420
[Speaker 0]: I probably have the same course I've started

00:05:37.780 --> 00:05:38.280
like 2 years ago using Emacs.

00:05:42.720 --> 00:05:42.940
And also just, oh, there's at first some cool

00:05:45.020 --> 00:05:45.340
people on YouTube, so systems crafters and

00:05:46.300 --> 00:05:46.800
people like this. And also,

00:05:49.440 --> 00:05:49.740
ah, VS Code, I used a lot of VS Code

00:05:53.560 --> 00:05:53.860
beforehand and then VS Codium because open

00:05:55.640 --> 00:05:55.860
source and then oh are there any other

00:05:58.020 --> 00:05:58.180
alternatives and I came to like Neovim and

00:06:01.160 --> 00:06:01.440
Emacs and often switching around but I stick

00:06:03.220 --> 00:06:03.720
to Emacs at some point to be honest.

00:06:07.180 --> 00:06:07.540
[Speaker 1]: Yeah, I think Emacs also just looks really

00:06:08.500 --> 00:06:09.000
cool. I will say that.

00:06:14.240 --> 00:06:14.640
And also just like I like Vim.

00:06:16.960 --> 00:06:17.240
Vim is cool but like being able to like write

00:06:19.240 --> 00:06:19.540
lists and like modify your editor on the fly

00:06:20.920 --> 00:06:21.420
is just like very appealing to me.

00:06:23.860 --> 00:06:24.140
I don't know, Emacs was tough at first

00:06:25.520 --> 00:06:25.680
because like all the like default key

00:06:28.380 --> 00:06:28.440
bindings are just kind of like and then and

00:06:29.860 --> 00:06:30.040
then I read somewhere someone was like yeah

00:06:33.220 --> 00:06:33.460
well Richard Stallman uses evil mode so it's

00:06:36.220 --> 00:06:36.460
okay. I was like alright I can that's like

00:06:38.000 --> 00:06:38.200
blessing enough for me Like I'm just gonna

00:06:39.520 --> 00:06:39.720
switch to evil mode. And I was like,

00:06:42.160 --> 00:06:42.360
this is way, way better as far as key

00:06:42.920 --> 00:06:43.420
bindings go.

00:06:46.720 --> 00:06:47.020
[Speaker 0]: Kind of relates. So I switched for,

00:06:49.900 --> 00:06:50.040
I think, half a year to the default key

00:06:51.300 --> 00:06:51.800
bindings from Vim beforehand.

00:06:54.960 --> 00:06:55.240
I switched back to Evil and now I'm losing

00:06:56.100 --> 00:06:56.600
some kind of hybrid styles.

00:07:01.000 --> 00:07:01.120
It's kind of weird. But we have a question on

00:07:03.260 --> 00:07:03.700
the pad. So what are the corner cases,

00:07:05.380 --> 00:07:05.880
limitations, and other issues you encountered

00:07:08.860 --> 00:07:09.020
in implementing an LSP server with client in

00:07:09.940 --> 00:07:10.440
Emacs that were surprising?

00:07:13.680 --> 00:07:13.860
[Speaker 1]: Yeah, I would say the corner cases and

00:07:15.280 --> 00:07:15.780
limitations are definitely like,

00:07:16.960 --> 00:07:17.220
once again, they're going to be very

00:07:18.960 --> 00:07:19.160
application specific, but it's usually just

00:07:22.420 --> 00:07:22.680
the performance part. So like I was saying

00:07:24.680 --> 00:07:24.900
before, right, in general if you're doing

00:07:26.120 --> 00:07:26.620
language tooling, you're gonna be doing

00:07:29.760 --> 00:07:30.080
either parsing or interpreting or something

00:07:31.560 --> 00:07:31.880
like that, which is very just like

00:07:34.740 --> 00:07:35.080
computationally heavy and so if you're trying

00:07:36.900 --> 00:07:37.060
to like do that stuff while someone is

00:07:38.520 --> 00:07:39.000
editing a file right like every keystrokes

00:07:42.660 --> 00:07:42.840
every like 1 to 2 seconds if they have a fast

00:07:44.240 --> 00:07:44.540
computer that's great but a lot of people

00:07:46.400 --> 00:07:46.560
don't have like that fast of a computer that

00:07:49.480 --> 00:07:49.740
they can go and like do compilation every

00:07:51.680 --> 00:07:52.180
single keystroke. So like,

00:07:54.080 --> 00:07:54.580
I would say, I would say the like limitation

00:07:56.920 --> 00:07:57.080
is just how fast your computer is and how

00:07:59.140 --> 00:07:59.340
good you are at like implementing caching for

00:08:01.020 --> 00:08:01.520
like whatever you're doing.

00:08:04.080 --> 00:08:04.280
That's also just the main issues I've run

00:08:08.080 --> 00:08:08.580
into is just it's a constant uphill battle.

00:08:12.120 --> 00:08:12.560
People will somehow find larger and larger

00:08:14.580 --> 00:08:15.080
files. You'll end up with files that are like

00:08:17.320 --> 00:08:17.680
thousands, like tens of thousands of lines

00:08:18.700 --> 00:08:18.940
long and you think yeah,

00:08:21.340 --> 00:08:21.840
surely no 1 would expect like instantaneous

00:08:25.440 --> 00:08:25.640
response for like like editing a file that

00:08:26.820 --> 00:08:27.040
has like tens of thousands of lines,

00:08:30.000 --> 00:08:30.180
but then they do. As far as corner cases go,

00:08:31.960 --> 00:08:32.459
I would say the corner case is like,

00:08:37.760 --> 00:08:37.919
just in general is actually distributing the

00:08:41.039 --> 00:08:41.200
language server. Cause like writing the

00:08:42.340 --> 00:08:42.840
language server is fine.

00:08:44.540 --> 00:08:44.900
Like wiring everything up is fine.

00:08:47.180 --> 00:08:47.300
But then like, once you actually have to go

00:08:47.960 --> 00:08:48.120
and distribute it, well,

00:08:49.200 --> 00:08:49.700
now you're distributing in a binary.

00:08:51.660 --> 00:08:52.160
Like I was saying before with OCaml,

00:08:53.940 --> 00:08:54.440
doesn't have great cross compilation.

00:08:58.840 --> 00:08:59.340
So for some graph for our language server,

00:09:01.560 --> 00:09:02.060
we target Linux and Mac OS,

00:09:03.840 --> 00:09:04.340
and we have a ton of people who use Windows,

00:09:06.960 --> 00:09:07.440
but compiling OCaml for Windows is basically

00:09:10.080 --> 00:09:10.440
impossible. So our corner case there,

00:09:11.980 --> 00:09:12.480
the way we solved it was now we're

00:09:14.160 --> 00:09:14.660
transpiling OCaml to JavaScript,

00:09:17.080 --> 00:09:17.560
which is a huge can of worms.

00:09:18.840 --> 00:09:19.040
Like it's a lot of fun.

00:09:19.400 --> 00:09:19.900
It's very interesting,

00:09:22.860 --> 00:09:23.360
but like it's not ideal.

00:09:24.340 --> 00:09:24.720
And so that's what I was saying before.

00:09:26.360 --> 00:09:26.580
I recommend like Rust or TypeScript because

00:09:29.580 --> 00:09:29.820
those are way more portable and a lot easier

00:09:31.280 --> 00:09:31.780
to install. And you don't have to worry about

00:09:33.600 --> 00:09:34.100
any of that weird packaging stuff.

00:09:37.600 --> 00:09:38.080
So yeah, I would say that's like the main

00:09:40.260 --> 00:09:40.760
corner case and the main limitation is just

00:09:41.720 --> 00:09:42.220
speed and caching.

00:09:47.160 --> 00:09:47.640
[Speaker 0]: You mentioned this obscure large file so

00:09:49.000 --> 00:09:49.160
someone doesn't want to refactor or

00:09:51.760 --> 00:09:52.200
something. How did you start?

00:09:54.480 --> 00:09:54.620
So did you have any way to still be

00:09:56.320 --> 00:09:56.580
relatively performant when they have big

00:09:58.020 --> 00:09:58.520
files or is it just not supported?

00:09:58.920 --> 00:09:59.420
I don't care.

00:10:03.140 --> 00:10:03.640
[Speaker 1]: Yeah, no, we, so we support larger files now

00:10:05.460 --> 00:10:05.960
And the way we ended up doing that,

00:10:11.480 --> 00:10:11.980
so SemGrep is like you write this generic

00:10:14.540 --> 00:10:14.900
pattern. You kind of write the language,

00:10:17.160 --> 00:10:17.320
but then there's these other symbols and

00:10:18.760 --> 00:10:19.160
stuff that are included in that,

00:10:19.760 --> 00:10:20.260
this like meta language.

00:10:22.420 --> 00:10:22.580
And so what happens is,

00:10:23.600 --> 00:10:24.100
is most languages get,

00:10:27.720 --> 00:10:27.900
they get parsed and then into a syntax tree,

00:10:29.180 --> 00:10:29.600
right? Like whatever the language is syntax

00:10:30.620 --> 00:10:31.120
tree is, and then they get,

00:10:33.800 --> 00:10:34.000
the syntax tree gets converted into this,

00:10:35.860 --> 00:10:36.360
like, we call it like an abstract syntax

00:10:38.080 --> 00:10:38.300
tree, which is like abstract from like any,

00:10:39.860 --> 00:10:40.360
like languages specific syntax tree.

00:10:41.940 --> 00:10:42.380
And so then we can cache that,

00:10:44.480 --> 00:10:44.760
which is really good because like if someone

00:10:47.700 --> 00:10:47.920
types something like we don't have to go

00:10:50.280 --> 00:10:50.440
through and do like the full parsing and like

00:10:51.560 --> 00:10:51.760
converting, we only have to do it

00:10:54.960 --> 00:10:55.200
incrementally. And so that's,

00:10:56.100 --> 00:10:56.420
that's how we dealt with that.

00:10:58.140 --> 00:10:58.640
Or the other option is that we just,

00:11:00.720 --> 00:11:01.180
we just cache whatever the previous results

00:11:03.460 --> 00:11:03.960
are, and then run it asynchronously,

00:11:04.960 --> 00:11:05.460
and they might get it delayed.

00:11:08.200 --> 00:11:08.700
But we've ended up doing more AST caching,

00:11:09.880 --> 00:11:10.380
which is fun and cool.

00:11:15.600 --> 00:11:15.900
[Speaker 0]: Sounds good. So we have here a question from

00:11:18.240 --> 00:11:18.540
Blaine. If Eaglet is a subset of LSP mode,

00:11:21.680 --> 00:11:21.840
can EGLOT conflict with LSP mode if both are

00:11:23.400 --> 00:11:23.900
present in your initial .el

00:11:24.280 --> 00:11:24.780
file?

00:11:27.740 --> 00:11:28.240
[Speaker 1]: Yeah, so I haven't played around with EGLOT

00:11:30.580 --> 00:11:30.960
mode a ton, so I'm not 100% sure.

00:11:33.920 --> 00:11:34.420
I think all of the key bindings and commands,

00:11:36.320 --> 00:11:36.820
if you just install it out of the box,

00:11:39.020 --> 00:11:39.520
I Think they're different.

00:11:41.440 --> 00:11:41.840
So I don't think there's like any like

00:11:44.760 --> 00:11:45.040
overlap as far as that stuff goes but you

00:11:47.520 --> 00:11:47.900
will have the overlap of like you entered,

00:11:49.780 --> 00:11:49.960
like you started a major mode for like some

00:11:51.500 --> 00:11:51.720
language, like they'll both probably start

00:11:53.040 --> 00:11:53.540
the language server and provide diagnostics

00:11:55.320 --> 00:11:55.580
and everything. And so then now you're

00:11:58.180 --> 00:11:58.320
getting like, you're just like doubling the

00:11:59.340 --> 00:11:59.680
work your computer is doing.

00:12:00.480 --> 00:12:00.980
So there's that conflict.

00:12:04.160 --> 00:12:04.360
But if you prefer EGLOT mode or LSP mode for

00:12:05.200 --> 00:12:05.700
like 1 language or framework,

00:12:09.060 --> 00:12:09.440
like 1 major mode and LSP mode for the other,

00:12:10.600 --> 00:12:11.100
I think you should be fine.

00:12:14.680 --> 00:12:14.860
[Speaker 0]: All right. Just to let you know,

00:12:20.460 --> 00:12:20.640
we have like 1 minute on the stream and then

00:12:22.540 --> 00:12:23.040
we'll switch back and to the pre-recorded

00:12:24.000 --> 00:12:24.500
stuff I guess.

00:12:27.440 --> 00:12:27.740
[Speaker 2]: Yeah yeah yeah let's hi sorry for the rude

00:12:29.440 --> 00:12:29.620
interruption but I'm just doing a little bit

00:12:31.700 --> 00:12:32.060
of time keeping so thank you so much Austin

00:12:34.340 --> 00:12:34.540
sadly I wasn't able to follow the Q&A because

00:12:36.280 --> 00:12:36.780
I was in the other track answering questions.

00:12:39.960 --> 00:12:40.360
If, Austin, you want to stay and answer some

00:12:41.580 --> 00:12:42.080
more questions, feel free to do so.

00:12:45.920 --> 00:12:46.220
People tend to start talking as soon as we go

00:12:48.400 --> 00:12:48.740
off air, And I wouldn't be surprised with LSP

00:12:49.540 --> 00:12:50.040
that people would do the same.

00:12:52.800 --> 00:12:53.040
We're gonna move on for this track.

00:12:54.840 --> 00:12:55.040
We're gonna move on in 20 seconds to the next

00:12:56.920 --> 00:12:57.420
1. So Floey, thank you for hosting.

00:12:58.680 --> 00:12:59.180
Austin, thank you for all your answers.

00:13:01.460 --> 00:13:01.960
And We'll see you in a bit.

00:13:04.740 --> 00:13:05.140
[Speaker 1]: Cool. Thanks. See you.

00:13:06.700 --> 00:13:07.200
[Speaker 0]: Thanks for the Q&A.

00:13:10.120 --> 00:13:10.440
[Speaker 2]: All right. All right. You are now off air.

00:13:11.400 --> 00:13:11.720
Thank you so much, Austin.

00:13:13.100 --> 00:13:13.200
I'm going to go back running in the

00:13:13.940 --> 00:13:14.100
background. And thank you,

00:13:14.700 --> 00:13:15.200
Flowey, for everything.

00:13:20.900 --> 00:13:21.400
[Speaker 0]: And thanks. Yeah. Have a nice,

00:13:23.160 --> 00:13:23.660
probably a nice day at your work.

00:13:24.140 --> 00:13:24.240
[Speaker 1]: Yeah, no worries. Yeah.

00:13:26.380 --> 00:13:26.680
Yeah, it's still it's like lunchtime for me.

00:13:28.100 --> 00:13:28.600
[Speaker 0]: So okay, here, it's like,

00:13:34.380 --> 00:13:34.700
09:00. 9pm. Thanks for the talk.

00:13:36.300 --> 00:13:36.600
Sorry for the inconvenience was not having

00:13:37.540 --> 00:13:38.040
any, any questions, really.

00:13:39.000 --> 00:13:39.380
[Speaker 1]: So yeah. Oh yeah, no worries.

00:13:41.100 --> 00:13:41.280
It's like, there's like no documentation on

00:13:42.940 --> 00:13:43.380
any of this stuff. So I didn't really expect

00:13:43.380 --> 00:13:43.880
any.

00:13:47.220 --> 00:13:47.560
[Speaker 0]: Yeah, I was kind of interested when I jumped

00:13:51.000 --> 00:13:51.140
into NeoVim. I write it 1 or 2 things on my

00:13:53.140 --> 00:13:53.320
own, but never really got really deep into

00:13:54.520 --> 00:13:54.960
it. And you're gonna see with like compiler

00:13:55.920 --> 00:13:56.140
design and stuff like this,

00:13:57.400 --> 00:13:57.900
but not really specific.

00:13:58.320 --> 00:13:58.820
So I was

00:14:00.860 --> 00:14:01.240
[Speaker 1]: kind of- Yeah, that's the hard part.

00:14:02.440 --> 00:14:02.880
It's like, it's, LSP is cool,

00:14:05.020 --> 00:14:05.200
but then you have to like deal with all the

00:14:06.760 --> 00:14:07.200
like compiler stuff and programming language

00:14:07.200 --> 00:14:07.700
theory.

00:14:10.600 --> 00:14:10.800
[Speaker 0]: So yeah. So it's, it shouldn't be too

00:14:13.280 --> 00:14:13.660
complicated. I had not really a question,

00:14:14.700 --> 00:14:15.140
so, but it worked out fine.

00:14:16.500 --> 00:14:17.000
Thanks for the Q and A.

00:14:18.560 --> 00:14:19.060
And if I have any questions to Oak Hamill,

00:14:20.640 --> 00:14:21.140
Elderspeak will get an email from you.

00:14:21.560 --> 00:14:22.060
[Speaker 1]: Oh yeah, definitely.

00:14:23.500 --> 00:14:24.000
[Speaker 0]: Dan?