WEBVTT

00:00.000 --> 00:13.960
All right, hi everyone, I'm Hisham, and of course the obvious thing to say is that like

00:13.960 --> 00:21.200
Christine's a tough actor fall, like after all that energy, but yeah, I think we're going

00:21.200 --> 00:27.760
to, one thing is down a bit and get a bit philosophical about first software maintainership,

00:27.760 --> 00:31.720
project directions and all those kinds of things, so I think it's going to be pretty

00:31.720 --> 00:43.240
chill. And yeah, so as many of you know, and I see many friends here, I have, I have

00:43.240 --> 00:48.360
started several, this is feeding back a little like, but I hope it's okay in the recording.

00:48.360 --> 00:53.440
I have started several for software projects myself, and I guess maybe one of the takeaways

00:53.440 --> 00:57.960
of this talk, probably of all my talks, is to try to encourage people to start their own

00:57.960 --> 01:03.240
little projects, like I love big visions and I love big communities, but personally my thing

01:03.240 --> 01:10.720
has always been like starting little projects and I've done a few of them, and with very

01:10.720 --> 01:17.160
outcomes, and some of you have mentioned before, like I think like the most popular one is

01:17.160 --> 01:24.680
a stop, the process viewer, which I've worked on for about like 15 years or something,

01:24.680 --> 01:32.080
and yeah, and that got like, you know, that got really big and popular, and another one

01:32.080 --> 01:37.080
which is, which found its niche is Lourox, the package manager for the Louro programming

01:37.080 --> 01:47.120
language, so that also started as a small project and ended up getting like, lots of

01:47.120 --> 01:53.760
usage, at least like within the small universe that is the world and it's very subcommunist,

01:53.760 --> 01:58.600
and, but then again, I also made like my own little text editor, which I use as my daily driver,

01:58.600 --> 02:03.280
and which I have like basically like one user, and I get surprised when someone sends an email

02:03.280 --> 02:09.160
or something, and I don't expect anyone else to use it.

02:09.160 --> 02:14.760
So yeah, so here, when we talk about minimalism and many of the talks that we see here,

02:14.840 --> 02:20.840
we often talk about small projects, and like, it's fair to see those things as small projects as well,

02:20.840 --> 02:27.720
and, and when we look at the history of how it went, like, many people know the story,

02:27.720 --> 02:33.960
like I have maintained the H stop for like about 15 years, and if you look at the

02:33.960 --> 02:38.840
commit graph history and my commit graph history over there, like I'm, I'm happy to report

02:38.840 --> 02:42.920
that I have been since overtaken in the number of commits, like by one of the current

02:42.920 --> 02:47.480
maintainers, but basically like up to like the first three quarters of the graph,

02:47.480 --> 02:52.920
they pretty much like matched my graph there, and then we have this like flurry of activity

02:52.920 --> 02:56.680
now that there's a new maintainer team carrying on with the project, so I'm super happy

02:56.680 --> 03:03.480
about that outcome over there, and, and I can tell you like at that point somewhere around

03:03.480 --> 03:08.280
there, after the less big bursts that I did, I won't point like I was happy with

03:08.600 --> 03:14.040
it, everything I needed, you know, the whole scratcher on edge thing was done, and I honestly

03:14.040 --> 03:20.200
felt like the project was finished, and, and really like, I pretty much lost interest in it,

03:20.200 --> 03:25.800
right, so I'm happy there is people who are interested, I've met, just met here, it falls

03:25.800 --> 03:32.040
them, been one of the current maintainers, like, bandy here, for the first time, in person,

03:32.040 --> 03:37.640
and it's been, it's been an awesome experience, like on the other hand, like, the little text

03:37.640 --> 03:42.040
editor, you know, it keeps going like, they're not up to the same scale, but like,

03:42.040 --> 03:45.800
it just keeps going, like if I need something, I may have a little change, and it just keeps going

03:45.800 --> 03:54.200
as my own little project, right, which basically my current like focus on excitement, my current

03:54.200 --> 04:01.400
will project, which is teal, teal is, you can think of teal as what type script is to JavaScript,

04:01.480 --> 04:07.000
so basically like teal is a pun on teal, like those of you who were the 2019 fuzzling talk,

04:07.000 --> 04:12.440
when it still didn't have a name, the working title for the project was teal, and I kept calling

04:12.440 --> 04:19.640
it teal teal teal teal teal and it, like, and I like the color, so, and, and just, like, so yeah,

04:19.640 --> 04:27.320
that was 2019 me talking about it, and so this is, like, a type, dialect of Lua, and Lua,

04:28.200 --> 04:33.880
sometimes I forget to talk about Lua, and to give a bit of a primer, right, Lua is this dynamic

04:33.880 --> 04:39.800
language, which is, was developed in Brazil at the Pucario University at Rio de Janeiro,

04:40.680 --> 04:49.160
and in the, in the 90s, so, at one point in the 2000s, when I was like, thinking of applying

04:49.160 --> 04:55.160
to Grasco, Lua was the only programming language, like, that reached the main stream that was

04:55.160 --> 05:02.120
not developed in the global north, so, actually it was like, one of the two only ones that were

05:02.120 --> 05:06.760
not from Western Europe or the United States, because the other exception was Ruby from Japan,

05:07.640 --> 05:13.800
and so, is this scripting language that's super small, it's designed to be embeddable,

05:13.800 --> 05:19.560
so it found niches in networking areas and up working with it a lot in that field,

05:20.520 --> 05:27.000
gaming industry, mainly, and embedded systems, and to put a human face to it, here's a picture

05:27.560 --> 05:31.400
from, I think, was last year, like, when we celebrated, like, 30 years of Lua, there was,

05:31.400 --> 05:36.760
they held a workshop in Rio de Janeiro, like, that's me, next to, to hold back the crates,

05:36.760 --> 05:41.800
are the language, there's Hogo, who's greater of Pauline, and, like, many other, like,

05:41.800 --> 05:48.520
of the alumni, and the next generation, like, the current undergrads in Rio, and the project

05:48.840 --> 05:54.280
keeps going on. And so, the idea of Tio was kind of, like, Lua, but for programming in the large,

05:54.280 --> 05:58.120
because Lua's design is this tiny, and we're talking about minimalism here, Lua's design is

05:58.120 --> 06:03.800
this tiny, minimalist language, but that doesn't stop people from using it, like, people end up,

06:03.800 --> 06:08.360
like, oh, I like Lua, it's so tiny, like, me start picking, writing more, more, more, more,

06:08.360 --> 06:14.520
stuff with it, so, in the end, people end up writing, like, entire applications, such as um, Lua rocks,

06:15.160 --> 06:22.360
uh, which, uh, it was not the right way to do it, because, like, in the end, like, it becomes kind of

06:22.360 --> 06:29.160
unwieldy, right, and being, like, a PL nerd, like, instead of, like, rewriting it in a better

06:29.160 --> 06:34.360
trice of language, no, let's make another language, so it can still keep writing it in Lua, but,

06:34.360 --> 06:42.840
but now it's type safety. So, uh, this is not really a coding talk, so, but just so I have, like,

06:43.000 --> 06:46.920
one slide with code, here's like a quick taste of Tila, it really looks like Lua, but then, like,

06:46.920 --> 06:52.280
the Tila colored bits are, like, to type annotations, we have, like, new operator here and there,

06:52.280 --> 06:58.680
and things to deal with types, and uh, this is a bit of foreshadowing on, like, uh, some of the

06:58.680 --> 07:07.560
things I want to talk about for, like, Tila's hazelnut, right? Uh, so Tila has evolved over the years,

07:07.640 --> 07:14.200
like, it starts from that little personal project that I presented in 2019, and now it has users,

07:14.200 --> 07:19.720
it has people who complain about it, it has people who, uh, send bug reports saying that the

07:19.720 --> 07:24.840
compilers do slow, and they're compiling hundreds of files at the time, and I go, like, oh my god,

07:24.840 --> 07:31.000
you have the Tila project that has hundreds of files, right? So, basically, I'm not the largest

07:31.080 --> 07:37.960
two user anymore, like, by, oh, by far, right? So, uh, so we do have a community that that has

07:37.960 --> 07:44.360
evolved around it, and, and I talked about it last year here, like, uh, you know, presentation

07:44.360 --> 07:50.920
call it five years of Tila, and an interesting thing was like this, uh, like, uh, this, uh,

07:52.600 --> 07:57.880
thing of, like, minimalism versus growth, like, this challenge that was already in place, right?

07:57.880 --> 08:02.760
And, and I talked about things of language design, and I talked about how people wanted safety,

08:03.400 --> 08:08.040
and to keep it in the minimalistic type thing, I thought, like, okay, how about instead of

08:08.040 --> 08:12.840
Neil safety, we give them, like, function error checks that would take them, like, a good deal of the

08:12.840 --> 08:17.720
way there, right? And then, I talked about how people wanted objects, people doing games, they love

08:18.520 --> 08:23.160
modeling their objects, so in the game world, there's an, using object orientation,

08:23.400 --> 08:27.800
and instead of, like, giving them a full-blown class system, I was like, okay, how about

08:27.800 --> 08:32.520
I give you interfaces with sub-typing, right? So, uh, my whole, the whole thing of the talk was

08:32.520 --> 08:37.240
how I was, how I was working on designing alternative solutions that we're trying to keep the

08:37.240 --> 08:46.440
minimalism of the language, right? And that's what it did. Uh, Tila, 2024, 2024 was released in

08:46.600 --> 08:53.240
October, uh, 2024, and it did include all those, uh, all those things, right? So, it didn't

08:53.240 --> 08:57.880
quickly air to checks, which was essentially now, and you don't have, like, optional types,

08:57.880 --> 09:02.680
but you have optional arguments, right? So, that things that used to be valid, such as, like,

09:02.680 --> 09:09.400
passing not enough arguments, because Neil is an implied zero type, zero object in every type,

09:10.440 --> 09:16.040
this used to be valid by now fails. So, it did give people more safety, right? And,

09:16.120 --> 09:20.120
air to checks were a success, because if you think back to it, like, this is something that was

09:20.120 --> 09:24.760
a valid thing that used to be accepted by the language, and sometimes it's what people actually

09:24.760 --> 09:29.640
wanted for it to be accepted. So, this was effectively a breaking change, and I was super

09:29.640 --> 09:33.400
scared of making a breaking change that was like, okay, people will now update their compiler,

09:33.400 --> 09:37.480
and now they're old, cold, no longer compiles, how are they going to react to that, right? So,

09:39.560 --> 09:45.320
so it took some talking to the community and, uh, reviewing what we'll be the alternatives for

09:45.320 --> 09:48.840
to dealing with that. So, if we eventually set up like a system with, like, there's a

09:48.840 --> 09:53.320
pragma that you can put in the code for enabling or disabling RIT checks, so that's, like,

09:53.320 --> 09:57.960
if you're requiring some other library that hasn't been converted to the Neil's tile yet,

09:57.960 --> 10:01.720
you can temporarily disable it, or if you're in our project hasn't been converted yet,

10:01.720 --> 10:07.000
you can pass it like a command line flag, like, I made it very, like, optional, but I turn it on

10:07.000 --> 10:13.640
by default, like, this is the new way the language works, right? And, uh, and I'm saying this was

10:13.640 --> 10:17.560
a success, because the feedback I'll got out of that after putting it all in the world and

10:17.560 --> 10:20.760
close my eyes and see, okay, I'm breaking people's code now, what's going to happen?

10:22.040 --> 10:28.600
Radio silence, like, I, nobody talked about the airy-teachets feature since it was out, like,

10:28.600 --> 10:32.600
except for maybe one or two people in the chat say, well, it caught some bugs that I had, like,

10:32.600 --> 10:37.960
now it fixed, they're like, put the question marks in and, and like, I got, like, a little bits

10:37.960 --> 10:42.680
and pieces of positive feedback, but apart from that, it was, like, silence. And, and I did mention

10:42.760 --> 10:46.920
that in last year's talk about how, like, you know, Persaurus most of, like, almost all of the

10:46.920 --> 10:51.160
feedback that you get is negative feedback. You have to come to conferences to meet people and people

10:51.160 --> 10:55.320
say, hey, I love your work, right? But people don't do it online, like, people are not going to

10:55.320 --> 11:03.800
email, thank you. So, uh, yeah, right? So, you have to, so, one small takeaway, like, take silence

11:03.800 --> 11:10.520
as a, right, you're doing good. And then I added the interfaces thing, right? So, the interfaces thing

11:10.600 --> 11:16.840
allowed you to do, uh, things that you couldn't before, such as making unions of different

11:16.840 --> 11:24.520
table types, and so that you could use the new, like, is operator for, uh, discriminating those,

11:24.520 --> 11:32.680
those unions. And I added, like, a mini macro system that could tell the compiler how to expand

11:32.760 --> 11:40.120
those, uh, is checks. And, uh, and across interfaces, we could have, uh, subtyping. So,

11:40.120 --> 11:44.760
this was a big undertaking, because Tio already had generics, and how those things interacted

11:44.760 --> 11:51.640
with the big, kind of worms, like, most of my work that I last year until went on this, right? So,

11:51.640 --> 11:55.960
I, but, and then this was, like, an entirely new feature, which was, like, entirely optional. You could

11:55.960 --> 12:00.600
just never put an interface and just continue using records, just not use this, not use this,

12:01.480 --> 12:08.280
not to use that and continue using Tio as always, right? And ignore this feature entirely, right?

12:08.280 --> 12:14.680
Unlike airy checks, which were breaking change that I imposed on everyone. And interfaces, I guess,

12:14.680 --> 12:20.440
were a success, because I got the other type of feedback. I got a ton of bug reports. I got

12:20.440 --> 12:25.160
lots of negative feedback on interfaces, but it was not negative feedback of the kind of,

12:25.160 --> 12:30.280
oh, this feature sucks. No, it was, I like the feature. I tried to use it, and this part doesn't

12:30.280 --> 12:35.560
work. Or I tried this, like, weird combination, and it failed, like, all of those other cases that

12:35.560 --> 12:43.160
I haven't checked, right? Uh, yeah. So, like, this is, like, a filter off the issues list, like,

12:43.160 --> 12:49.160
bug bugs and, and all of the things, when people started, like, trying out, uh, trying out

12:49.160 --> 12:56.920
interfaces. So, uh, yeah. So, like, after that, we worked on it, like, 24.0, 24.1, 0.2.3,

12:56.920 --> 13:02.920
and then we worked out on the issues, like, all of these issues are closed now. And, uh, but the

13:02.920 --> 13:07.400
interesting thing was that the feedback was not only about bugs. Uh, the feedback was also about,

13:07.400 --> 13:11.960
like, I'm trying to use the feature, but it feels weird, like, I'm failing to achieve what I'm trying

13:12.920 --> 13:19.160
to achieve with it. And, uh, yeah, because, because, and then again, like, another thing is that,

13:19.160 --> 13:24.200
like, not of all of the issues here are red. Some of them are, like, yellow. Have the yellow type,

13:24.200 --> 13:28.280
which is, like, semantics. It's like, people asking questions. I'm trying to do this, but it doesn't

13:28.280 --> 13:32.120
work. And then, uh, and then I have a, I'll reply saying, yes, it doesn't work because,

13:32.680 --> 13:36.680
semantic reason, x, y, z, and they go, okay, so I'm going to try something else, right? And then,

13:36.680 --> 13:40.520
okay, that doesn't work either. Or, oh, yeah, thanks, that worked, and then it closed the issue.

13:40.760 --> 13:45.400
Right? So, uh, there were some back and forth that did not classify us bugs, but I was, like,

13:45.400 --> 13:53.800
figuring out how to use this in real life. So, but then, the, especially given those, like, yellow ones,

13:53.800 --> 13:59.080
like, the conclusion was that, okay, it was a good idea to introduce this, but it's efficient,

13:59.080 --> 14:06.680
right? They did not address, like, what people were really asking for. Right? So, uh, so Lua,

14:06.760 --> 14:12.440
one of the ways that Lua is so minimalistic, and one of the sources of excess is this motto,

14:12.440 --> 14:18.200
like, mechanism, not policies, right? People, so basically the thing that I was trying to do in

14:18.200 --> 14:23.560
which, like, people ask for features, and instead of that, they add features, then allow you to build

14:23.560 --> 14:29.240
the feature or self yourself, right? And that's, like, it's very influence. It's part of not having,

14:29.240 --> 14:33.240
like, the parentheses are not looking, like, Lua is very influenced by skin, like, how bad

14:33.240 --> 14:38.760
something self has said that. So, this whole thing about, like, giving the, you know, giving the

14:38.760 --> 14:47.400
developer the tools for them to develop the, the features that they want. But, uh, when I try to

14:47.400 --> 14:52.440
do that with interfaces, I started getting some, like, feedback, and, like, people starting to do this,

14:52.440 --> 14:57.160
like, child class new instance of the parent classes, this, and that with super with, and that,

14:57.160 --> 15:02.040
and getting to the conclusion, like, okay, the compiler does not type this, does not accept this,

15:02.040 --> 15:06.440
and they go, like, is there a way to type this correctly? Do I have to do inherits inheritance

15:06.440 --> 15:10.840
rust style, right? Because I was giving them, like, something that kind of looked like traits,

15:10.840 --> 15:17.160
really, right? And, and rust has this way of, like, going, now, no, don't do, like, Java style,

15:17.160 --> 15:21.800
OOP, you know, like, do this other thing, right? And I'm featuring here in my slides,

15:21.800 --> 15:25.800
because, like, there's one comment of him saying, like, yeah, like, reading the conversation,

15:25.800 --> 15:29.880
I thought the same, the doc says that interface can be used with object libraries, but do not

15:29.880 --> 15:35.800
demonstrate how, right? Because, uh, uh, uh, uh, and then, like, this same user also tried something

15:35.800 --> 15:39.960
else, and they go, like, polymorphism could also work, although I value my sanity, right?

15:39.960 --> 15:44.680
They were going crazy, trying to fix their problems, like, you, trying really hard to use interfaces,

15:44.680 --> 15:48.360
they were really giving it a shot, right? But they were hitting, like, difficulties there.

15:49.080 --> 15:53.320
And, and I think we have touched on an important point here, because when I release this,

15:53.880 --> 15:58.760
I, uh, I think I oversold the future, by saying, like, oh, you see this, all those

15:58.760 --> 16:03.160
little object models there out there, now you can use them, because I thought that, okay, by,

16:03.160 --> 16:07.880
by putting, like, uh, I'm going back, like, by putting this little macro system that could just

16:07.880 --> 16:14.120
fit to whatever kind of, uh, object class differentiation you could use, like, in different style,

16:14.120 --> 16:18.920
like, okay, one's an attribute, one's a method. Here you could, like, macro your way into accepting

16:19.000 --> 16:25.000
all of that, I thought that would be sufficient. But what I was really thinking was, uh, what I was

16:25.000 --> 16:30.520
really thinking of was the existing object models done in Louis, such as, like, the love to the

16:30.520 --> 16:34.520
object model and things like that, like, objects that are already existed in Louisland, in your

16:34.520 --> 16:38.840
application, that you just wanted to give it types, then you just give it interfaces and everything work.

16:38.840 --> 16:44.120
But, well, these folks here were trying to do, they were trying to build their own new object

16:44.200 --> 16:49.160
systems in Louis, itself, and till itself, they wanted to do the inheritance, they wanted to do,

16:49.160 --> 16:57.400
like, uh, so for that, the interfaces were, uh, were insufficient. But, uh, but at the same time,

16:57.400 --> 17:01.880
we knew that interfaces, even as they are, they were useful. Like, when one of the reason was,

17:01.880 --> 17:07.720
uh, you saw this morning, if you were here, uh, my Google summer code, uh, student, uh, Victor,

17:07.720 --> 17:13.160
who presented here, he did the porting of Lourox, called base to teal, and at one point he was using

17:13.240 --> 17:21.240
light teal stable version, and he kept hitting issues with how to properly type, uh, some

17:21.240 --> 17:25.480
table relationships that I said, like, okay, really need those interfaces. So he switched to the

17:25.480 --> 17:30.680
in development version of, of the compiler and started using interfaces given, you feedback,

17:30.680 --> 17:35.480
how things were working or not, and eventually got, like, got it where was one of the reasons

17:35.480 --> 17:40.280
I'd hit all the way through the port, and I was, as I was adding interfaces, I keep like,

17:40.280 --> 17:45.480
job footing all the time. I started using the interfaces in the compiler itself, and it got,

17:45.480 --> 17:50.760
like, so much better, like, catching things, because otherwise, like, before I had, like, two big

17:50.760 --> 17:56.440
types, like, god-type, like, nodes that's, like, all of the types of nodes of the ST, and another

17:56.440 --> 17:59.720
one called type, which is like, every possible type, with every possible attribute that a

17:59.720 --> 18:05.880
type has, and then I, I broke the type type into a series of, like, a map type and a rate type,

18:06.360 --> 18:11.560
so in that sense, like, okay, so now the compiler actually feels type, because before, you know,

18:11.560 --> 18:16.600
and you're, you're, you're kind of type language, but you're basically only using two types all the time.

18:16.600 --> 18:24.200
So, like, uh, I mean, also I knew that it was, uh, useful in a sense, right? It was a step forward,

18:24.200 --> 18:28.680
but then, what, what we hit there was this distinction between, like, okay, so what do people

18:28.680 --> 18:34.920
want, right? Really? And what I, what do I, the project author want, like, when we're doing

18:35.000 --> 18:39.480
our small project, then we're being happy, like, you know, coding in our free time and, and,

18:39.480 --> 18:45.800
and doing stuff, right? So, I tend to think about this, like, music, and, uh, in music, like, you

18:45.800 --> 18:50.520
often hear, uh, people, like, the standard advice that everyone says, like, oh, you may have to make

18:50.520 --> 18:56.040
the music that you, yourself, want to hear, like, and all of that, but, like, I think that's not

18:56.040 --> 19:00.360
true in practice, like, if everybody makes music, because they want to be heard, right? Like,

19:00.680 --> 19:06.040
because in the end, like, art is a form of communication, and I think, like, free software development

19:06.040 --> 19:10.440
is as well, right? Like, if you, you're, you're right, code, and you put it out there. You want to

19:10.440 --> 19:15.400
have users, right? It's not like, you know, I don't want to just, you know, keep playing my guitar,

19:15.400 --> 19:19.160
locked in my bedroom, and nobody will ever hear it, or, and I don't want to write code that will

19:19.160 --> 19:25.160
never leave my own machine. So, there's a balance to be struck, right? And if you, if you're

19:25.240 --> 19:31.400
go as commercial, then you're going to just focus on what your ping customers want, which is not

19:31.400 --> 19:35.880
even what the majority wants. Like, if you're, like, an open core model or something like that. Like,

19:35.880 --> 19:41.960
if your goal is, like, uh, fame and people are people to like you, then you just cater to what

19:41.960 --> 19:48.440
people want. But then, uh, you might just end up losing interest over time, because it's,

19:48.440 --> 19:53.480
it's not meaningful to you. So, there's, uh, I think in the end, there's this thing about, like, going

19:53.560 --> 19:58.120
for, thinking about what you want and what people want to like. So, what I want is to have fun,

19:58.120 --> 20:05.560
I want to keep, you know, merely, uh, going my way, uh, coding, uh, but I also want people to use it

20:05.560 --> 20:09.720
into like it. Right? So, when going back to all those things that people talked about, like,

20:10.760 --> 20:15.800
when I saw that people wanted, uh, when I saw that people wanted Neil safety, like, what,

20:15.800 --> 20:21.240
what kept in my head was always like, okay, if I had, if I had Neil safety, but then I added,

20:21.240 --> 20:26.760
like, the way I type scripted it, the first turn around and like, okay, now types can't be Neil, but

20:26.760 --> 20:32.200
if you index and array, you get like an array of T, you get a T when you get out of that, but like,

20:32.200 --> 20:36.280
you can index out of bounds and you could still get a Neil. So, the right thing to do with,

20:36.280 --> 20:41.880
to return option, Neil, but then, like, people would have to, like, to test on Neil, like,

20:41.880 --> 20:45.880
every single time, and it would be like super annoying, like, and then, yeah, but then you

20:45.880 --> 20:50.840
cut that corner, but then when it crashes, like you end up in your head, like, having these conversations,

20:51.400 --> 20:55.800
so in the end, was like, what if I do it, and it's not Neil safe enough, like, with one little

20:55.800 --> 21:00.840
Neil escapes and crashes, people's code, and I promise them that it will be Neil safe, right?

21:01.640 --> 21:06.280
And when people wanted objects, I knew that, like, in the new world, there were, like,

21:06.280 --> 21:10.760
seven, different, incompatible object models, and like, and if I gave them an object model,

21:10.760 --> 21:15.240
all right, okay, here's like, new keyword called class, and I'm going to do the set meta-table,

21:16.200 --> 21:21.560
like, automatically, for you, and give you, like, a model that, like, does all of the, the

21:21.560 --> 21:25.400
wiring of inheritance, and everything, like, but a lot of people want a different model,

21:25.400 --> 21:29.320
why to say, okay, this is useless, because it's not useful with, like, the object model that's

21:29.320 --> 21:34.200
already in my lower game engine, and things like that, right? So, I realized that I was always,

21:35.080 --> 21:42.120
escaping from those hard asks, like, because of this game of, like, what if, what if, right?

21:42.840 --> 21:47.880
In the end, this is, like, fear driven design, right? So, like, basically, it was because it was

21:47.880 --> 21:53.880
afraid of, like, people's reactions, right? And sometimes, I actually wanted to do those things

21:53.880 --> 22:00.920
myself, and then I thought, like, okay, what if the reaction is negative, right? So, a few lessons

22:00.920 --> 22:09.960
learned from the stuff that I did for 1224, was that, like, the success of the ART checks thing

22:10.040 --> 22:17.240
with the pragmas, and with, like, maybe someone, like, maybe the ART checks were problematic for

22:17.240 --> 22:21.080
people, but they found that there was a flag there, they, they disabled it, and they continued

22:21.080 --> 22:27.720
with their day, and never bothered me with, like, an issue report, right? So, for the Neil

22:27.720 --> 22:32.840
Safety thing, I could just think of all of those, what ifs, and make them, like, a separate

22:32.840 --> 22:36.600
pragma for each one of them, and let people, like, okay, if they're happy with this part of it,

22:36.600 --> 22:41.000
they can disable it, right? So, maybe, like, there's something that can be done there by adding

22:41.000 --> 22:47.960
gradually, for example. And for objects, maybe users are not that opinionated, like, because I'm

22:47.960 --> 22:52.680
also already, like, inside my head, like, envisioning the flame wars that would happen because

22:52.680 --> 22:57.560
of the wrong object model being picked, and all that. So, an anecdote on that regard was, like,

22:57.560 --> 23:02.520
when it started Lurox, like, it was the Wild West, for there was no package manager for Lurox,

23:02.520 --> 23:07.560
it was the Wild West in terms of, like, how blue a package is where installed. And so, already,

23:07.560 --> 23:11.560
people were opinionated because there were, like, 10 different ways of installing a blue a package,

23:11.560 --> 23:17.160
right? So, the approach that I took with Lurox was to support all of them, right? Okay,

23:17.160 --> 23:21.400
now this is an extensible blue-gain-based system where, like, you can have various

23:21.400 --> 23:25.960
backhands on how to build, and I was just trying to be nice to everybody, I wanted people to

23:25.960 --> 23:33.480
like me, right? And to, like, Lurox, and by extension, like me, I guess. So, but in the end, like, I realized

23:33.480 --> 23:40.680
that I didn't use any of them. So, I made this, like, super silly tiny, out-of-build bundle

23:40.680 --> 23:44.520
into Lurox, which I called the built-in mode. Like, this is the build system if you don't have

23:44.520 --> 23:49.400
a build system. Last time I checked in the thousands and thousands of Lurox packages, like, 80

23:49.400 --> 23:54.920
percent of them used the built-in system. Like, it has become the defective standard way of,

23:55.400 --> 24:01.560
packaging, a blue a module, right? People just, like, they just wanted one that worked, you know,

24:01.560 --> 24:05.080
like, most of the people, they were not in for, like, the flame wars. It just wanted something

24:05.080 --> 24:10.760
that worked. So, yeah. So, maybe, you know, if you put something out there, and if it's useful

24:10.760 --> 24:14.600
for people that will like it, if it's not, they will ignore it, and just keep doing it manually,

24:14.600 --> 24:23.400
the way they're always did. So, yeah. So, that's what happened with Lurox. And one final

24:23.400 --> 24:29.000
fact thought in this regard was that, like, over time, all in all those, like, years since 2019,

24:29.000 --> 24:34.360
the Lurox kept itself as a vault. Like, we now have things like, like, Amy Lurox, Lurox server,

24:34.360 --> 24:39.800
right, that you can put, like, through annotations and comments, like, you, and you get, like,

24:39.800 --> 24:43.560
IDR completion, and, like, annotations for all of the types, and you get, like, a lot of,

24:43.560 --> 24:48.120
what, Teele gives you, right? So, in the end, like, is there even a reason for Teele to exist in

24:48.120 --> 24:55.240
2025, right? And, like, the operator was a bit of foreshadowing, because, like, that you cannot do

24:55.240 --> 25:04.120
with comments, right? So, all of the tooling that exists around Lur, that you can do, like,

25:04.120 --> 25:08.760
cleanters, and Lurox, and comments, and all of that, just like, it's kind of, like, super Mario

25:08.760 --> 25:13.880
Maker, right? Like, it gives you, like, the tools, like, the objects within, like, the way that

25:13.960 --> 25:19.080
the language works, the way Lurox, and it's like, okay, you can arrange Lurox in all sorts of

25:19.080 --> 25:23.320
arbitrary ways and come up with new things, right? So, this is, this is kind of what you're

25:23.320 --> 25:28.120
enjoying. But Teele can be, like, super Mario Wonder, in which, like, we control the universe,

25:28.120 --> 25:34.040
so we can, we can make it be anything we like, right? So, like, if, if this is too niche of a reference,

25:34.040 --> 25:37.880
for you, like, this is, like, Nintendo, like, whenever they're around, now it's their latest,

25:37.880 --> 25:41.800
like, 2D Mario thing, people go, like, what are they going to invent, because, like, since

25:41.880 --> 25:46.520
Super Mario Maker, like, the community has often invented all sorts of levels, right? So,

25:46.520 --> 25:51.640
they basically invented levels that would be impossible to make in Super Mario Maker. Now, now Mario

25:51.640 --> 25:56.360
turns into a huge elephant, and he goes into the background of the screen, and the world works

25:56.360 --> 26:01.320
into layers, and it's, it's really crazy, like, it's, like, it's the craziest platformer

26:01.320 --> 26:07.240
I've ever played. So, and in Teele, we can do that. We can, like, explore syntax and semantics beyond

26:07.320 --> 26:11.240
what Lua is, right? We can make dealing with types more ergonomic, because as soon as it

26:11.240 --> 26:16.680
starts putting option, well, types, you need to have all sorts of little shortcuts, so that you

26:16.680 --> 26:22.280
don't have to be writing, like, if X is nil, like, all the time, right? You can come up with all sorts

26:22.280 --> 26:26.760
of crazy things, and this is just a quick view. Like, none of this exists, and none, I'm not,

26:26.760 --> 26:31.240
I'm promising any of those changes, but this is just, like, throwing ideas, you know,

26:31.240 --> 26:35.560
to the wind of things that would be possible, right? And I'm going to skip, so I don't want you all

26:35.640 --> 26:39.080
to read all of that, but I know you're going to come back in the video and stop and look at

26:39.080 --> 26:45.000
each one of them, but I'm saying, these are no promises, but the idea is just to keep experimenting,

26:45.000 --> 26:51.160
right? And one dilemma out of all of that remains, like, do people even want a minimalist language?

26:51.160 --> 26:56.680
Do I want a minimalist language? Because after all, like, the big thing about Lua is to be

26:56.680 --> 27:01.800
small and simple, but I created Teele because I wanted something else, so did I want a

27:01.800 --> 27:05.560
minimalist language? Like, I have to do a lot of social searching about that as well,

27:06.200 --> 27:10.280
but the main difference is that, like, I see Lua as being for scripting, and I want Teele to be

27:10.280 --> 27:16.120
for, like, applications and libraries, and I think in the end, minimalism is about the conceptual

27:16.120 --> 27:21.960
budget, right? Does it fit in your head, right? So Lua is Lua, until I want it to be Luaish,

27:21.960 --> 27:26.920
and to me being Luaish is, like, have a tiny standard library, it's not like this. Because

27:26.920 --> 27:30.760
if you look back like original Java, it is a tiny language with a huge standard library,

27:30.840 --> 27:35.960
like, you learn Java real fast, but then, like, the world, the JGM world, like, overtakes you.

27:36.120 --> 27:41.480
Right? Lua has, like, no dependency on the questions that we need to switch here.

27:41.480 --> 27:47.080
You write, so this is the last slice. No dependencies, fits in one head, right?

27:47.080 --> 27:52.680
So I'm going to keep experimenting, and the criteria is, does it make the compiler more fun to

27:52.680 --> 27:56.920
write? Does it make more language more fun to use? Does it make the project more fun to

27:57.560 --> 28:01.960
carry, right? And I think this extends also to users who are going to be using the language.

28:01.960 --> 28:06.920
So, unlike, instead of fear driven design, let's go for fun driven design. Thank you.

