summaryrefslogtreecommitdiffstats
path: root/2021/captions/structural.md
blob: 5ec3bf26cd07a93591bc217c8317fb105f218366 (plain) (blame)
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
<a name="transcript"></a>
# Transcript

[[!template text="Hi. My name is Ethan," start="00:00:00.080" video="mainVideo" id=subtitle]]
[[!template text="and today I'm going to be speaking" start="00:00:01.360" video="mainVideo" id=subtitle]]
[[!template text="about tree-edit, which is a package" start="00:00:02.320" video="mainVideo" id=subtitle]]
[[!template text="which aims to bring structural editing" start="00:00:04.240" video="mainVideo" id=subtitle]]
[[!template text="to everyday languages." start="00:00:06.160" video="mainVideo" id=subtitle]]
[[!template text="So what is structural editing?" start="00:00:08.320" video="mainVideo" id=subtitle]]
[[!template text="The way that we typically" start="00:00:10.559" video="mainVideo" id=subtitle]]
[[!template text="write code today" start="00:00:11.657" video="mainVideo" id=subtitle]]
[[!template text="is working with characters, words," start="00:00:12.578" video="mainVideo" id=subtitle]]
[[!template text="lines, paragraphs, and so on," start="00:00:14.480" video="mainVideo" id=subtitle]]
[[!template text="and these objects have no real relation" start="00:00:16.206" video="mainVideo" id=subtitle]]
[[!template text="to the structure of programming languages." start="00:00:18.600" video="mainVideo" id=subtitle]]
[[!template text="In contrast, tree-edit's editing operations" start="00:00:21.520" video="mainVideo" id=subtitle]]
[[!template text="map exactly to the structure" start="00:00:24.667" video="mainVideo" id=subtitle]]
[[!template text="of the programming language," start="00:00:26.897" video="mainVideo" id=subtitle]]
[[!template text="which is typically in a tree form" start="00:00:28.411" video="mainVideo" id=subtitle]]
[[!template text="with different types of nodes" start="00:00:30.303" video="mainVideo" id=subtitle]]
[[!template text="such as identifiers, expressions," start="00:00:32.053" video="mainVideo" id=subtitle]]
[[!template text="and statements. Using this structure" start="00:00:33.920" video="mainVideo" id=subtitle]]
[[!template text="can enable much more powerful" start="00:00:35.957" video="mainVideo" id=subtitle]]
[[!template text="editing operations," start="00:00:37.548" video="mainVideo" id=subtitle]]
[[!template text="and crucially editing operations" start="00:00:39.200" video="mainVideo" id=subtitle]]
[[!template text="that map much more closely" start="00:00:40.769" video="mainVideo" id=subtitle]]
[[!template text="to the way that we think about code." start="00:00:42.081" video="mainVideo" id=subtitle]]
[[!template text="tree-edit was inspired by" start="00:00:44.960" video="mainVideo" id=subtitle]]
[[!template text="paredit and lispy," start="00:00:46.140" video="mainVideo" id=subtitle]]
[[!template text="which are two great" start="00:00:47.386" video="mainVideo" id=subtitle]]
[[!template text="Lisp structural editors." start="00:00:48.320" video="mainVideo" id=subtitle]]
[[!template text="However, what makes tree-edit unique" start="00:00:50.271" video="mainVideo" id=subtitle]]
[[!template text="is that it can work with many languages," start="00:00:52.383" video="mainVideo" id=subtitle]]
[[!template text="such as some of the" start="00:00:54.480" video="mainVideo" id=subtitle]]
[[!template text="more mainstream languages like C, Java," start="00:00:55.759" video="mainVideo" id=subtitle]]
[[!template text="Python, and so on." start="00:00:59.826" video="mainVideo" id=subtitle]]
[[!template text="So now I'm going to show off tree-edit" start="00:01:01.600" video="mainVideo" id=subtitle]]
[[!template text="in action, working with a Java program." start="00:01:03.273" video="mainVideo" id=subtitle]]
[[!template text="So we can see on the left," start="00:01:05.705" video="mainVideo" id=subtitle]]
[[!template text="we have a syntax tree," start="00:01:07.237" video="mainVideo" id=subtitle]]
[[!template text="and the node in bold is what I call" start="00:01:09.119" video="mainVideo" id=subtitle]]
[[!template text="the current node. So instead of" start="00:01:11.560" video="mainVideo" id=subtitle]]
[[!template text="the concept of a cursor," start="00:01:13.780" video="mainVideo" id=subtitle]]
[[!template text="where we have a point in 2D space," start="00:01:15.100" video="mainVideo" id=subtitle]]
[[!template text="we instead work with a current node" start="00:01:17.600" video="mainVideo" id=subtitle]]
[[!template text="which all our editing operations" start="00:01:20.285" video="mainVideo" id=subtitle]]
[[!template text="take place upon." start="00:01:22.729" video="mainVideo" id=subtitle]]
[[!template text="So we can move up and down," start="00:01:23.840" video="mainVideo" id=subtitle]]
[[!template text="or rather side to side," start="00:01:26.479" video="mainVideo" id=subtitle]]
[[!template text="move inwards down to the children" start="00:01:28.720" video="mainVideo" id=subtitle]]
[[!template text="of the tree, back up to the parents." start="00:01:31.160" video="mainVideo" id=subtitle]]
[[!template text="We can also jump to a node by its type." start="00:01:33.920" video="mainVideo" id=subtitle]]
[[!template text="So we're going to jump to" start="00:01:36.799" video="mainVideo" id=subtitle]]
[[!template text="a variable declaration." start="00:01:38.768" video="mainVideo" id=subtitle]]
[[!template text="We can jump to an if statement." start="00:01:40.880" video="mainVideo" id=subtitle]]
[[!template text="And as you might have noticed," start="00:01:44.399" video="mainVideo" id=subtitle]]
[[!template text="tree-edit by default" start="00:01:46.880" video="mainVideo" id=subtitle]]
[[!template text="uses a vim-style mode of editing," start="00:01:48.360" video="mainVideo" id=subtitle]]
[[!template text="so it's a verb, which would be jump," start="00:01:51.337" video="mainVideo" id=subtitle]]
[[!template text="and then a type," start="00:01:55.119" video="mainVideo" id=subtitle]]
[[!template text="which would be if statement." start="00:01:56.874" video="mainVideo" id=subtitle]]
[[!template text="So now I'll show off" start="00:02:00.799" video="mainVideo" id=subtitle]]
[[!template text="the syntax tree modification in action." start="00:02:03.346" video="mainVideo" id=subtitle]]
[[!template text="So if I delete this deleteme node," start="00:02:06.144" video="mainVideo" id=subtitle]]
[[!template text="we can see the node is deleted," start="00:02:08.000" video="mainVideo" id=subtitle]]
[[!template text="and also the comma is removed" start="00:02:10.112" video="mainVideo" id=subtitle]]
[[!template text="since it's no longer needed." start="00:02:12.049" video="mainVideo" id=subtitle]]
[[!template text="We can add some nodes back in." start="00:02:13.920" video="mainVideo" id=subtitle]]
[[!template text="Here we just have a placeholder node" start="00:02:16.720" video="mainVideo" id=subtitle]]
[[!template text="called tree, which we can swap out" start="00:02:18.160" video="mainVideo" id=subtitle]]
[[!template text="with whatever we like." start="00:02:20.391" video="mainVideo" id=subtitle]]
[[!template text="So if we want to put in, for example," start="00:02:21.875" video="mainVideo" id=subtitle]]
[[!template text="a plus or minus operator," start="00:02:24.560" video="mainVideo" id=subtitle]]
[[!template text="it'll put these two TREE things here" start="00:02:29.280" video="mainVideo" id=subtitle]]
[[!template text="since there needs to be something there," start="00:02:30.879" video="mainVideo" id=subtitle]]
[[!template text="but we can go fill them out as we like." start="00:02:32.634" video="mainVideo" id=subtitle]]
[[!template text="So that's what that is." start="00:02:37.360" video="mainVideo" id=subtitle]]
[[!template text="Then I'll delete these again." start="00:02:38.595" video="mainVideo" id=subtitle]]
[[!template text="Next we can see raising." start="00:02:41.920" video="mainVideo" id=subtitle]]
[[!template text="So if I raise reader," start="00:02:43.709" video="mainVideo" id=subtitle]]
[[!template text="then it will replace" start="00:02:45.280" video="mainVideo" id=subtitle]]
[[!template text="the outer function call" start="00:02:46.160" video="mainVideo" id=subtitle]]
[[!template text="with the node itself." start="00:02:47.342" video="mainVideo" id=subtitle]]
[[!template text="I could raise it again." start="00:02:48.583" video="mainVideo" id=subtitle]]
[[!template text="The opposite operation to that" start="00:02:50.948" video="mainVideo" id=subtitle]]
[[!template text="is wrapping. So I can wrap reader" start="00:02:53.363" video="mainVideo" id=subtitle]]
[[!template text="back into function call," start="00:02:57.200" video="mainVideo" id=subtitle]]
[[!template text="and I could wrap this again" start="00:02:59.519" video="mainVideo" id=subtitle]]
[[!template text="if I wanted to. So that is wrapping." start="00:03:03.009" video="mainVideo" id=subtitle]]
[[!template text="We can also do it on a statement level," start="00:03:08.480" video="mainVideo" id=subtitle]]
[[!template text="so if I want to wrap this" start="00:03:12.640" video="mainVideo" id=subtitle]]
[[!template text="in an if statement," start="00:03:13.760" video="mainVideo" id=subtitle]]
[[!template text="I can wrap the statement," start="00:03:14.480" video="mainVideo" id=subtitle]]
[[!template text="and there we go." start="00:03:17.034" video="mainVideo" id=subtitle]]
[[!template text="And let's just raise it back up," start="00:03:18.400" video="mainVideo" id=subtitle]]
[[!template text="raise it again." start="00:03:21.280" video="mainVideo" id=subtitle]]
[[!template text="There we go. Finally, I'll show off" start="00:03:23.200" video="mainVideo" id=subtitle]]
[[!template text="slurping and barfing," start="00:03:26.959" video="mainVideo" id=subtitle]]
[[!template text="which... a little bit gross words," start="00:03:28.720" video="mainVideo" id=subtitle]]
[[!template text="but I think it accurately describes" start="00:03:32.256" video="mainVideo" id=subtitle]]
[[!template text="the action, so let me just add" start="00:03:34.879" video="mainVideo" id=subtitle]]
[[!template text="a couple breaks here." start="00:03:37.519" video="mainVideo" id=subtitle]]
[[!template text="So let's say we want" start="00:03:41.120" video="mainVideo" id=subtitle]]
[[!template text="this if statement and a couple of breaks" start="00:03:44.748" video="mainVideo" id=subtitle]]
[[!template text="to be inside of the while," start="00:03:46.779" video="mainVideo" id=subtitle]]
[[!template text="so we can just slurp this up," start="00:03:48.319" video="mainVideo" id=subtitle]]
[[!template text="and if we don't actually want them," start="00:03:50.959" video="mainVideo" id=subtitle]]
[[!template text="we can barf them back out." start="00:03:52.433" video="mainVideo" id=subtitle]]
[[!template text="So that's where those words" start="00:03:54.528" video="mainVideo" id=subtitle]]
[[!template text="have come from." start="00:03:56.736" video="mainVideo" id=subtitle]]
[[!template text="And we can just... delete as we please." start="00:03:57.840" video="mainVideo" id=subtitle]]
[[!template text="So yeah, that's a quick overview" start="00:04:01.120" video="mainVideo" id=subtitle]]
[[!template text="of the tree editing plugin in action." start="00:04:03.826" video="mainVideo" id=subtitle]]
[[!template text="So now I want to talk a little bit" start="00:04:07.360" video="mainVideo" id=subtitle]]
[[!template text="about the implementation of tree-edit." start="00:04:08.900" video="mainVideo" id=subtitle]]
[[!template text="Tree-edit uses the tree-sitter parser" start="00:04:12.080" video="mainVideo" id=subtitle]]
[[!template text="to convert text into a syntax tree." start="00:04:14.400" video="mainVideo" id=subtitle]]
[[!template text="Tree-sitter is used by GitHub" start="00:04:17.919" video="mainVideo" id=subtitle]]
[[!template text="for its syntax highlighting," start="00:04:21.501" video="mainVideo" id=subtitle]]
[[!template text="and it's available in a bunch of editors," start="00:04:22.752" video="mainVideo" id=subtitle]]
[[!template text="including Emacs, so it's" start="00:04:25.280" video="mainVideo" id=subtitle]]
[[!template text="a fairly standard tool." start="00:04:27.120" video="mainVideo" id=subtitle]]
[[!template text="However, the unique part about tree-edit" start="00:04:28.960" video="mainVideo" id=subtitle]]
[[!template text="is how it performs" start="00:04:30.960" video="mainVideo" id=subtitle]]
[[!template text="correct editing operations" start="00:04:32.479" video="mainVideo" id=subtitle]]
[[!template text="on the syntax tree" start="00:04:34.479" video="mainVideo" id=subtitle]]
[[!template text="and then converts that back into text." start="00:04:35.919" video="mainVideo" id=subtitle]]
[[!template text="So to do that, we use miniKanren," start="00:04:38.320" video="mainVideo" id=subtitle]]
[[!template text="and miniKanren is an embedded" start="00:04:41.759" video="mainVideo" id=subtitle]]
[[!template text="domain-specific language" start="00:04:43.759" video="mainVideo" id=subtitle]]
[[!template text="for logic programming." start="00:04:45.120" video="mainVideo" id=subtitle]]
[[!template text="So what exactly does that mean?" start="00:04:47.440" video="mainVideo" id=subtitle]]
[[!template text="In our case, it's just" start="00:04:50.080" video="mainVideo" id=subtitle]]
[[!template text="an Emacs Lisp library called reazon," start="00:04:51.280" video="mainVideo" id=subtitle]]
[[!template text="which exposes a set of macros" start="00:04:54.240" video="mainVideo" id=subtitle]]
[[!template text="which enables us to program" start="00:04:56.720" video="mainVideo" id=subtitle]]
[[!template text="in this logic programming style." start="00:04:58.320" video="mainVideo" id=subtitle]]
[[!template text="I'm not going to get into the details" start="00:05:01.360" video="mainVideo" id=subtitle]]
[[!template text="of how logic programming works." start="00:05:03.280" video="mainVideo" id=subtitle]]
[[!template text="However, one of the most unique aspects" start="00:05:05.520" video="mainVideo" id=subtitle]]
[[!template text="about it is that we can define" start="00:05:07.520" video="mainVideo" id=subtitle]]
[[!template text="a predicate and then figure out" start="00:05:09.919" video="mainVideo" id=subtitle]]
[[!template text="all the inputs to the predicate" start="00:05:13.600" video="mainVideo" id=subtitle]]
[[!template text="that would hold to be true." start="00:05:15.280" video="mainVideo" id=subtitle]]
[[!template text="So in this case," start="00:05:17.759" video="mainVideo" id=subtitle]]
[[!template text="we have our query variable q," start="00:05:19.360" video="mainVideo" id=subtitle]]
[[!template text="which will be what the output is," start="00:05:21.520" video="mainVideo" id=subtitle]]
[[!template text="and we are asking for all the values of q" start="00:05:24.479" video="mainVideo" id=subtitle]]
[[!template text="that pass this predicate of" start="00:05:29.120" video="mainVideo" id=subtitle]]
[[!template text="being set-equal to 1 2 3 4." start="00:05:32.080" video="mainVideo" id=subtitle]]
[[!template text="So if we execute this," start="00:05:34.479" video="mainVideo" id=subtitle]]
[[!template text="it will take a little time..." start="00:05:36.880" video="mainVideo" id=subtitle]]
[[!template text="It shouldn't be taking this long." start="00:05:40.080" video="mainVideo" id=subtitle]]
[[!template text="Oh, there it goes." start="00:05:41.520" video="mainVideo" id=subtitle]]
[[!template text="We can see that it's generated" start="00:05:43.280" video="mainVideo" id=subtitle]]
[[!template text="a bunch of different answers" start="00:05:45.919" video="mainVideo" id=subtitle]]
[[!template text="that are all set-equal to 1 2 3 4." start="00:05:47.520" video="mainVideo" id=subtitle]]
[[!template text="So it's just a bunch of" start="00:05:51.199" video="mainVideo" id=subtitle]]
[[!template text="different permutations of that." start="00:05:52.880" video="mainVideo" id=subtitle]]
[[!template text="We can extend this notion" start="00:05:57.280" video="mainVideo" id=subtitle]]
[[!template text="to a parser. In tree-edit, we've defined" start="00:05:59.120" video="mainVideo" id=subtitle]]
[[!template text="a parser in reazon," start="00:06:03.600" video="mainVideo" id=subtitle]]
[[!template text="and we can use that parser to figure out" start="00:06:05.360" video="mainVideo" id=subtitle]]
[[!template text="any tokens that match the type of node" start="00:06:10.800" video="mainVideo" id=subtitle]]
[[!template text="that we're trying to generate." start="00:06:15.919" video="mainVideo" id=subtitle]]
[[!template text="If I execute this, we can see" start="00:06:16.880" video="mainVideo" id=subtitle]]
[[!template text="that reazon has generated" start="00:06:19.600" video="mainVideo" id=subtitle]]
[[!template text="these five answers that match" start="00:06:21.199" video="mainVideo" id=subtitle]]
[[!template text="what a try statement is in Java." start="00:06:23.440" video="mainVideo" id=subtitle]]
[[!template text="Here we can see we can have" start="00:06:26.960" video="mainVideo" id=subtitle]]
[[!template text="an infinite amount of catches" start="00:06:29.680" video="mainVideo" id=subtitle]]
[[!template text="optionally ending with a finally," start="00:06:31.919" video="mainVideo" id=subtitle]]
[[!template text="and we always have to start" start="00:06:34.720" video="mainVideo" id=subtitle]]
[[!template text="with a try and a block." start="00:06:36.160" video="mainVideo" id=subtitle]]
[[!template text="We can see this again" start="00:06:39.039" video="mainVideo" id=subtitle]]
[[!template text="with an argument list." start="00:06:40.000" video="mainVideo" id=subtitle]]
[[!template text="We have the opening and closing" start="00:06:42.400" video="mainVideo" id=subtitle]]
[[!template text="parentheses, and expressions" start="00:06:43.520" video="mainVideo" id=subtitle]]
[[!template text="which are comma delimited." start="00:06:45.759" video="mainVideo" id=subtitle]]
[[!template text="Now, for a more complex example, and" start="00:06:49.120" video="mainVideo" id=subtitle]]
[[!template text="something that is along the lines" start="00:06:51.759" video="mainVideo" id=subtitle]]
[[!template text="of what's in tree-edit," start="00:06:53.680" video="mainVideo" id=subtitle]]
[[!template text="is if we have this x here" start="00:06:55.199" video="mainVideo" id=subtitle]]
[[!template text="and we want to insert another expression," start="00:06:57.919" video="mainVideo" id=subtitle]]
[[!template text="so x, y. We can assert" start="00:07:01.599" video="mainVideo" id=subtitle]]
[[!template text="that there's some new tokens," start="00:07:05.759" video="mainVideo" id=subtitle]]
[[!template text="and we want an expression" start="00:07:07.680" video="mainVideo" id=subtitle]]
[[!template text="to be in those new tokens," start="00:07:10.160" video="mainVideo" id=subtitle]]
[[!template text="and we can essentially state" start="00:07:11.840" video="mainVideo" id=subtitle]]
[[!template text="where we want these new tokens to go" start="00:07:13.280" video="mainVideo" id=subtitle]]
[[!template text="within the old list of tokens," start="00:07:15.039" video="mainVideo" id=subtitle]]
[[!template text="so replacing it" start="00:07:19.759" video="mainVideo" id=subtitle]]
[[!template text="after the previous expression," start="00:07:21.599" video="mainVideo" id=subtitle]]
[[!template text="before the closed parentheses," start="00:07:23.360" video="mainVideo" id=subtitle]]
[[!template text="and then we can state" start="00:07:26.000" video="mainVideo" id=subtitle]]
[[!template text="that the whole thing parses." start="00:07:26.880" video="mainVideo" id=subtitle]]
[[!template text="If we run that, we can see that" start="00:07:28.560" video="mainVideo" id=subtitle]]
[[!template text="as we wanted earlier," start="00:07:30.080" video="mainVideo" id=subtitle]]
[[!template text="which was a comma and then expression," start="00:07:32.479" video="mainVideo" id=subtitle]]
[[!template text="we have that here as well." start="00:07:37.120" video="mainVideo" id=subtitle]]
[[!template text="We can see this again." start="00:07:39.120" video="mainVideo" id=subtitle]]
[[!template text="Here, the only change is that" start="00:07:41.759" video="mainVideo" id=subtitle]]
[[!template text="we've moved the tokens to be" start="00:07:42.720" video="mainVideo" id=subtitle]]
[[!template text="before the expression." start="00:07:45.280" video="mainVideo" id=subtitle]]
[[!template text="So we want to put an expression" start="00:07:46.240" video="mainVideo" id=subtitle]]
[[!template text="before this x, so we want something" start="00:07:48.800" video="mainVideo" id=subtitle]]
[[!template text="like y, x," start="00:07:50.560" video="mainVideo" id=subtitle]]
[[!template text="and if we execute that," start="00:07:52.560" video="mainVideo" id=subtitle]]
[[!template text="we can see that it is correctly asserted" start="00:07:54.240" video="mainVideo" id=subtitle]]
[[!template text="that it would be an expression" start="00:07:57.919" video="mainVideo" id=subtitle]]
[[!template text="and then a comma afterwards." start="00:07:59.039" video="mainVideo" id=subtitle]]
[[!template text="One last example is" start="00:08:01.520" video="mainVideo" id=subtitle]]
[[!template text="if we have an if statement" start="00:08:02.960" video="mainVideo" id=subtitle]]
[[!template text="and we want to add an extra block," start="00:08:04.400" video="mainVideo" id=subtitle]]
[[!template text="we can see that it correctly figures out" start="00:08:07.759" video="mainVideo" id=subtitle]]
[[!template text="that we need an else" start="00:08:11.599" video="mainVideo" id=subtitle]]
[[!template text="in order to have another statement" start="00:08:12.400" video="mainVideo" id=subtitle]]
[[!template text="in an if statement." start="00:08:13.840" video="mainVideo" id=subtitle]]
[[!template text="So, next steps for tree-edit." start="00:08:16.720" video="mainVideo" id=subtitle]]
[[!template text="The core of tree-edit is in place" start="00:08:19.759" video="mainVideo" id=subtitle]]
[[!template text="but there's a lot of usability features" start="00:08:21.039" video="mainVideo" id=subtitle]]
[[!template text="to add, and a lot of testing" start="00:08:23.120" video="mainVideo" id=subtitle]]
[[!template text="that needs to be done" start="00:08:25.360" video="mainVideo" id=subtitle]]
[[!template text="in order to iron out any bugs that exist." start="00:08:26.400" video="mainVideo" id=subtitle]]
[[!template text="I'd like to add support" start="00:08:29.599" video="mainVideo" id=subtitle]]
[[!template text="for as many languages as is possible." start="00:08:30.960" video="mainVideo" id=subtitle]]
[[!template text="I think my next step" start="00:08:35.200" video="mainVideo" id=subtitle]]
[[!template text="will probably be Python." start="00:08:36.240" video="mainVideo" id=subtitle]]
[[!template text="There's some performance improvements" start="00:08:38.490" video="mainVideo" id=subtitle]]
[[!template text="that need to be made, since using this" start="00:08:41.279" video="mainVideo" id=subtitle]]
[[!template text="logic programming language" start="00:08:44.080" video="mainVideo" id=subtitle]]
[[!template text="is fairly intensive." start="00:08:45.519" video="mainVideo" id=subtitle]]
[[!template text="There's some optimizations" start="00:08:47.600" video="mainVideo" id=subtitle]]
[[!template text="both on the library side" start="00:08:48.800" video="mainVideo" id=subtitle]]
[[!template text="and on tree-edit side" start="00:08:50.560" video="mainVideo" id=subtitle]]
[[!template text="that can be made." start="00:08:51.519" video="mainVideo" id=subtitle]]
[[!template text="Contributors are of course welcome," start="00:08:53.360" video="mainVideo" id=subtitle]]
[[!template text="as tree-edit is an open source project." start="00:08:55.519" video="mainVideo" id=subtitle]]
[[!template text="For future work, I think the prospect" start="00:09:00.000" video="mainVideo" id=subtitle]]
[[!template text="of voice controlled development" start="00:09:03.360" video="mainVideo" id=subtitle]]
[[!template text="with tree-edit is actually something" start="00:09:04.480" video="mainVideo" id=subtitle]]
[[!template text="that's really exciting," start="00:09:06.240" video="mainVideo" id=subtitle]]
[[!template text="since syntax can be very cumbersome" start="00:09:07.920" video="mainVideo" id=subtitle]]
[[!template text="when you're working with" start="00:09:11.120" video="mainVideo" id=subtitle]]
[[!template text="voice control software." start="00:09:12.320" video="mainVideo" id=subtitle]]
[[!template text="I can envision something like" start="00:09:14.240" video="mainVideo" id=subtitle]]
[[!template text="saying, &quot;Jump to identifier," start="00:09:16.320" video="mainVideo" id=subtitle]]
[[!template text="add plus operator, jump to if statement," start="00:09:19.440" video="mainVideo" id=subtitle]]
[[!template text="wrap if statement in while.&quot;" start="00:09:26.640" video="mainVideo" id=subtitle]]
[[!template text="So that's something" start="00:09:30.480" video="mainVideo" id=subtitle]]
[[!template text="I'd like to investigate." start="00:09:31.519" video="mainVideo" id=subtitle]]
[[!template text="I also would just like to" start="00:09:33.519" video="mainVideo" id=subtitle]]
[[!template text="provide the core functionality" start="00:09:35.040" video="mainVideo" id=subtitle]]
[[!template text="of tree-edit as something" start="00:09:37.279" video="mainVideo" id=subtitle]]
[[!template text="that can be used as a library" start="00:09:39.120" video="mainVideo" id=subtitle]]
[[!template text="for other projects," start="00:09:40.399" video="mainVideo" id=subtitle]]
[[!template text="such as refactoring packages," start="00:09:41.920" video="mainVideo" id=subtitle]]
[[!template text="or other non-Vim-style approaches," start="00:09:43.839" video="mainVideo" id=subtitle]]
[[!template text="and just making the syntax generation" start="00:09:46.240" video="mainVideo" id=subtitle]]
[[!template text="available for reuse." start="00:09:49.200" video="mainVideo" id=subtitle]]
[[!template text="Finally, I'd like to thank" start="00:09:52.080" video="mainVideo" id=subtitle]]
[[!template text="the authors of reazon" start="00:09:53.760" video="mainVideo" id=subtitle]]
[[!template text="and elisp-tree-sitter," start="00:09:56.399" video="mainVideo" id=subtitle]]
[[!template text="which in turn packages" start="00:09:58.399" video="mainVideo" id=subtitle]]
[[!template text="tree-sitter itself," start="00:10:00.185" video="mainVideo" id=subtitle]]
[[!template text="since tree-edit relies very heavily" start="00:10:02.079" video="mainVideo" id=subtitle]]
[[!template text="on these two packages." start="00:10:05.440" video="mainVideo" id=subtitle]]
[[!template text="I'd also like to thank" start="00:10:07.680" video="mainVideo" id=subtitle]]
[[!template text="the author of lispy," start="00:10:08.959" video="mainVideo" id=subtitle]]
[[!template text="since a lot of the design decisions" start="00:10:10.480" video="mainVideo" id=subtitle]]
[[!template text="when it comes to the editing operations" start="00:10:12.720" video="mainVideo" id=subtitle]]
[[!template text="are based very heavily on lispy." start="00:10:14.800" video="mainVideo" id=subtitle]]
[[!template text="So that's the end of my talk." start="00:10:18.560" video="mainVideo" id=subtitle]]
[[!template text="Thank you for watching." start="00:10:20.320" video="mainVideo" id=subtitle]]
[[!template text="captions by sachac" start="00:10:22.959" video="mainVideo" id=subtitle]]