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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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)
@@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
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.
Impressive, very nice. Now lets see Paul Allen's fix for Javascript.
10 месяцев назад
"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".
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
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.
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
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)
Impressed. I agree, knowing & being able to follow logic is so much more important than the actual language itself. Instead of finding *int begin, end* with luaK_getlabel then looping through luaK_code, _I wonder if you can simply do_ *block(ls); block(ls);*
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.
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
@ oh, it was meant to be an introduction to computer programmer and computation. It also used to not have Boolean operations, which was more due to the inherent errors that they can cause if they’re improperly structured. I haven’t touched it in a while so I haven’t a clue if that still holds true. Lua is an excellent first language, and it’s the original Machine Learning language. It’s also stupidly fast, can have embedded C and ASM as well as run concurrently properly. Things Python can’t do.
@@glowiak3430 c's type signatures are weird. what the type means is "this points to (a sequence of) constant characters". it does not mean that the value of the variable is itself, the pointer, is constant. I am sure this is about as clear as mud but i don't think i can explain it any better without diagrams and more words.
@@glowiak3430 Because the contents of the string aren't meant to be modified by the function. If you want the pointer and what it points to to both be const, then const char * const is what you want, but you generally don't really want that, especially when passing strings to functions.
don't change the chars behind this pointer: `const char*` don't change this pointer: `char* const` don't change the chars behind this pointer nor the pointer: `const char* const`
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❤
to yet another Pogromming session?
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.
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.
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
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.
Next, let's add nullptr to Rust.
perfecto
std::ptr::null
@@burkino7046 :0
Underrated comment
@@igz5553 How is the 5th most liked comment underrated
Gonna take note of, Asserting dominance, when joining a new project.
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.
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.
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.
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
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?
Lua my beloved
Finally, arrays in Lua (tables reference)
...sometimes you gotta do "die Scheiße"
Where can i find your emacs configuration?
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.
"tylko jedno w głowie mam"... lua 5.1gram
get out of here 💀
@@aleksszukovskis2074 hohol
Ooooooo polska kwa :(
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.
Is the code for emacs lua-mode longer than the actual lua interpreter?
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.
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)
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
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.
Impressive, very nice.
Now lets see Paul Allen's fix for Javascript.
"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".
I FKN LOVE THE POWER OF SIMPLICITY!!!
Do you know of any resources on how to write and build a website in Lua ?🙏
Welcome to a Brazilian programming language.
You fixed Lua? Why? It's part of the experience!
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.
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
submit the pull request
U are literally the best programmer Livestreamer on yt in my opinion
Why fix something when it can fix itself:
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
That's it?
55:17 i know some devs who have a very different meaning for what "high-level" is lol
TJ will be happy to see that the 1-based was fixed hahaha
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
Can you hack into Rust and fix what’s wrong with it?
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)
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
Do you have plans for LuaJIT?
Did Lua move to a register based machine ?
when will neovim switch to hacked lua for config
Impressed. I agree, knowing & being able to follow logic is so much more important than the actual language itself. Instead of finding *int begin, end* with luaK_getlabel then looping through luaK_code, _I wonder if you can simply do_ *block(ls); block(ls);*
00:00 new bookmark
how to join ur discord server?
I'm amazed at the comments in this source code.
Opa, Brasil mencionado.
I’d love to see you write an lsp for porth
guys i think he fixed lua
no way bro just chacked lua
PUC - RIO, brasil mentioned let's go!!!
I was waiting for this for so long
rawr unprotected
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?
> Doesn't fucking matter so that's important
xDDDDD
This lua-mode for emacs 💀
I always wonder 🤔 if you are a typical introver programmer ?
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.
Waited for double block inside another double block
Can you work on your text editor again soon :) I really enjoyed that project.
I literally though about zero indexed lua yesterday
The Roblox people went off and wrote luau-lang which is an "improved lua". Remains to be seen if it'll gain any traction.
can you fix python and make True -> true, and False -> false
Sadly I've never used Lua but, as soon as I heard "hacking it to make it better", I thought about the array thing. lol
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.
"lua" is literally the Portuguese word for moon
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.
Whenever I used Lua, I used Luajit - what about that?
Lua best language ever ❤
@ 28:00 that was a gem in the rough
Next up: Fennel. :)
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
Now try to fix react
And now, think of something useful to extend the language with...
Lua++ lmao
Thank you....
Repair it, it is stoping length of table by nil
Pogroming
My life
Lu0
I write my neovim config in lua
Lua's design is focused on embeddability, so all main does is that it prepares interpreter/bytecode VM and starts file execution.
Almost 100k wtf
Tsluading
So… you made Lua-
Jebated. You've actually only broken things
Chama no Brasil 👌
Finally
neovim 😛
emacs, bro
@@nyvymeclion
@@r2com641 💀
Nice
You broke Lua. It doesn’t use Zero because it’s meant to be a machine independent scripting language.
what zero/one based indexing has to do with language being machine independent?
@ oh, it was meant to be an introduction to computer programmer and computation. It also used to not have Boolean operations, which was more due to the inherent errors that they can cause if they’re improperly structured. I haven’t touched it in a while so I haven’t a clue if that still holds true.
Lua is an excellent first language, and it’s the original Machine Learning language. It’s also stupidly fast, can have embedded C and ASM as well as run concurrently properly. Things Python can’t do.
31:04 Look at this code. "chunkname" is a CONST char, and yet, few lines below its value is altered. Great job, lua devs. Lots of laught.
It's a const char *, not a char * const. Modifying what it points to is neither bad nor a bad idea when it's passed a null pointer.
@@anon_y_mousse Yes, but why make it const then?
@@glowiak3430 c's type signatures are weird. what the type means is "this points to (a sequence of) constant characters". it does not mean that the value of the variable is itself, the pointer, is constant.
I am sure this is about as clear as mud but i don't think i can explain it any better without diagrams and more words.
@@glowiak3430 Because the contents of the string aren't meant to be modified by the function. If you want the pointer and what it points to to both be const, then const char * const is what you want, but you generally don't really want that, especially when passing strings to functions.
don't change the chars behind this pointer: `const char*`
don't change this pointer: `char* const`
don't change the chars behind this pointer nor the pointer: `const char* const`
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.
Rawr unprotected.... I really think you should be using protection 😁