Lua is a great little language. Tables as data structures work surprisingly well, closures, iterators, everything can be a key and value, ... Even module import just fits so neatly into the language, usually just returning a table (but Lua just lets you do whatever! No restrictions is really cool)
@@MyriadColorsCM To get the most out of Lua you may need to do things a little differently, but I think it makes Lua better in the end. First class functions and closures really reduce the need for anything else, but it's not too much work to setup a metatable with methods if you really want it. I see the metatable "classes" more of a way to reduce creating multiple instances of functions, as an optimisation, rather than making Lua act particularly OO
@@MyriadColorsCM the lack of formal classes in lua is barely noticeable with the power you get with tables. metatables too if it's still not enough for you.
The code is actually pretty well documented with helpful comments. It really makes it easy to follow the code and get what it's doing. I'll remember this next time I cross paths with one of those clean-code advocates who defend that you should never use any comments in code.
@@Evilope well, realistically, most of the time that's just a pipe dream. I've read and written enough code to know that. And also what's obvious to you isn't necessarily obvious to others. But either way, no matter how well you name and structure things, the brain always has to decipher the code to some extent, while a comment can simply be read. Comments can and do save us a lot of time and effort.
@@skaruts yep, I've written tiny functions more than once and to modify them you basically need to unwrap them a little, change them and turn them into tiny functions again. I still love them though. Pity that nobody practices how to read and write them.
@@theodorealenas3171 yea, I don't like tiny functions either. You said it yourself, they make it harder and more time-consuming to make changes. But also, the more tiny functions you have, the more one has to jump around to make sense of the code, and the harder it is to follow it. You also have to waste more time restructuring it as you write it, and you make it harder to refactor it in the future.
Yes Portuguese is Latin based, and Lua is our word for Moon yes. It's to note that Lua (the language) was made in Brazil where Portuguese (of the Brazilian variation (duh)) is spoken. Reading the wiki tells me that there were some trade barriers on software importation which lead to its creation, also seems that Lua was preceded by a language called SOL (Simple Object Language) but in Portuguese Sol mean Sun, so Sun and Moon.
27:00 I like this little side tangent here. This is something that was difficult for me to understand when I was starting out. When people used to tell me the choice of language isn't that important I was confused because the different languages looked SO different and it felt like they required a whole different skillset. But now after years of solving software problems professionally, I realize that writing the actual code is usually the least of my concerns and it wouldn't have made much difference if I had to implement the same solutions in a different language.
A good reason for the app to use the vm is to test whether ALL of the functions of the VM work. Because lua isn't just an app it's value is also in the vm you can embed in literally any other app - like how the vm is embedded in this c app that interprets lua
Chat Question: "Is there a [programming] language he [=Tsoding] cannot code [in]?" (around 30:00) This is not really a question, or only a question and not what it looks like in the first place. It shows the respect of the questioner, because he is impressed of your computer programming skills. The person asking in fact implies, that there is no language (to his knowledge), that he thinks of that you couldn't possibly learn and use. This is a highly meta-level question and it lives in the context and also in a social context. That is btw. very impressive and in contrast to programming languages something that computers CAN NOT understand and possibly will never understand (Including large language models. There is no such thing as "understanding something". Thanks for the great video, Tsoding and also to Lua, that actually fixed you! Hehehe:)
You mean rhetorical question which this most likely was. Tsoding's issue with that question was the assumption that this is not normal. In every place I worked in you're expected to be able to make small changes in almost any language.
Yea, unfortunately this is probably set in stone for the foreseeable future. They couldn't change it overnight. They would have to warn the community in advance that, say, version 6 would be 0-indexed. And then they'd have to set a team aside to keep working on versions 5.x for years, like python did with 2.7, because there's a whole ecosystem out there that accounts for 1-indexing.
@@skaruts I don't think there's any realistic path to changing the indexing at this point. That's a reason why I don't really use Lua, not enough batteries included like Golang or Java/Kotlin and weird design decisions
@@BlueIsLeet Lua doesn't have weird design decisions apart from 1-indexing. Unlike python... But yea, I don't see it changing any time soon either. That said, while 1-indexing is a perpetual rock-in-the-shoe, all the merits of Lua really make it worth resigning to live with 1-indexing. Batteries it could never include, because Lua was made to be an auxiliary language, where the host application provides the batteries. If it provided batteries, it would become bloated, and it would prevent the host applications from providing them in their own optimal way.
I'm not going to say it's better, because it's really just a different way of doing things, but Vim makes it pretty easy to add keywords for highlighting. I defined null as an alias for NULL that I use in my header for every project, and I just added it to the list of keywords and it was highlighting from then on. The weird error you had when trying to compile later was that you added 'a' to the start of lua_load() at around the 41:00 mark. As for adding 0-based indexing, I'd name it Lua++ and use .lpp for the file extensions to differentiate it. And as far as using a double block, you could either convert it into a for loop that runs twice, or convert it to a while loop and use a local inner variable to determine the exit condition of the loop.
I switched from Emacs to Vim because I didn't like configuring Emacs (Emacs distros don't solve this all the way for me, especially when I wanted to disable default stuff). Configuring syntax highlighting is one of my favourite things in Vim because it's so simple and yet so powerful. Probably one of the things that will make me stay for good.
Just looked, 13 years ago when the lua-mode was created 08cff6e3c2aa860bc26a43dc2cde1ca66558597b it was just a regex. Wonder if the software got smarter during its lifetime.
With the complication of non-local jumps and `goto`, my first thought was to instead just transform `double` into `for i=1,2 do`, i.e. make double less a macro and more a loop so it plays nicely with the relative jumps. I probably would've done this from the start, but it's neat to see you took the code duplication approach first and found out interesting things about the byte code. (edit: I clicked post about 5 seconds before you mentioned the easy solution was to implement it as a loop, forgive me for my hubris haha)
I wonder if it would have been possible to backup the lexerstate and effectively run the lexer over the double body twice to get the goto statements into the internal backpatching system.
I feel like this is just a dumb way of doing it. Lua basically treats an array as a key value pair so you could literally just say the key is 0, 1, 2… etc instead
it's been a while since i used lua, but iirc you *can* do that, but any standard function that expects an array won't recognize the zeroth index, e.g. # will return 1 less than the length.
@@jeffirwin7862 I'm not talking about fortran's array system. there's a specification statement called "implicit none" to get rid of implicit types. I think it will be great to have such specification statement to make the array start from 0 in lua. I'd love to know why it's a bad idea
@@CoolestPossibleNameits just not worth it it. Worst case, every program/library would have to check for what the index is set to, and act accordingly. Best case, it is block scoped and now you get to have the extra burden of having to add "index 0" or whatever to every single file or function, and the mental overhead of remembering that. And then you are still going to end up writing "startindex" everywhere because that's what happens in every language that does that. You literally just add 1 ffs is it that hard
2:05:34: This is not true, the ipairs function will index raw, starting from zero. Which "user-facing-value" for a starting index is used does not matter.
46:30 you're actually wrong here. Luná in Russian is inherited from Proto-Indo-European *lówksneh₂, and Latin lūna is inherited from the same Proto-Indo-European word. Those things are cognates
The priority limit was first invented/discovered by Bob Floyd.
7 месяцев назад
"luac" must be the compiler: anything ending with "c" is a compiler, in classic UNIX style. Also --help says the output is "luac.out", similar to the default output file for the C compiler (gcc still does it that way) is "a.out".
You look like you just won a brand new skateboard or something like this lol kkkkk never saw someone so happy reading code (at least until minute 49:00 lol I'm still watching)
Hi tsoding now that you've got some Lua experience you should check out the löve framework, it's very similar to raylib in a lot of ways but focused on lua
And really competent in terms of performance. Although in part it's also LuaJIT being really competent at that too. There's also a 3D lib for Love2d in the works, called 3DreamEngine, and it performs really great too.
I watch Eskil's data visualization prototype vid every few months. Imma trash programer but his & this.channel gives me motivation to rise to mediocre dev.
Lua devs should add compile time parameter to tell what the first element of array should be. So that I could make game whose scripting engine starts arrays with -2 or with 5.
so by doing copy pasting, we can just add proper Table thing, like there is default Table that starts from 1 and properTable that starts with 0) no codebase in the world will be broken that way I guess
I had to translate a lot of matlab code (that is 1-indexed just like lua) into python/numpy code. Since then I have a very solid disgust against any 1-indexed language.
I was considering doing something similar to this for my capstone and this guy just sits down and does it in 2 hours lol. Talking the whole time as well. I spent an hour just getting to understand the parser an gave up lol
I like how the most difficult thing in the whole video is the lua syntax highlighting
teachers: there is not a bad question
tsoding: its just a bad question 😎
based
BRAZIL MENTIONED? 🇧🇷🎉
Brazil, caraleo! huehuhue
Orakkk Brasil dominando
brazil my beloved
AE, CARAIO!!!!
Eu amo esse russo❤
Lua is a great little language. Tables as data structures work surprisingly well, closures, iterators, everything can be a key and value, ... Even module import just fits so neatly into the language, usually just returning a table (but Lua just lets you do whatever! No restrictions is really cool)
Its too bad OOP in LUA is pure pain, though really, you can do with jsut procedural code if you knwo what you are doing.
@@MyriadColorsCM I consider that one of its advantages.
@@MyriadColorsCM To get the most out of Lua you may need to do things a little differently, but I think it makes Lua better in the end. First class functions and closures really reduce the need for anything else, but it's not too much work to setup a metatable with methods if you really want it.
I see the metatable "classes" more of a way to reduce creating multiple instances of functions, as an optimisation, rather than making Lua act particularly OO
@@MyriadColorsCM the lack of formal classes in lua is barely noticeable with the power you get with tables. metatables too if it's still not enough for you.
The code is actually pretty well documented with helpful comments. It really makes it easy to follow the code and get what it's doing. I'll remember this next time I cross paths with one of those clean-code advocates who defend that you should never use any comments in code.
When you have rules only using them actively and smart can make you able to violate them.
Well named variables, sensible structure and control flow are all that's necessary most of the time...
@@Evilope well, realistically, most of the time that's just a pipe dream. I've read and written enough code to know that. And also what's obvious to you isn't necessarily obvious to others.
But either way, no matter how well you name and structure things, the brain always has to decipher the code to some extent, while a comment can simply be read. Comments can and do save us a lot of time and effort.
@@skaruts yep, I've written tiny functions more than once and to modify them you basically need to unwrap them a little, change them and turn them into tiny functions again. I still love them though. Pity that nobody practices how to read and write them.
@@theodorealenas3171 yea, I don't like tiny functions either. You said it yourself, they make it harder and more time-consuming to make changes. But also, the more tiny functions you have, the more one has to jump around to make sense of the code, and the harder it is to follow it.
You also have to waste more time restructuring it as you write it, and you make it harder to refactor it in the future.
to yet another Pogromming session?
Yes Portuguese is Latin based, and Lua is our word for Moon yes.
It's to note that Lua (the language) was made in Brazil where Portuguese (of the Brazilian variation (duh)) is spoken. Reading the wiki tells me that there were some trade barriers on software importation which lead to its creation, also seems that Lua was preceded by a language called SOL (Simple Object Language) but in Portuguese Sol mean Sun, so Sun and Moon.
27:00 I like this little side tangent here. This is something that was difficult for me to understand when I was starting out. When people used to tell me the choice of language isn't that important I was confused because the different languages looked SO different and it felt like they required a whole different skillset. But now after years of solving software problems professionally, I realize that writing the actual code is usually the least of my concerns and it wouldn't have made much difference if I had to implement the same solutions in a different language.
A good reason for the app to use the vm is to test whether ALL of the functions of the VM work. Because lua isn't just an app it's value is also in the vm you can embed in literally any other app - like how the vm is embedded in this c app that interprets lua
Lua my beloved
Next, let's add nullptr to Rust.
perfecto
std::ptr::null
@@burkino7046 :0
Underrated comment
@@igz5553 How is the 5th most liked comment underrated
Chat Question: "Is there a [programming] language he [=Tsoding] cannot code [in]?" (around 30:00)
This is not really a question, or only a question and not what it looks like in the first place. It shows the respect of the questioner, because he is impressed of your computer programming skills. The person asking in fact implies, that there is no language (to his knowledge), that he thinks of that you couldn't possibly learn and use. This is a highly meta-level question and it lives in the context and also in a social context. That is btw. very impressive and in contrast to programming languages something that computers CAN NOT understand and possibly will never understand (Including large language models. There is no such thing as "understanding something".
Thanks for the great video, Tsoding and also to Lua, that actually fixed you! Hehehe:)
You mean rhetorical question which this most likely was. Tsoding's issue with that question was the assumption that this is not normal. In every place I worked in you're expected to be able to make small changes in almost any language.
Gotta implement this fix to the embedded Lua interpreter in my app.
Gonna take note of, Asserting dominance, when joining a new project.
Make it a PR. They would commit a sin not accepting it.
Ik ur joking but obviously they cant change it at this point
Yea, unfortunately this is probably set in stone for the foreseeable future. They couldn't change it overnight. They would have to warn the community in advance that, say, version 6 would be 0-indexed. And then they'd have to set a team aside to keep working on versions 5.x for years, like python did with 2.7, because there's a whole ecosystem out there that accounts for 1-indexing.
@@skaruts I don't think there's any realistic path to changing the indexing at this point. That's a reason why I don't really use Lua, not enough batteries included like Golang or Java/Kotlin and weird design decisions
@@BlueIsLeet Lua doesn't have weird design decisions apart from 1-indexing. Unlike python...
But yea, I don't see it changing any time soon either. That said, while 1-indexing is a perpetual rock-in-the-shoe, all the merits of Lua really make it worth resigning to live with 1-indexing.
Batteries it could never include, because Lua was made to be an auxiliary language, where the host application provides the batteries. If it provided batteries, it would become bloated, and it would prevent the host applications from providing them in their own optimal way.
For everyone who can't see it changing - that's the exact sunk cost fallacy thinking that drowns us in today's inane legacy mess
Russian луна́ is not from latin, actually, it's from a common ancestor with latin, they just developed in very similar ways.
I'm not going to say it's better, because it's really just a different way of doing things, but Vim makes it pretty easy to add keywords for highlighting. I defined null as an alias for NULL that I use in my header for every project, and I just added it to the list of keywords and it was highlighting from then on. The weird error you had when trying to compile later was that you added 'a' to the start of lua_load() at around the 41:00 mark.
As for adding 0-based indexing, I'd name it Lua++ and use .lpp for the file extensions to differentiate it. And as far as using a double block, you could either convert it into a for loop that runs twice, or convert it to a while loop and use a local inner variable to determine the exit condition of the loop.
I have a similar thing for vs, I use rust type names, have a special macro "loop" defined as "for(;;)"
I switched from Emacs to Vim because I didn't like configuring Emacs (Emacs distros don't solve this all the way for me, especially when I wanted to disable default stuff). Configuring syntax highlighting is one of my favourite things in Vim because it's so simple and yet so powerful. Probably one of the things that will make me stay for good.
I'd call it Lua-- because it's lua decremented from 1 to 0 xD
Id name Lu0
@@siriusleto3758 Out of all the options, this might be the best one.
Finally, arrays in Lua (tables reference)
You mentioned at the end you look into other open source projects from time to time. Which ones did you look into and found interesting?
...sometimes you gotta do "die Scheiße"
1:05:00 man gets frustrated its hard to add new syntax highlighting to a language specifically designed to never add new syntax
It's highlighting for a single keyword, come ooooon! 😭
Just looked, 13 years ago when the lua-mode was created 08cff6e3c2aa860bc26a43dc2cde1ca66558597b it was just a regex. Wonder if the software got smarter during its lifetime.
With the complication of non-local jumps and `goto`, my first thought was to instead just transform `double` into `for i=1,2 do`, i.e. make double less a macro and more a loop so it plays nicely with the relative jumps. I probably would've done this from the start, but it's neat to see you took the code duplication approach first and found out interesting things about the byte code.
(edit: I clicked post about 5 seconds before you mentioned the easy solution was to implement it as a loop, forgive me for my hubris haha)
Why fix something when it can fix itself:
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
That's it?
I wonder if it would have been possible to backup the lexerstate and effectively run the lexer over the double body twice to get the goto statements into the internal backpatching system.
Welcome to a Brazilian programming language.
I feel like this is just a dumb way of doing it. Lua basically treats an array as a key value pair so you could literally just say the key is 0, 1, 2… etc instead
it's been a while since i used lua, but iirc you *can* do that, but any standard function that expects an array won't recognize the zeroth index, e.g. # will return 1 less than the length.
"tylko jedno w głowie mam"... lua 5.1gram
get out of here 💀
@@aleksszukovskis2074 hohol
Ooooooo polska kwa :(
I FKN LOVE THE POWER OF SIMPLICITY!!!
There should be a specification statement like in fortran to opt out of the 1 indexing of the array
that's one of the all time greatest bad ideas.
@@minamur I'd like to know why. I was talking about the "implicit none" thing
@@CoolestPossibleName fortran also has arrays that can start at any index, although the default is 1
@@jeffirwin7862 I'm not talking about fortran's array system. there's a specification statement called "implicit none" to get rid of implicit types. I think it will be great to have such specification statement to make the array start from 0 in lua. I'd love to know why it's a bad idea
@@CoolestPossibleNameits just not worth it it. Worst case, every program/library would have to check for what the index is set to, and act accordingly. Best case, it is block scoped and now you get to have the extra burden of having to add "index 0" or whatever to every single file or function, and the mental overhead of remembering that. And then you are still going to end up writing "startindex" everywhere because that's what happens in every language that does that. You literally just add 1 ffs is it that hard
You fixed Lua? Why? It's part of the experience!
2:05:34: This is not true, the ipairs function will index raw, starting from zero. Which "user-facing-value" for a starting index is used does not matter.
U are literally the best programmer Livestreamer on yt in my opinion
46:30 you're actually wrong here. Luná in Russian is inherited from Proto-Indo-European *lówksneh₂, and Latin lūna is inherited from the same Proto-Indo-European word. Those things are cognates
Where can i find your emacs configuration?
The priority limit was first invented/discovered by Bob Floyd.
"luac" must be the compiler: anything ending with "c" is a compiler, in classic UNIX style. Also --help says the output is "luac.out", similar to the default output file for the C compiler (gcc still does it that way) is "a.out".
submit the pull request
TJ will be happy to see that the 1-based was fixed hahaha
You look like you just won a brand new skateboard or something like this lol kkkkk never saw someone so happy reading code (at least until minute 49:00 lol I'm still watching)
"We'll maks indexing start at 0"
Instant like of the video
Hi tsoding now that you've got some Lua experience you should check out the löve framework, it's very similar to raylib in a lot of ways but focused on lua
And really competent in terms of performance. Although in part it's also LuaJIT being really competent at that too.
There's also a 3D lib for Love2d in the works, called 3DreamEngine, and it performs really great too.
I watch Eskil's data visualization prototype vid every few months. Imma trash programer but his & this.channel gives me motivation to rise to mediocre dev.
And Bitty Engine
Lua devs should add compile time parameter to tell what the first element of array should be. So that I could make game whose scripting engine starts arrays with -2 or with 5.
Is the code for emacs lua-mode longer than the actual lua interpreter?
Man... Цoding... what a guy!!!
Impressive, very nice.
Now lets see Paul Allen's fix for Javascript.
so by doing copy pasting, we can just add proper Table thing, like there is default Table that starts from 1 and properTable that starts with 0) no codebase in the world will be broken that way I guess
Lua's design is focused on embeddability, so all main does is that it prepares interpreter/bytecode VM and starts file execution.
"lua" is literally the Portuguese word for moon
I'm amazed at the comments in this source code.
rawr unprotected
I had to translate a lot of matlab code (that is 1-indexed just like lua) into python/numpy code. Since then I have a very solid disgust against any 1-indexed language.
Do you know of any resources on how to write and build a website in Lua ?🙏
Can you hack into Rust and fix what’s wrong with it?
55:17 i know some devs who have a very different meaning for what "high-level" is lol
00:00 new bookmark
guys i think he fixed lua
What's the tool that lets Tscoding zoom in on the screen at any time? I've always wondered but can't find any info regarding it
it's on his github, zoomer i think it's called
It's a tool he wrote himself called "boomer" iirc
If you used KDE you could have it built-in already. I'm sure GNOME could do it too, if that's your flavor, but I don't use GNOME.
Alt+Mouse_Scroll got ya covered in XFCE.
PUC - RIO, brasil mentioned let's go!!!
Waited for double block inside another double block
This lua-mode for emacs 💀
The Roblox people went off and wrote luau-lang which is an "improved lua". Remains to be seen if it'll gain any traction.
what if you jump *into* the double block?
or even jump into a condition or a function or a loop.
So basically goto is weird
what if you goto to a place inside the loop from inside the loop
I was considering doing something similar to this for my capstone and this guy just sits down and does it in 2 hours lol. Talking the whole time as well. I spent an hour just getting to understand the parser an gave up lol
I was waiting for this for so long
I’d love to see you write an lsp for porth
I always wonder 🤔 if you are a typical introver programmer ?
no way bro just chacked lua
can you do a tutorial of how to make a progeamming language in c++ im stuck
Bruh, you already have C++. Why reinvent another language?
Did Lua move to a register based machine ?
Lua++ lmao
I literally though about zero indexed lua yesterday
> Doesn't fucking matter so that's important
xDDDDD
Whenever I used Lua, I used Luajit - what about that?
when will neovim switch to hacked lua for config
And now, think of something useful to extend the language with...
Can you work on your text editor again soon :) I really enjoyed that project.
Do you have plans for LuaJIT?
So… you made Lua-
can you fix python and make True -> true, and False -> false
Repair it, it is stoping length of table by nil
Next up: Fennel. :)
Thank you....
I write my neovim config in lua
One of the reasons I love Lua is that the index starts at 1 😂
Pogroming
My life
Almost 100k wtf
how to join ur discord server?
Lu0
Jebated. You've actually only broken things
Tsluading
Now try to fix react
Rawr unprotected.... I really think you should be using protection 😁
@ 28:00 that was a gem in the rough
That's the thing... I don't think you fixed Lua, Tsoding. Lua fixed you.
Yeah, but that makes a 2-hour long video. What can you say.
Finally
Nice
So the right fix is to allow any upper and lower index bounds. Please tell me that this is the fix, because if not, there's no reason to watch.
It actually already does that. The problem comes in when you manually loop.
Chama no Brasil 👌
ok now fix python
neovim 😛
emacs, bro
@@nyvymeclion
@@r2com641 💀