WEBVTT

00:00.000 --> 00:14.160
So, hello, and welcome to Lispus Clay, a talk where we do things inside of a list-based buffer

00:14.160 --> 00:18.400
editor that I cannot get working correctly at the moment.

00:18.400 --> 00:28.280
All right, that's close enough, close enough to reality, okay, so, and this was not totally

00:28.280 --> 00:32.320
put together at the last minute already, and so, it's guaranteed to be a great talk.

00:32.320 --> 00:36.240
You can see I anticipated myself screwing up, but not in this particular way.

00:36.240 --> 00:38.600
Hi, I'm the Executive Director of the Sprayly Institute.

00:38.600 --> 00:42.600
We do great things, and most of the time it's not as ridiculous as this.

00:42.600 --> 00:47.040
So, I did some things involving decentralized social networks.

00:47.040 --> 00:51.320
It's probably what I'm most well known for.

00:51.320 --> 00:56.680
I'm the Executive Director at the Sprayly Institute, and I am a Lisp lady.

00:56.680 --> 01:02.560
So, what is the Sprayly Institute?

01:02.560 --> 01:08.520
We're a decentralized networking research non-profit, maybe I can just look at, yeah, I can

01:08.520 --> 01:09.520
just edit it like this.

01:09.520 --> 01:11.360
This is great, this is a work.

01:11.360 --> 01:13.920
We're a decentralized networking research non-profit.

01:13.920 --> 01:17.400
We designed some damn cool tech, so we have a distributed programming environment called

01:17.400 --> 01:19.200
Goblins.

01:19.200 --> 01:26.240
We have a distributed programming protocol that is used by Goblins, and called O'Cappen,

01:26.240 --> 01:30.640
and we have a scheme to Web Assembly Compiler, which will show up several times in the

01:30.640 --> 01:38.360
talks in this room, which Dave and Andy both work on, and we're not a game dev shop, but

01:38.360 --> 01:40.960
you might think so.

01:40.960 --> 01:45.680
We get this question a lot, which is, why are using Lisp Slash Scheme, because a lot of people

01:45.680 --> 01:49.120
seem to think that this is a mistake, actually, if you're trying to develop the future,

01:49.120 --> 01:53.160
you should use something that people actually use, and nobody would use a Lisp Slash

01:53.160 --> 01:54.160
Scheme.

01:54.160 --> 01:57.720
This is the one audience I probably don't need to convince, and yet I'm going to try to convince

01:57.720 --> 02:03.400
you anyway, but some specific things that I actually think this is one of the best decisions

02:03.400 --> 02:09.400
we actually made, and I'm making this argument that Lisp is clay, and so what the heck does

02:09.400 --> 02:10.400
that mean?

02:10.400 --> 02:15.640
Well, I mean, so, you know, it's been around a long time, it's very moldable, and can

02:15.640 --> 02:20.480
make all sorts of things with it, like so many different kinds of things, but what kind

02:20.480 --> 02:21.480
of things can you make with clay?

02:21.480 --> 02:26.400
Well, you can make house, you can make a clay-mation movie, you can make bricks, you can make

02:26.400 --> 02:31.320
a pottery, you can make a sculpture, and those are pretty interesting things, but one of

02:31.320 --> 02:34.720
the interesting things is that you can combine them, so you don't have to choose sculpture

02:34.720 --> 02:38.920
versus pottery, you don't have to pick between those worlds.

02:38.920 --> 02:43.360
You can sculpt, and then you can make your pottery, and then you can sculpt and adorn features

02:43.360 --> 02:44.360
to it, right?

02:44.360 --> 02:47.880
You can compose those things together, but one of the other cool things about clay is that

02:47.880 --> 02:51.320
you can use clay things to make more clay things, right?

02:51.320 --> 02:55.320
You can take, you can make bricks, and then you can put those bricks together, and you can

02:55.320 --> 02:57.760
make a kiln, in which you can make more bricks, right?

02:57.760 --> 02:59.120
And so that's pretty cool, right?

02:59.120 --> 03:04.280
And we like that type of thing, and this is starting to sound a little bit familiar, right?

03:04.280 --> 03:05.280
What is Lisp?

03:05.280 --> 03:07.760
It's an ancient medium, right?

03:07.760 --> 03:13.560
Relative to our field, it's a very versatile, it's timeless in a way, right?

03:13.560 --> 03:18.760
You know, it keeps being useful, or so we are you.

03:18.760 --> 03:23.680
It's very composable, and it's flexible and expressive, and you can make more of it things

03:23.680 --> 03:24.680
with itself, right?

03:24.680 --> 03:26.720
You can use Lisp to make more Lisp things, right?

03:26.720 --> 03:33.040
And that's Andy just talked about doing that type of thing, including, you know, and so

03:33.040 --> 03:39.680
like, I think that's one of the things that's really, like, those are the characteristics,

03:39.680 --> 03:43.160
I think, generally, but what makes it so flexible and powerful?

03:43.160 --> 03:47.080
And I think the general assumption people is that it's because of macros, right?

03:47.080 --> 03:49.080
You know, homoicinicity, right?

03:49.080 --> 03:52.400
You know, like, the fact that, you know, it's editing this structure that itself, and I

03:52.400 --> 03:56.360
think that that's true, but I actually think it kind of gets it backwards, and macros

03:56.360 --> 04:02.200
actually come out of the other property that I think is really essential.

04:02.200 --> 04:09.680
So, is it because of the parenthesis, this, I made this fog too big, and now my examples

04:09.680 --> 04:10.680
don't work.

04:10.680 --> 04:15.720
I'm going to do another e-max thing, I'm going to switch the slide size, I didn't

04:15.720 --> 04:16.720
this.

04:16.720 --> 04:18.720
All right, this is a little bit better.

04:18.720 --> 04:22.360
So, I'm going to do it on my topic.

04:22.360 --> 04:29.520
So, actually, if you, I don't think the parenthesis are actually particularly essential

04:29.520 --> 04:32.400
to Lisp.

04:32.400 --> 04:39.520
So, for example, Arnie's made this nice representation called, with, which is a weight space

04:39.520 --> 04:40.520
to Lisp, right?

04:40.520 --> 04:41.520
And this is still Lisp.

04:41.520 --> 04:45.520
It's literally the same thing in that it's an S expression-based environment, but it's

04:45.520 --> 04:49.520
using indentation to be able to determine, and so, the things on the left translate to

04:49.520 --> 04:52.520
the things on the right, and this is pretty cool.

04:52.520 --> 04:57.360
So, the parenthesis, which, you know, obviously is the most, the biggest selling feature

04:57.360 --> 05:00.120
of Lisp when you're, like, you know, like, would you like to learn Lisp, and people

05:00.120 --> 05:03.080
are like, I don't know, and you're, like, look at all these parenthesis, and they're, like,

05:03.080 --> 05:04.080
I'm in, right?

05:04.080 --> 05:07.280
You know, so, but it turns out that's not the reason.

05:07.280 --> 05:12.520
So, actually, but it does have to do with the structure, but I think actually even more

05:12.520 --> 05:14.520
so it has to do with the uniformity.

05:14.520 --> 05:19.120
So, you get, get yourself a syntax that can do everything, actually, right?

05:19.120 --> 05:24.120
You know, and, you know, the, the, in a certain sense, Lisp is actually really powerful

05:24.120 --> 05:29.040
because it has a syntax that doesn't matter at all, right?

05:29.040 --> 05:34.760
And that makes it matter a lot, which is kind of the paradox of things.

05:35.320 --> 05:38.560
So, let's pull up some examples of, of power here.

05:38.560 --> 05:42.120
So, um, metacircular evaluators, right?

05:42.120 --> 05:47.240
So, um, this is kind of like this, you go, you go through this phase where you're learning

05:47.240 --> 05:51.320
scheme, and we wrote, or, or, unless, then, right, say, who here's read the scheme primer

05:51.320 --> 05:52.320
for this, right?

05:52.320 --> 05:53.320
Instantively, put up.

05:53.320 --> 05:54.320
Okay, you know, a number of people.

05:54.320 --> 05:58.480
So, we wrote this, we put this document out that's, like, a intro to scheme.

05:58.480 --> 06:01.920
Gile, thankfully, has it, like, on the front, you know, if you click docs, it's like the

06:01.920 --> 06:04.320
first recommended thing now.

06:04.320 --> 06:10.240
And, um, and it's, you know, 30 pages that basically goes you from, I don't know anything

06:10.240 --> 06:16.640
about programming, um, to, you write this version of scheme inside of scheme in 30 pages,

06:16.640 --> 06:17.640
right?

06:17.640 --> 06:22.920
And this is, like, a thing that's very, like, that, like, it's kind of an old trick, right?

06:22.920 --> 06:26.080
Like, it's, it basically, that whole, that whole paper is just, like, let me just take

06:26.080 --> 06:30.520
all the parts that I thought were good about, you know, little scheme or instruction interpretation

06:30.520 --> 06:35.360
computer programs, and then just like, like, ran you through it, right?

06:35.360 --> 06:39.520
And, and what's, it's amazing is that, um, the implementation of scheme in scheme, well,

06:39.520 --> 06:43.960
it's not really all of scheme, but it's like close enough that you can, you can technically,

06:43.960 --> 06:49.200
it's, it's, it's, you can do all of the computational power of scheme, right?

06:49.200 --> 06:53.960
And, um, and it's really just 30 lines of code, right?

06:53.960 --> 06:54.960
That's it.

06:54.960 --> 06:56.760
Just wrote our, like, scheme in scheme.

06:56.760 --> 06:58.800
Now, you know, is it really a scheme in scheme?

06:58.800 --> 07:00.800
Nobody's going to actually completely use this thing.

07:00.800 --> 07:05.320
Um, there's a wonderful talk by William Bird, who, who did, uh, many, worked on many

07:05.320 --> 07:09.320
can-run, um, where he, called, uh, the most beautiful program ever written, uh, if you

07:09.320 --> 07:12.720
want to see a, a good list of talk, as opposed to this, help your sculpture, I'm barely

07:12.720 --> 07:14.120
getting e-maxed to work talk.

07:14.120 --> 07:17.520
Um, I really recommend watching that one, and the, what's really interesting is he says,

07:17.520 --> 07:21.000
you know, like, if you take a look at this thing, you know, like, and, and you, you have

07:21.000 --> 07:25.160
this, the cool thing is that you can just change a little piece of it, and then you get

07:25.160 --> 07:27.840
a completely different language, right?

07:27.840 --> 07:31.360
So, okay, cool, we're, you're implemented scheme in scheme line, is that matter, but

07:31.360 --> 07:35.600
we can just change, like, one or two things, and suddenly we get a logic programming language,

07:35.600 --> 07:41.080
where, right, you know, like, you're, you can ask a question and get the answer, as opposed

07:41.080 --> 07:44.960
to, like, saying what to do, right, which is pretty cool, right?

07:44.960 --> 07:49.720
Um, and, um, and, and getting to this part where you get the heart of the program, right,

07:49.720 --> 07:55.680
the heart of the concept of computation, um, it, it's really great.

07:55.680 --> 07:58.800
And the thing is, is that you, you can do this in other languages.

07:58.800 --> 08:02.800
There was a, there was a, there was a port of, um, structure and interpretation of computer

08:02.800 --> 08:10.240
programs, the old scheme wizard book classic, right, um, to, to Python, and, um, the goal

08:10.240 --> 08:13.920
of this was to try to be able to make its ideas more accessible.

08:13.920 --> 08:19.680
I read through it, and I think the problem is, is that it didn't, when you get to the

08:19.680 --> 08:24.640
part, which I think was a really strong part about the book, you know, as I see P, introduces

08:24.720 --> 08:28.880
the, you know, at one point assessment said, you know, I gave some, like, we spent half an hour

08:28.880 --> 08:33.040
teaching people of the language, and then we spend the rest of the course teaching people

08:33.040 --> 08:39.760
about the ideas of programming, right, um, and the, um, when you get to the part where

08:39.760 --> 08:45.440
you're writing this interpreter, it looks like you're trying to force a list into something

08:45.440 --> 08:47.360
that doesn't look like it anymore, right?

08:47.360 --> 08:53.040
So this is where the home identity thing, I think is, is true, it looks like you're writing

08:53.120 --> 08:56.400
the thing that, that's actually the thing that you're, you're dealing with, right?

08:56.400 --> 09:01.760
And I think that this is the thing that, um, the fact that it's kind of a syntax that kind of

09:01.760 --> 09:07.920
doesn't matter, right, because it, it's just, it's just this very simple thing, it's actually

09:07.920 --> 09:11.360
really powerful here, and it'll let's us be able to get very meta about things, right?

09:11.360 --> 09:14.480
And of course, you can do smarter things, you can not just write an interpreter, you could write

09:14.480 --> 09:20.480
an actual compiler and stuff like that. But, um, I still think that this, this kind of magic trick

09:20.480 --> 09:26.880
of the not a circular evaluator is, is reflective of the aspects of computation that, that, like,

09:26.880 --> 09:32.880
that we're able to kind of see and hold in our hands. Um, I, I, I didn't pull up a bunch of

09:32.880 --> 09:37.920
many canoran, uh, examples here, um, but I, I actually would really recommend looking at some of,

09:37.920 --> 09:42.640
um, uh, William Bird's stuff, partly because when I was, I was, I, when I was trying to pull

09:42.640 --> 09:48.240
it up, um, I, I feel like I'm not very good at, like, pulling up, um, examples that are,

09:48.320 --> 09:51.920
are easy to, to understand in a couple of lines. But what's interesting is that many

09:51.920 --> 09:55.920
canoran's, it's like, prologue, basically, that you can do in scheme. But what's interesting

09:55.920 --> 10:00.080
is that if you go to the, the many canoran website, they have a ported to a bunch of other languages,

10:00.080 --> 10:05.760
and it kind of doesn't really, like, look good in, like, a lot of other languages. Like,

10:05.760 --> 10:09.600
it doesn't, it doesn't look good, and, and I, and it's kind of like, well, well, why doesn't

10:09.600 --> 10:18.000
it look good? And part of the reason is that, um, because this has so few opinions about how

10:18.080 --> 10:23.120
things should look when you embed a different programming paradigm inside of it, it still looks like the

10:23.120 --> 10:29.200
same, you know, bunch of mud, right? You know, like, we'd effectively, that's what clay is. It's mud

10:29.200 --> 10:36.240
that you can do cool things with, right? Um, and, and this whole line of Lispus clay is actually a riff

10:36.240 --> 10:43.920
off of a popular old phrase, which is in the Lisp community, which is, um, which is that, you know,

10:44.000 --> 10:48.160
Lispus a ball of mud, and this goes all the way back to, like, MIT, where they're like,

10:48.160 --> 10:52.240
there's this debate about algal, right? You know, the number one language today, right? Which,

10:52.240 --> 10:56.400
like, this beautiful language with these very specific syntax in it and stuff like that,

10:56.400 --> 11:00.640
and they're like, well, it's like, it's like a diamond. It's a beautiful language, but, like,

11:00.640 --> 11:06.960
if you try to add a diamond to another diamond, you can't, right? Um, but you can always add more mud

11:06.960 --> 11:12.000
on top of a ball of mud. So Lispus is a ball of mud, right? So we have this, we have this, but

11:12.080 --> 11:16.560
I feel like mud is really, it's really, it's really kind of like, you know, devaluing things here.

11:17.520 --> 11:21.760
And one of the really thing, the cool things I think about Lispus, is, you know, we have quasi-quote,

11:21.760 --> 11:28.240
right, which is a templating system. And, you know, here is, um, so if you saw, uh, the talk of Jessica

11:28.240 --> 11:32.880
and I gave yesterday about, um, about, you may have heard that there was a first implementation

11:32.880 --> 11:37.920
of activity pub to be able to pass a test suite with written in, in Gile, actually, in scheme.

11:37.920 --> 11:42.000
I wrote it, you know, to be able to make sure that, like, the idea's work. And, uh,

11:42.000 --> 11:46.320
it had some cool ideas. Like, for example, right here, it says define AS method. That means

11:46.320 --> 11:51.600
activity streams method. Now, this is the macro that's specific, because I wrote a, um,

11:51.600 --> 11:58.400
generic method system that understood the activity streams type hierarchy, which is the vocabulary

11:58.400 --> 12:03.520
that activity pub talks to each other. And it would basically, like, look at the type hierarchy,

12:03.600 --> 12:07.920
kind of, like, if you've used Goops or Clost or something else like that, how it, um,

12:07.920 --> 12:12.160
knows about the type hierarchy and, and you can write these generic methods. And so it's basically

12:12.160 --> 12:16.080
like that, so that I could write these functions to that, you know, you can process incoming

12:16.080 --> 12:20.960
activities. So if somebody favorite something, you can run the right logic. If somebody telling you

12:20.960 --> 12:25.040
that they created something, you can run the right logic. And this one's saying, um, you know,

12:25.040 --> 12:30.240
like, this is, this is a template for the HTML representation. And, and so it's saying,

12:30.240 --> 12:35.280
okay, well, here, this is coming up in your feed. And it says, you created something. So this

12:35.280 --> 12:39.040
person created something. They're telling you that they created it. Well, what you should do is you

12:39.040 --> 12:46.240
should create this div. And this is, you know, HTML effectively. But it's HTML that just looks

12:46.240 --> 12:50.720
like the same mud we make everything else out of in less, right? And we have this template,

12:50.720 --> 12:57.360
where we backquote. And, um, the, the commons are where you move out of the data mode and you move

12:58.320 --> 13:02.560
and you move into, like, execution mode. So, you know, it can pull things out of the activity

13:02.560 --> 13:06.640
streams thing. And I think there's a couple of cool things about this. One of them is that, you know,

13:06.640 --> 13:11.600
it wasn't difficult for me to extend the language to add a generic, like, a generic method

13:11.600 --> 13:16.560
system that was specific to activity pop, right? I could do that really easy. It didn't take

13:16.560 --> 13:22.320
me along at all, right? Um, and the other cool thing is that I'm writing HTML. I didn't need to

13:22.320 --> 13:26.720
use, like, Ginger II or Django's templating language or something. I'll select that. I didn't

13:26.720 --> 13:31.520
have to leave scheme. And that's one of the things that I thought was really nice about it, right?

13:31.520 --> 13:36.480
And it was, it was really fun to work on this project. And like, this, this would get more complicated.

13:36.480 --> 13:41.040
If you're, if you're creating a method for, um, you have to create on the outside, but you want

13:41.040 --> 13:46.400
to render something like a video thing on the inside. Well, you know, then I define an activity

13:46.400 --> 13:51.840
streams method for a video thing. And this opens up with a lot of expression that does a lot

13:51.840 --> 13:55.840
more complicated things as in terms of pulling out, you know, like this list and everything. And then

13:56.480 --> 14:01.360
okay, I want to get these source lists and it walks through the information from the activity

14:01.360 --> 14:06.480
stream structure. And then, um, at the end, you know, kind of composes it together and it does

14:06.480 --> 14:11.840
this back quote and it builds up some XML again. But there's FXML up here too and it can just kind

14:11.840 --> 14:17.440
of compose these things together. So we hear we don't have to be, like, in Python, if I'm wanting

14:17.440 --> 14:24.160
to move between this world where I have, um, the HTML templating area and the Python logic, right?

14:24.240 --> 14:29.360
I have to kind of, like, step into one world and then step out and then step in and step out because

14:29.360 --> 14:33.600
they're two different languages. So don't really talk at the perimeter very well, right? I don't

14:33.600 --> 14:39.680
have to do that here. And like, um, and this quasi-quote thing, which Elizabeth has, for effectively

14:39.680 --> 14:44.880
ever, um, turns out to be good enough to be able to do this type of thing. So FXML, since I didn't

14:44.880 --> 14:50.400
explain what it is, it's an XML templating system for, um, as expressions, symbol of the

14:50.400 --> 14:55.440
parenthetical expressions. And, and, and it's great, right? By the way, just, this is just a fun

14:55.440 --> 14:59.360
side note. Um, you can have these tombstone objects. These things are deleted. I thought that

14:59.360 --> 15:06.400
Pubstrate had the funniest version of this because they had an ask your, um, uh, a thing where it

15:06.400 --> 15:11.920
would put a grave that said two of the unknown activity streams object. But it would also use the

15:11.920 --> 15:16.400
templating thing to be actually grab out the ear and then dump it right in there when the thing

15:16.400 --> 15:20.720
died. But you don't know when it was created. Effectively, all you care about is that it's death,

15:20.720 --> 15:27.360
right? Um, this object has been deleted, right? And so that type of thing's pretty cool. All right,

15:27.360 --> 15:32.160
now to, um, piss off anybody who's a fan of Nick's in the room because I'm going to talk about

15:32.160 --> 15:38.560
why Geeks is better. Um, so, so Nick has this whole template, it has this whole, uh, a special

15:38.560 --> 15:46.320
language for writing package definitions, right? And, um, and it's, like, a lot of other worlds

15:46.320 --> 15:49.600
when you're not in this, the first thing people say when they're like, okay, I'm going to solve

15:49.600 --> 15:52.960
a problem. I'm going to create a domain specific language. The first thing I want to do is I really

15:52.960 --> 15:57.360
want to think about what's the syntax looks like, right? And I'm like, I hate that. I don't want to

15:57.360 --> 16:02.320
do that. I want to just the same garbage I use for everything else. And so this, there's a special

16:02.320 --> 16:07.760
syntax. I have to learn a new syntax. Now, I don't want to do that. I'm way too lazy. Um, but, but one of

16:07.760 --> 16:13.040
other really, the thing that I really do not like about Nick's is that it combines multiple

16:13.760 --> 16:18.480
domain specific languages into the same file. It's kind of like, if you have, if you, like,

16:18.480 --> 16:23.840
HTML did this too, right? And now, nobody does it anymore, almost. But you can have an HTML page

16:23.840 --> 16:28.880
that has JavaScript and CSS embedded in the same places. And it's gross. You like, move into this

16:28.880 --> 16:32.880
place where it's doing one language and moves out, move back in and move back out, right? And you

16:32.880 --> 16:37.040
do, I don't like it. And so, here we have the same thing where we're defining things as a

16:37.040 --> 16:40.720
declarative way. And then suddenly we're doing writing bash, right? You know, like, we're running

16:40.800 --> 16:45.200
born shell. And it's like, I don't like this. So, like, here's the delicious thing that

16:45.200 --> 16:53.440
happens in geeks is like, um, instead, um, I go over here and I hit tab, expand this out. And it's like,

16:53.440 --> 16:58.080
oh, okay, here's, here's some package. And then when we get to the part where it's going to, like,

16:58.080 --> 17:03.680
do some logic. Ah, it's the same frickin thing. I do everywhere else. It's just the parentheses.

17:03.680 --> 17:09.120
But it also composes together. And this is one of the big things, I think, composition between

17:09.200 --> 17:17.840
languages is essential. Um, uh, I'm actually going to jump out of order in my presentation.

17:17.840 --> 17:22.640
And then jump down to, um, the rest of this talk is a choose during an adventure. Um, so we're

17:22.640 --> 17:27.200
going to, I'm choosing to have part of the adventure in a, ahead of time. But I spent a, you may,

17:27.200 --> 17:32.160
I spent, uh, five minutes left. Okay, I spent a while in racket lane at land. And they have this

17:32.160 --> 17:37.120
hash-lang thing. And it's pretty interesting because you can make a new language with its special

17:37.200 --> 17:41.680
syntax. And people are like, oh, I can't wait to create my special syntax and, and everything.

17:41.680 --> 17:47.440
And, um, and then you've got effectively. But what, what they really most end up being is a library

17:47.440 --> 17:53.280
with a special syntax attached to it in a default set of imports. But you can't combine hash-langs

17:53.280 --> 17:57.920
together very well, right? You have to do the same, remove into one world and move out and move into the

17:57.920 --> 18:04.320
other world and move in and move out. And that's not, that's not great to me. This is where I think

18:04.400 --> 18:10.160
that, um, and so I'm going to give a couple more examples. Hoots compiler actually does this. So,

18:10.160 --> 18:14.560
so Andy was mentioning that, you know, like, like, effectively, web assemblies, a kind of list.

18:14.560 --> 18:20.160
And so when we're compiling to web assembly, we can use quasi-quote. And we just actually write web

18:20.160 --> 18:25.200
assembly right inside of the code that's compiling to web assembly. And then we've got our own

18:25.200 --> 18:30.000
assembly and it writes it out and everything. And so whoets compiler, we don't have to leave the

18:30.000 --> 18:34.720
world of scheme to be able to construct this type of thing. And I think this is great. This is really

18:34.720 --> 18:42.880
good. Um, and, um, in goblins itself, the, you know, probably the main thing that we, we use here.

18:42.880 --> 18:48.640
Here's where I said, I don't think it's macros mostly. And goblins, people are like, oh,

18:48.640 --> 18:53.360
so you chose list and it's because you wanted to write a lot of macros. Goblins, we have a

18:53.360 --> 19:00.400
policy at the Spritly Institute. Macros are never required. You always have to have a

19:01.120 --> 19:07.920
programmatic procedure, like, procedure, oriented API first. And the macros are sugar for convenience,

19:07.920 --> 19:13.600
right? You have to always be able to do the things that you can do without macros. Um, you know,

19:13.600 --> 19:18.240
and at least one of my co-workers doesn't even, didn't even like macros for a long time. Just come

19:18.320 --> 19:23.440
around to it. But, um, but, like, but, you know, like, here, here is something where, you know,

19:23.440 --> 19:29.600
I can, I can have this cell, and I can use methods, which is a macro, but it's not essential.

19:29.600 --> 19:34.480
I could write the same thing with a case lambda, um, or I could actually pattern match against this.

19:34.480 --> 19:40.720
It's not that hard. Having the mac, the methods thing is a convenience. But, but, so why do I

19:40.720 --> 19:49.120
care so much about, um, it being in scheme? And the actual reason is, it's actually this. When we,

19:49.120 --> 19:53.760
we have a number of things for, like, spawning a new object, invoking an object, sending a message

19:53.760 --> 19:58.320
to an object, or doing things like sending asynchronous messages and setting up the callback.

19:58.960 --> 20:06.000
And when, when I was a Python Easter in my daily life, there were, um, at one point I used high,

20:06.160 --> 20:12.240
which was this list that compiled the Python. And one of the things that really blew my mind was that,

20:12.240 --> 20:17.840
like, I would sit there and pray to the programming language gods that they would add a new feature in the next release,

20:17.840 --> 20:23.440
including when, um, when a, when Python ended up getting this version of co-retains with a weight,

20:23.760 --> 20:28.560
like this, and really nice syntax for it. And high managed to, when we were working on high,

20:29.280 --> 20:34.720
they, uh, the, uh, the Paul Tigly Monty managed to backport a weight to Python too, which didn't even

20:34.800 --> 20:39.920
have this feature inside of the, so that the same code could run on top of the list,

20:40.640 --> 20:44.800
that actually, uh, for Python 2 and Python 3, Python 2 didn't have a weight. We didn't have

20:44.800 --> 20:48.800
to pray to the programming gods for it to show up. Um, and it looked just as good.

20:49.440 --> 20:53.200
One of the things that happens in most languages is that when you have, um, when you try,

20:53.200 --> 20:58.160
you try to create the special syntax thing there, you're like, this is a new feature to language,

20:58.160 --> 21:02.000
we're going to decide how it looks, right? You know, we're going to frame it, we're going to say,

21:02.000 --> 21:07.200
this is, you know, like, this is what it feels like. But instead of doing that, we just use the same

21:07.920 --> 21:12.000
crap that we use everywhere else, right? And so it just looks just as good as anything else in

21:12.000 --> 21:18.000
scheme, because it's just the same thing, right? It's uniformity. Um, I think there's a number of

21:18.000 --> 21:22.960
other clay-like things. One of the nice things about clay is it's a medium in which you can take

21:23.520 --> 21:27.440
something, and you can discover it as you kind of build with it, right? It's a, it's a beautiful

21:27.440 --> 21:30.880
medium where you don't have to have pre-planned everything. It's not like a sculpt, it's not like

21:30.960 --> 21:36.320
building is sculpting out a rock, right? If you're sculpting out marble, you have to have a good plan.

21:36.320 --> 21:40.480
If you're building something with clay, you can be like, oh, I actually feel like I should add this

21:40.480 --> 21:46.480
thing to it. I should move it around. I should bend it like this. And the emphasis on live hacking

21:46.480 --> 21:51.440
on repels and everything like that, which is actually not, it's sort of related to the syntax,

21:51.440 --> 21:59.200
but it's also a cultural aspect, the care of exploratory programming. That's, I think, one of the

21:59.360 --> 22:03.360
things that's really essential. So why was it essential to sprite the institute used list?

22:03.920 --> 22:09.680
Because we're trying to develop the future of the internet. And in many ways, we were

22:09.680 --> 22:14.720
all the ones circles even around some of our colleagues at other organizations who are in JavaScript,

22:14.720 --> 22:18.560
et cetera, and because we could just implement features very easily that we're taking them years

22:18.560 --> 22:22.960
to get the, the essential syntax and design that's set up through committee, and we could just

22:22.960 --> 22:28.400
do it with a team of very few people, because we have the freedom to sculpt the right answers.

22:28.480 --> 22:33.360
If you look at, I think there's a reason that we keep drawing on the history of like MIT and the

22:33.360 --> 22:38.720
Stanford AI labs and stuff like that for a long time computer science is continue to to mind those

22:38.720 --> 22:45.200
spaces. And I think that that's, in my opinion, that's because if you want to discover the future,

22:45.200 --> 22:49.760
you want to have an expressive medium in which you could discover the answers through exploration.

22:50.560 --> 22:54.640
And I'm going to say that's the enemy at my, my talking. We have time for Q&A?

22:54.960 --> 22:56.800
Yeah, of course, and they think they're going forward.

23:09.680 --> 23:10.400
Any questions?

23:13.520 --> 23:13.840
Now.

23:17.440 --> 23:17.760
Okay.

23:18.320 --> 23:19.520
Why? Why?

23:19.520 --> 23:20.240
My eyes.

23:21.200 --> 23:22.320
Why giles specifically?

23:23.280 --> 23:27.120
I was in Gile Land for quite a while with Geeks and, et cetera, before starting Sprayley.

23:27.120 --> 23:31.440
And actually, we moved to Racket, or when I started Sprayley, I actually started in Racket.

23:31.440 --> 23:35.280
And one of the reasons was, is that I kind of perceived it as being kind of like the Python

23:35.280 --> 23:39.440
of list as much more accessible. And actually, for the reasons Jessica is very talked about being

23:39.440 --> 23:44.960
concerned about about having editor support with Dr. Racket made it a lot easier for people to pick up.

23:45.840 --> 23:50.320
And actually, one of the reasons we moved back to Gile was because it became a little bit

23:50.320 --> 23:55.520
less clear whether or not the focus in Racket was going to be on keeping the same support for

23:55.520 --> 24:01.040
us expressions to the same as a first class citizen in the same way. And to me, that's really important.

24:01.040 --> 24:04.640
There are a number of other reasons also. But anyway, we wanted to be close to the Geeks community

24:04.640 --> 24:08.000
and other things like that too, which I think have been really important. I think Gile has a

24:08.000 --> 24:12.240
wonderful ecosystem around it. And it's great that we're very well connected to many people in this

24:12.240 --> 24:17.760
room who are very friendly and receptive to us talking about things. And so, yeah, that's why.

24:20.640 --> 24:27.840
Here we go there. Oh, no, it's my resolution. Oh, messed up. It's going to screw everything up.

24:29.120 --> 24:30.320
Oh, you've been here for a minute.

25:20.320 --> 25:22.320
you

25:50.320 --> 25:52.320
you

26:20.320 --> 26:22.320
you

