WEBVTT

00:00.000 --> 00:16.000
All right, we've got Alex, he's going to present cell the common expression language

00:16.000 --> 00:17.000
in Rust.

00:17.000 --> 00:24.000
All right, so please give him a warm welcome.

00:25.000 --> 00:28.000
I can't compare to clapping at the end and see how well I did.

00:28.000 --> 00:30.000
Thank you so much.

00:30.000 --> 00:31.000
So I'm Alex.

00:31.000 --> 00:35.000
I'm a Dith Feetler at Redout.

00:35.000 --> 00:39.000
And this project is not a Redout project,

00:39.000 --> 00:44.000
but yeah, I'm a maintainer on the cell Rust implementation.

00:44.000 --> 00:49.000
So here in the room, I guess you all rust developers.

00:49.000 --> 00:54.000
Like how many of those are doing Rust professionally, actually out of curiosity?

00:54.000 --> 00:56.000
Well, fair amount, that's great.

00:56.000 --> 01:01.000
So how many people know about cell already in this way the best hands?

01:01.000 --> 01:03.000
So that's good.

01:03.000 --> 01:06.000
All right, so what is cell?

01:06.000 --> 01:08.000
So it's a common expression language.

01:08.000 --> 01:15.000
It's a language that has a few interesting properties that may or may not fit your use case.

01:15.000 --> 01:19.000
So the ones out there probably else sound very, very good.

01:19.000 --> 01:22.000
So fast, portable, sustainable, and safe,

01:22.000 --> 01:26.000
are properties that probably we're all looking for.

01:26.000 --> 01:30.000
The language that's more properties, it's not turn completes.

01:30.000 --> 01:36.000
It has a cost model associated with an expression once it's being parsed.

01:36.000 --> 01:42.000
So that you can know how costly evaluate into expression is going to be.

01:42.000 --> 01:47.000
And yes, it avoids uses doing stupid stuff like looping forever,

01:47.000 --> 01:52.000
and things like that are just not possible in that language.

01:52.000 --> 01:55.000
So it came out of Google, I think around 2017,

01:55.000 --> 02:02.000
that's when the first open source repo commits happened.

02:02.000 --> 02:06.000
And they actually have three implementations like the go,

02:06.000 --> 02:09.000
the Java one and the C++ one,

02:09.000 --> 02:18.000
so that you can embed the parser interpreter in one of those languages.

02:18.000 --> 02:25.000
There is also JavaScript, typescript, and other stuff that exists,

02:25.000 --> 02:29.000
and they happens to be a rust implementation as well.

02:29.000 --> 02:33.000
Those are community efforts though, so they're not.

02:33.000 --> 02:36.000
And as far as I know, certainly for us,

02:36.000 --> 02:38.000
there is no relationship with Google.

02:38.000 --> 02:42.000
For others, as far as I can find, they're an online.

02:42.000 --> 02:50.000
So cell reaches some of the goals I mentioned before in different ways.

02:50.000 --> 02:54.000
Cell is a strongly typed expression language,

02:54.000 --> 02:57.000
which I personally like.

02:57.000 --> 03:00.000
I guess most people here do as well.

03:00.000 --> 03:04.000
You get a bunch of types out of the box.

03:05.000 --> 03:07.000
The ones you probably would expect,

03:07.000 --> 03:11.000
maybe somewhat surprising is maybe bytes in there.

03:11.000 --> 03:15.000
The timestamp duration ones are the ones that come from the,

03:15.000 --> 03:18.000
what Google calls the well known types,

03:18.000 --> 03:24.000
the protobuff stuff, supports maps, lists.

03:24.000 --> 03:28.000
It actually is more types like din types,

03:28.000 --> 03:33.000
so that when the type will only be known at evaluation time.

03:34.000 --> 03:41.000
Then support structs, mostly through the Google protobuff message stuff.

03:41.000 --> 03:46.000
It asks, what I call JSON interrupt, interrupt,

03:46.000 --> 03:49.000
because JSON is not natively supported.

03:49.000 --> 03:54.000
It is just a very well-specked how JSON is supposed to be transformed into a struct,

03:54.000 --> 03:56.000
and then you can leverage that.

03:56.000 --> 03:59.000
Because of all the types of these types of stuff again, right?

03:59.000 --> 04:01.000
That we care about.

04:01.000 --> 04:04.000
It has a spec like an actual language definition,

04:04.000 --> 04:06.000
and even the conformant tests,

04:06.000 --> 04:10.000
I'll get back to that later.

04:10.000 --> 04:13.000
All right, so let's look a little bit at what cell looks like.

04:13.000 --> 04:17.000
So I guess none of those need really any explanations.

04:17.000 --> 04:20.000
They're probably all fairly straightforward.

04:20.000 --> 04:23.000
We do string concatenation there.

04:23.000 --> 04:26.000
Resource of naming that case is supposed to be a string,

04:26.000 --> 04:30.000
and strings have some nice functions associated with them.

04:30.000 --> 04:33.000
We're looking to more details how that works later.

04:33.000 --> 04:37.000
So I guess none of that is too weird.

04:37.000 --> 04:40.000
Maybe the last one, the very last line,

04:40.000 --> 04:43.000
could be somewhat intriguing.

04:43.000 --> 04:49.000
So the all is actually a macro.

04:49.000 --> 04:53.000
And the first argument that you see there is actually

04:53.000 --> 04:57.000
defining a binding R for all the for every single element

04:57.000 --> 05:01.000
into the collection that we're looking on inside resources, right?

05:01.000 --> 05:04.000
So that maybe is somewhat surprising.

05:04.000 --> 05:08.000
But other than that, I think anybody can easily pick the language up

05:08.000 --> 05:12.000
and start writing sad expressions for whatever they're trying to achieve.

05:12.000 --> 05:19.000
I, wherever you embedded that run time inside your application.

05:19.000 --> 05:24.000
This weird like, yeah, I'll explain where it comes from and a bit.

05:24.000 --> 05:30.000
Another interesting syntax is the optional optional syntax

05:30.000 --> 05:37.000
in the sense that that needs to be enabled by your runtime and your browser.

05:37.000 --> 05:42.000
You don't need to necessarily support it and allow you to use it.

05:42.000 --> 05:45.000
So I changed them there.

05:45.000 --> 05:53.000
So that values we're looking at index thing 2 inside values.

05:53.000 --> 05:57.000
This could be a string if that would be a map key by string, for instance.

05:57.000 --> 05:59.000
In this case, it's in the right.

05:59.000 --> 06:02.000
And we're asking, oh, is that thing actually there?

06:02.000 --> 06:07.000
If it's not, that's going to return a option type, think of it.

06:07.000 --> 06:10.000
That then.

06:10.000 --> 06:13.000
So in this case, it's supposed to be a struct.

06:13.000 --> 06:15.000
If it's not there, it returns none.

06:15.000 --> 06:20.000
And eventually, I do something with this optional, right?

06:20.000 --> 06:24.000
So in this case, we're changing them.

06:24.000 --> 06:27.000
And at the end, I go, okay, if we couldn't resolve all this path,

06:27.000 --> 06:35.000
just return the value zero, this or value at the end.

06:35.000 --> 06:41.000
All right, so the big, like the way that I certainly was introduced to sell is

06:41.000 --> 06:45.000
because I work on a product that leaves in Kubernetes land and whatnot.

06:45.000 --> 06:50.000
And actually, sell is used in site Kubernetes for you to be able to do

06:50.000 --> 06:59.000
advanced validation on CRS that uses would want to apply to a cluster.

06:59.000 --> 07:05.000
And you would use expressions like predicate effectively to make sure that

07:05.000 --> 07:09.000
let's say you need a value to be between 12 and 13.

07:09.000 --> 07:11.000
Well, that's a shit number.

07:11.000 --> 07:13.000
12 and 42, right?

07:13.000 --> 07:16.000
And now you don't need to call it to a webbook.

07:16.000 --> 07:18.000
We can do that that way.

07:18.000 --> 07:22.000
That being said, sell is being used in very different context.

07:22.000 --> 07:26.000
Like, I think a library is using an accounting software for something.

07:26.000 --> 07:31.000
So it uses express sell to do something and then, I guess,

07:31.000 --> 07:33.000
numbers come out there.

07:33.000 --> 07:38.000
So we use it in site quadrant, which is the project I'm working on.

07:39.000 --> 07:47.000
Mostly to do predicates and data retrieval on payloads as the three examples you saw before.

07:47.000 --> 07:50.000
Most of that stuff is evaluated on the data plane.

07:50.000 --> 07:53.000
So I need to be really, really fast.

07:53.000 --> 07:57.000
Example given doing right limiting, making sure that this free question

07:57.000 --> 08:02.000
go through depending on certain predicates and or attributes.

08:02.000 --> 08:04.000
That needs to be fast.

08:04.000 --> 08:10.000
And we live inside a, let's say, interesting ecosystem nowadays.

08:10.000 --> 08:17.000
So I need to be able to run sell in the go context, in the rust context,

08:17.000 --> 08:22.000
and in the rust context, but running on wasm.

08:22.000 --> 08:25.000
All right, so getting started, that's probably very easy.

08:25.000 --> 08:29.000
You probably all seen that, so that's all you need to do.

08:29.000 --> 08:37.000
And this is how you would evaluate sell and like from a rust program.

08:37.000 --> 08:43.000
So we simply compiled the program.

08:43.000 --> 08:48.000
This could obviously fail, could it could not be valid sell.

08:48.000 --> 08:55.000
We didn't create a so-called context and then execute the program passing in that context.

08:55.000 --> 08:57.000
In this case, we're not doing anything with that.

08:57.000 --> 08:59.000
I'll show in a bit what happens.

08:59.000 --> 09:03.000
Again, it unwrap the result out there, because again, that could fail.

09:03.000 --> 09:07.000
And now we're making sure that the value is actually true.

09:07.000 --> 09:13.000
So the type of value is actually a sell value, and we provide all the,

09:13.000 --> 09:19.000
well, the typing should go coding to make sure that you can go from either direction back and forth.

09:19.000 --> 09:24.000
So that's the end to, at the end of the, the true there in case that wasn't clear.

09:24.000 --> 09:30.000
Right, so obviously comparing one to one is not very useful.

09:30.000 --> 09:34.000
So what you want to do is, so what you do is you use the context.

09:34.000 --> 09:39.000
I actually provide, I guess, context to this set expression being evaluated.

09:39.000 --> 09:44.000
So in this case, we're passing a variable in there with the claim variable,

09:44.000 --> 09:48.000
and we do it as the value 10, and now I can do math.

09:48.000 --> 09:56.000
And again, execute and full time series in the 20.

09:56.000 --> 10:02.000
You can also provide functions, the clear functions for your program to use.

10:02.000 --> 10:08.000
That's how you extend sell to do whatever may be appropriate for your domain.

10:08.000 --> 10:12.000
So that's one example of adding a function, just providing a closure,

10:12.000 --> 10:18.000
and it takes two arguments of, yeah, those are 64 back to the,

10:18.000 --> 10:20.000
to the sugar coding that we do.

10:20.000 --> 10:26.000
You don't need to care necessarily about the necessarily some case you will have,

10:26.000 --> 10:28.000
but let's say for those kind of types that's straightforward.

10:28.000 --> 10:32.000
So doing math, we can now do add 10, 10, 10,

10:32.000 --> 10:36.000
and we get a 20 out of the there, so that works too.

10:36.000 --> 10:40.000
So about that sugar coding, looking a little deeper how this works,

10:40.000 --> 10:44.000
how this works, I'm adding a function now, is empty.

10:44.000 --> 10:46.000
The function is declared where I'd be low.

10:46.000 --> 10:50.000
There is this weirdo thing, this is supposed to be an arc of a string,

10:50.000 --> 10:58.000
because yes, sell is, it's certainly thread safe.

10:58.000 --> 11:02.000
It's not really concurrent, but you can run on concurrent stuff.

11:02.000 --> 11:06.000
So if I don't need an expression one, share it with many threads.

11:06.000 --> 11:10.000
The same is actually somewhat through with the context, just as much,

11:10.000 --> 11:14.000
and then have that stuff being evaluated in different,

11:14.000 --> 11:18.000
share the cost threads and evaluating over multiple places.

11:18.000 --> 11:22.000
So that's adding a, is empty method on string, so add the function.

11:22.000 --> 11:26.000
So this weird thing that I just talked about now, I can have this,

11:26.000 --> 11:30.000
sell expression that just will, my string is empty,

11:30.000 --> 11:34.000
will be through a false depending on the string value of my string.

11:34.000 --> 11:38.000
So again, all that is was just a little bit more sugar coding,

11:38.000 --> 11:42.000
that's actually everything being gone.

11:42.000 --> 11:44.000
That's a function that always fails.

11:44.000 --> 11:48.000
So it actually takes a function context that has all the information

11:48.000 --> 11:50.000
that you really care about.

11:50.000 --> 11:54.000
That's a glance into that.

11:54.000 --> 11:59.000
And then you resolve, resolve, resolve to just resolve that,

11:59.000 --> 12:02.000
either contains a value or an executioner,

12:02.000 --> 12:05.000
and execute the thing you asked us to execute,

12:05.000 --> 12:10.000
which in this case would be the case, because that function always fails.

12:10.000 --> 12:18.000
All right, so back in 2024 is when I got involved with set rust.

12:18.000 --> 12:22.000
Again, I was just looking for cell support and rust.

12:22.000 --> 12:26.000
I found the scrape that was started.

12:26.000 --> 12:29.000
Around 20, 20 something.

12:29.000 --> 12:32.000
Then got somewhat a limbo for a time,

12:32.000 --> 12:36.000
then came out of the ash as yet again.

12:36.000 --> 12:38.000
And so I found a few bugs there,

12:38.000 --> 12:40.000
started submitting and whatever.

12:40.000 --> 12:44.000
And very friendly folks, all that went through.

12:44.000 --> 12:46.000
And then one day one weird bug came up,

12:46.000 --> 12:50.000
which was somewhat related to function dispatch code.

12:50.000 --> 12:54.000
That wasn't really working, asked to go implementation was working.

12:54.000 --> 12:58.000
And because we need those expressions to be able to

12:58.000 --> 13:02.000
be the same regardless of the environment that you're running,

13:02.000 --> 13:04.000
which I guess most people would want.

13:04.000 --> 13:08.000
I was like, okay, so what is going on there?

13:08.000 --> 13:10.000
I think that leads to the next thing.

13:10.000 --> 13:14.000
Yes, I guess I can fix that.

13:14.000 --> 13:17.000
So that was toward the end of 2024, I think.

13:17.000 --> 13:20.000
And looking into it, actually the bug was related

13:20.000 --> 13:24.000
that they use a different grammar than the other parsers.

13:24.000 --> 13:28.000
So I'm like, okay, well, we should be able to fix that.

13:28.000 --> 13:30.000
How hard can it be?

13:30.000 --> 13:34.000
When you're not really young anymore, but I'm still stupid.

13:34.000 --> 13:36.000
So as I go, okay, let's fix that.

13:36.000 --> 13:40.000
So the actual grammar is an envelope for grammar.

13:40.000 --> 13:42.000
That all the other implementation use.

13:42.000 --> 13:46.000
So I'm like, okay, well, just generate rust code

13:46.000 --> 13:48.000
from an after grammar, right?

13:48.000 --> 13:50.000
That's what Hitler does.

13:50.000 --> 13:52.000
Well, no, it doesn't.

13:52.000 --> 13:54.000
It doesn't do it for rust.

13:54.000 --> 13:56.000
So I found this antler rust rate.

13:56.000 --> 13:58.000
I'm like, okay, that's great.

13:58.000 --> 14:00.000
We'll just use that.

14:00.000 --> 14:04.000
So I ended up actually doing, I had to fork this library

14:04.000 --> 14:08.000
because the person who started it hasn't been active for

14:08.000 --> 14:10.000
three years.

14:10.000 --> 14:14.000
Actually, they come back somewhat last December for a few days

14:14.000 --> 14:18.000
and then redistipured.

14:18.000 --> 14:20.000
Anyways, I heard there's a war going on here.

14:20.000 --> 14:24.000
So anyways, I don't know what's going on, but always been luck.

14:24.000 --> 14:26.000
But so I ended up rewriting the entire parser,

14:26.000 --> 14:28.000
fixing this antler stuff.

14:28.000 --> 14:33.000
So we now have a different antler for rust rate

14:33.000 --> 14:35.000
that people can use.

14:35.000 --> 14:38.000
At the same time, we started running a fuzzer

14:38.000 --> 14:42.000
on our implementation and that way

14:42.000 --> 14:47.000
we found including bunch of bugs in the parser library

14:47.000 --> 14:50.000
and the rust parser library.

14:50.000 --> 14:55.000
So anyways, so you're like, why are you doing all this stuff?

14:55.000 --> 14:59.000
That doesn't sound like the same things to do.

14:59.000 --> 15:02.000
I probably could have fixed the grammar

15:02.000 --> 15:07.000
as I did initially in 2024,

15:07.000 --> 15:10.000
but actually spending more and more time

15:10.000 --> 15:13.000
in the other implementations,

15:13.000 --> 15:16.000
what cell is all about as those things, right?

15:16.000 --> 15:18.000
And other than extensibility,

15:18.000 --> 15:22.000
actually most of it is very much done at the ST level.

15:22.000 --> 15:27.000
So I have the abstract syntax tree level that results from the parsing.

15:27.000 --> 15:29.000
So I decided I want to align that

15:29.000 --> 15:34.000
and this actually more reasons why we want to align that.

15:34.000 --> 15:37.000
So the first one is fast.

15:37.000 --> 15:40.000
So we want things to be fast.

15:40.000 --> 15:46.000
And so that's shamelessly stolen from the Google website.

15:46.000 --> 15:49.000
The way that cell works, the idea is

15:49.000 --> 15:51.000
that you actually parse one,

15:51.000 --> 15:54.000
store the ST, share the ST across your infrastructure

15:54.000 --> 16:03.000
and then use that to evaluate your expression.

16:03.000 --> 16:06.000
So we want to be able to parse and go

16:06.000 --> 16:11.000
and then send it to Rust and wherever for evaluation.

16:11.000 --> 16:14.000
So yeah, that's the story I was just telling, right?

16:14.000 --> 16:16.000
So Antler has no target.

16:16.000 --> 16:20.000
Antler Rust existed, but abandoned and whatnot.

16:20.000 --> 16:21.000
So fix that.

16:21.000 --> 16:24.000
So again, if you care that exists now,

16:24.000 --> 16:27.000
I'll give many credits at the end of the stock on

16:27.000 --> 16:30.000
why that actually even exists.

16:30.000 --> 16:33.000
So with a conforming parser now,

16:33.000 --> 16:36.000
like the ST that it produces actually

16:36.000 --> 16:40.000
compliant with the ST that the other implementation

16:40.000 --> 16:43.000
produces, you're like, well, we must be good, right?

16:43.000 --> 16:46.000
So this Christmas, I had to excel.

16:46.000 --> 16:49.000
So what do you do? You write code.

16:49.000 --> 16:54.000
And I just decided to open up the interpreter

16:54.000 --> 17:00.000
to be completely, well, it's not entirely yet.

17:00.000 --> 17:03.000
Completely agnostic from the types you saw the beginning.

17:03.000 --> 17:06.000
I actually tell as internally a trade system,

17:06.000 --> 17:10.000
and it doesn't really care that your list is a list, first

17:10.000 --> 17:13.000
there, right? There is a list third trait that itself

17:13.000 --> 17:15.000
is composed of different traits.

17:15.000 --> 17:18.000
So people can actually provide different implementation

17:18.000 --> 17:21.000
of certain types, including the interpreter itself.

17:21.000 --> 17:24.000
When it's example given resolving the macro that you saw

17:24.000 --> 17:27.000
at the beginning, this all one that I used,

17:27.000 --> 17:32.000
there's one that, for instance, map a list of strings

17:32.000 --> 17:34.000
to a list of integers, for instance, right?

17:34.000 --> 17:38.000
I don't know on many of you know about run times,

17:38.000 --> 17:41.000
but it's quite a few tricks you can play

17:41.000 --> 17:43.000
if you can control the list that's being mapped

17:43.000 --> 17:45.000
in such a macro.

17:45.000 --> 17:48.000
So, again, seeing things just send up

17:48.000 --> 17:50.000
not as much as a large PRS, the other one,

17:50.000 --> 17:53.000
but so this refactoring that has no impact

17:53.000 --> 18:00.000
on any of the APIs that people have been using so far

18:00.000 --> 18:05.000
ended up in this PR, but it was a good Christmas break.

18:05.000 --> 18:08.000
So, but what am I doing, right?

18:08.000 --> 18:11.000
Why am I doing all those things?

18:11.000 --> 18:16.000
So, one issue that sells the Russ Center

18:16.000 --> 18:19.000
but currently has today is it doesn't really

18:19.000 --> 18:23.000
support what cell calls overloads.

18:23.000 --> 18:25.000
So, did I put some highlighting there?

18:25.000 --> 18:27.000
Yes, I did. Awesome.

18:27.000 --> 18:31.000
So, here what we're doing is we're writing a quick program

18:31.000 --> 18:36.000
that, and what we're trying to do is add a size function

18:36.000 --> 18:40.000
to support a size function, right?

18:40.000 --> 18:44.000
The problem that we have with this is that size

18:44.000 --> 18:48.000
exists on containers, right?

18:48.000 --> 18:51.000
So, on collections. In the case, here we're creating an array

18:51.000 --> 18:53.000
with one and two.

18:53.000 --> 18:58.000
A 64 in them, and that should return to, right?

18:58.000 --> 19:02.000
So, if you execute that, that's actually going to fail now

19:02.000 --> 19:05.000
because the right-hand side of the equal equal operator

19:05.000 --> 19:09.000
will say, well, I don't know how to solve that

19:09.000 --> 19:13.000
because your function expects a i64.

19:13.000 --> 19:16.000
So, what you did is you overload the size function

19:16.000 --> 19:21.000
that the default context comes with.

19:21.000 --> 19:27.000
And so, back again on this graph, if you pay attention,

19:27.000 --> 19:31.000
there is this yellow thing that says check.

19:31.000 --> 19:34.000
Check is a very interesting.

19:34.000 --> 19:38.000
It takes you ST in and applies many tricks on that

19:38.000 --> 19:41.000
ST, including ending up transforming it.

19:41.000 --> 19:44.000
Example given for making sure that those function exists.

19:44.000 --> 19:46.000
So, now I can make sure that when somebody

19:46.000 --> 19:49.000
calls size, that size function exists.

19:49.000 --> 19:53.000
One is being called on a proper types, two.

19:53.000 --> 19:57.000
Three, internally, you can do, you can avoid

19:57.000 --> 19:59.000
resolving the dynamic dispatch.

19:59.000 --> 20:01.000
You can now do it at check time.

20:01.000 --> 20:06.000
I know the left-hand side was the one on the array, right?

20:06.000 --> 20:09.000
So, we're coming in on the array, it's that function.

20:09.000 --> 20:12.000
It's the same name, but I don't need to do a

20:12.000 --> 20:15.000
more thick method called resolution, right?

20:15.000 --> 20:18.000
I can know what we're talking about and be very quick

20:18.000 --> 20:20.000
at evaluation time.

20:20.000 --> 20:24.000
So, the check phase is something that we don't have right now.

20:24.000 --> 20:27.000
And probably with the API that you saw,

20:27.000 --> 20:31.000
it's going to be somewhat awkward at the very least.

20:31.000 --> 20:34.000
You've right now solved it in a non-breaking way, right?

20:34.000 --> 20:38.000
All these other things I've done that have not changed

20:38.000 --> 20:42.000
any APIs, other than possibly the cell,

20:42.000 --> 20:47.000
but now the cell is being parsed correctly.

20:47.000 --> 20:50.000
Because what we're trying to do today,

20:50.000 --> 20:52.000
I did put some highlighting.

20:52.000 --> 20:54.000
So, again, what you saw before this program

20:54.000 --> 20:58.000
compile is just nice APIs, but so, what happens

20:58.000 --> 21:01.000
internally is you create a parser, you parse your thing,

21:01.000 --> 21:04.000
hopefully that worked out, you create a context.

21:04.000 --> 21:08.000
And so, before we were calling like resolve right away

21:08.000 --> 21:10.000
passing that context, right?

21:10.000 --> 21:13.000
The context actually can play sort of two concepts,

21:13.000 --> 21:18.000
like the dysfunction registry and the variables.

21:18.000 --> 21:20.000
And so, that's a bit of a problem.

21:20.000 --> 21:22.000
So, that could be one, like let's say check there

21:22.000 --> 21:24.000
as a magic function, wherever it lives.

21:24.000 --> 21:25.000
We don't care, right?

21:25.000 --> 21:27.000
That's all hypothetical, that doesn't exist.

21:27.000 --> 21:31.000
So, we will need to fix those things in a now

21:31.000 --> 21:32.000
breaking way.

21:32.000 --> 21:35.000
So, I was trying to get all that stuff done,

21:35.000 --> 21:37.000
what I called CDD.

21:37.000 --> 21:40.000
It's a conference-driven development.

21:40.000 --> 21:44.000
Yeah, it wouldn't necessarily recommend it

21:44.000 --> 21:46.000
as a whatever.

21:46.000 --> 21:49.000
So, I failed, I didn't get to get that done by yesterday.

21:49.000 --> 21:53.000
I was hoping to release the new thing here.

21:53.000 --> 21:54.000
But so, that didn't happen.

21:54.000 --> 21:56.000
So, that's the road ahead and where we are

21:56.000 --> 21:58.000
with cell rust, right?

21:58.000 --> 22:00.000
So, and by the way, and by the way.

22:00.000 --> 22:04.000
So, I'm wrapping up this overload problem.

22:04.000 --> 22:05.000
Introduce.

22:05.000 --> 22:07.000
Then we want to introduce the type checking,

22:07.000 --> 22:11.000
making sure that now we can sort of guarantee

22:11.000 --> 22:13.000
that nothing will ever go wrong.

22:13.000 --> 22:16.000
Start implementing all the perf stuff,

22:16.000 --> 22:20.000
which by the way has been going on already in parallel

22:20.000 --> 22:23.000
with my den, vowel, all the things.

22:23.000 --> 22:28.000
Some other contributor has been starting doing

22:28.000 --> 22:31.000
like performance-driven work, but because some of the

22:31.000 --> 22:34.000
endopinings have to change sort of put you in the

22:34.000 --> 22:36.000
weird position.

22:36.000 --> 22:40.000
And then eventually get to the protobuff and well-known

22:40.000 --> 22:44.000
types support a transparent support.

22:44.000 --> 22:46.000
So, that's effectively sugarcoding, right?

22:46.000 --> 22:49.000
Again, the API, so that you can pass in

22:49.000 --> 22:52.000
JRPC message that you get from somewhere

22:52.000 --> 22:55.000
and just inject it in the context and we figure everything

22:55.000 --> 22:56.000
out for you.

22:56.000 --> 22:58.000
So, that's all the fun stuff.

22:58.000 --> 23:00.000
If any of that sounds fun to you,

23:00.000 --> 23:02.000
I think you should come and talk to me.

23:02.000 --> 23:06.000
So, this is the legal disclaimer.

23:06.000 --> 23:11.000
None of what we have today would exist

23:11.000 --> 23:13.000
with a bunch of those people listed here,

23:13.000 --> 23:16.000
and I think they all deserve credits.

23:16.000 --> 23:20.000
So, a cleric is the person who invited me

23:20.000 --> 23:23.000
as a second maintainer on the project.

23:24.000 --> 23:28.000
Tom, I think as a person who started this many years ago,

23:28.000 --> 23:31.000
Adam is actually a colleague of mine who implemented the

23:31.000 --> 23:34.000
support, the optional support that you saw previously.

23:34.000 --> 23:37.000
John Howard, if you're an Istio user,

23:37.000 --> 23:40.000
you might know that person has been like

23:40.000 --> 23:44.000
awesome in terms of contributions and making sure

23:44.000 --> 23:46.000
that we become more performant.

23:46.000 --> 23:49.000
So, the antifore rust stuff has happened with

23:49.000 --> 23:52.000
the consenting base project.

23:52.000 --> 23:55.000
Ken has been teaching me so much about

23:55.000 --> 23:59.000
antler and parsers that I didn't know about,

23:59.000 --> 24:01.000
and now I know, I don't know if you're about that part,

24:01.000 --> 24:03.000
but at least we got it working

24:03.000 --> 24:06.000
without this help, I wouldn't have been able to

24:06.000 --> 24:09.000
fix the antifore rust crate.

24:09.000 --> 24:11.000
Yeah, and then especially thanks to a person who wrote this

24:11.000 --> 24:13.000
present term, I can run presentation.

24:13.000 --> 24:15.000
My terminal, I think that's pretty geeky.

24:15.000 --> 24:17.000
I think you should do it too,

24:17.000 --> 24:21.000
somebody else do it the four cell ops.

24:21.000 --> 24:22.000
So anyway, so that's that.

24:22.000 --> 24:25.000
If you want to know more, sell dash rust on

24:25.000 --> 24:29.000
GitHub, Quadron DiO's the project that I work on

24:29.000 --> 24:31.000
if you have any interested in that.

24:31.000 --> 24:33.000
So, thank you so much for listening to my nonsense

24:33.000 --> 24:35.000
and if there are any questions.

24:35.000 --> 24:38.000
Thank you.

