@@juanmalpartida1333 You say that like If this was some old obscure language. But there are tons of people using it now days for things like WordPress and Laravel
I'm fairly new to getting back into C (did some Java stuff back in 2009-2012 but switched to hardware) And even I'm this question. But tbh I need to get better at C# (unity) and learn Python because that's where my potential career path lies.. But I wanna finish making a video game first lmfao
Actually it's a way to call a variable... Variable names can contain variables if you write them with curly braces like $bar = 'crazy'; ${"foo".$bar} = "PHPlol"; Echo $foocrazy; // will output PHPlol And even more weird but useful stuff if you don't use unfiltered user input in the name of the variable. Oh, and part of this stuff works to call functions too !
@@spacewargamer4181 I mean if your job is to fix that and you get paid to do so to sit there for 8 hours and try and figure it out and after those 8 hrs you get to go home do you really care about the task at that point
@@spacewargamer4181 Ok, maybe my point didnt come across clear. What Im trying to say is that as long as you get paid fairly why care about the work you are given. does that make sense?
Frameworks like Laravel puts you to the right path of lord of code by giving you a concrete way to do your stuff. So is not PHP, is the way you use it and organize your code.
To all the people saying this is a pointer, it's not. In fact based on the experiments I did with it, it's more similar to javascript objects than anything else. That is, `${...}` in PHP is similar to `window[...]` in javascript. A *pointer* is a variable that stores a memory address. A pointer can be _dereferenced_ to extract a value from its address, and it can have _arithmetic_ done on it to derive a new offset pointer. For example, if you have a pointer named `buffer`, you can make another pointer `bufferptr`, use the second pointer to "walk" the memory pointed to by `buffer`, and then return `bufferptr - buffer` to get the length of the data stored in `buffer` via `bufferptr`. Or, you can take a pointer like `string`, add to it `token = string + 5`, and `token` will hold a substring. I see where some people would be confused, because $$variable does _look_ like a pointer dereference, but it's not. It's a key lookup. A *reference* is similar to a pointer, but different. A reference is a variable that mirrors a value. References can be implemented with pointers, but they are not themselves pointers, because references cannot be manually dereferenced or have arithmetic done on them. In languages that have references, technically everything is a reference. For example, in JavaScript, `let foo = 5` creates a reference named `foo` to the value 5. Modifying foo is actually creating a new Number object with the new value and setting foo to be a reference to the new object. The old object, without any living references to it, is eventually garbage-collected. if you then do `let bar = foo`, even though bar is also a reference to 5, foo and bar are not referencing the same object. Since `5` is an instance of a primitive type, it's copied every time it's stored. So modifying foo will not also modify bar. Numbers, strings and booleans are primitive values. Then you have objects and arrays, which are created in memory and then a reference is stored. If you do `a = [1,2,3]; b = a`, then a and b are actually both references to the same array. Modifying one modifies the other. This can get confusing, because JavaScript also has == and === for comparing. === was added later on because of Javascript's fucked up type system. == does a value compare, but will coerce types to make the comparison, which leads to silly results like `[] == false` being true. === is different in that it first checks the types of its operands and will automatically yield false if the types are too different to be compared without duck typing. But then you can also have surprising results, like `a = 5; b = 5; a === b` is true, while `a = []; b = []; a == b` is false, while `a = []; b = a; a === b` is true. That's because for objects that are passed by-reference, such as arrays, the identity is compared rather than the value. You can have two arrays that are completely identical in their contents, but if they are not references to the same array, then they will have different identities and therefore compare unequal. Strings are primitive, so they *are* compared by-value, but the fact that arrays cannot be compared with == or === can seriously trip programmers up. Though JavaScript is just a notoriously difficult language to debug to begin with. Why do you think there's such a huge push to move to TypeScript and WASM? You might hear of terms such as pass-by-value and pass-by-reference. C is 100% pass-by-value, which is why pointers are so necessary. JavaScript, on the other hand, is pass-by-sharing. Which is essentially what I described above wherein you have primitive types that are passed by-value (copied) and non-primitive values that are passed by-reference (mirrored). Pass-by-sharing is pretty common in managed languages. Though most languages tend to give you more explicit control over references, so in C# for example, you _can_ make a reference to an int. You can even use pointers in C#, though they're disabled by default and are locked behind the `unsafe` keyword (meaning you have to declare within an unsafe{...} scope and turn on a specific compiler switch if you want to use pointers at all). Every language is different and it's good to look into those things and test the basic mechanics to make sure they work as you think they do. It's worth having that deeper understanding.
for commenters: no, its not a pointer mechanism, but lexical scope lookup, that is common for dynamic langs. in python you would do this by locals()[bar], for example
Been a few years since I was a PHP dev, but I seem to recall that these so-called "variable variables" were universally loathed by the community and their usage considered to be pretty much unforgivable, for pretty obvious reasons.
This also possible in Python and other languages. Although Python you have to explicitly say globals()[variable]. Dynamic variables. It’s a type of reflection, also note - it’s not really used in PHP by developers. Just like it’s not really used in most other languages. But yes, this is a thing in many languages. Even can be emulated in JavaScript.
I don't know my dude it kinda reminds me of a board with a nail sticking out on a walk path. Overwhelming feeling to get rid of it knowing that's gonna hurt if I step on it.
Genuinely almost all programming languages have a way of doing this. So what you're saying is that all programming languages suck, because the programmer can write garbage code.
PHP is really nice programming language, it’s really easy to adapt also easy to search knowledgebase. BUT easy is weakness for PHP. When beginner make code, debug will be nigthmare.
@@king_james_official it's called a variable variable, some other languages have ways of doing this as well. I can see the overlap with a pointer, but since you're not storing a memory address it isn't one, and you don't get all the functionality of a pointer as a result. Personally I can't even think of a use case where you'd want to use this.
0:30 I agree in general PHP is a simple easy language, thus fun. But your example is the kind of code how you get injection. It needs to have lots of checks around it.
old grummer words passing to new generation from 2000, it has been an inside joke but people tend to be innocent with their lack of infomations... PHP sucks, and It still be taken a place inside me.
It really gets fun when you use variable variable names to create variables. Have an empty string, use that as a variable name and you've got an "unnamed" variable. Thankfully no one does that. I've never seen variable names in practice anyway.
@@georgplaz YOu know ppl in RL who you always have to ask? Annoying AF. Same like "you know what happen ..." or "whats the matter?" "nothing" -.- Just say it ffs :D --- Saying something without really telling something is useless. =)
I didn't know you can do this more than once but the ability to reference anything in php is what I'm missing in a lot of languages. Php can parse itself, it's marvellous. You can have a piece of code that says "if I am inside a method then print the first 3 lines off my class code, whatever they are"...marvellous
@@aboshxm2416 5 years of PHP, never typed $ by mistake while accessing an object property. Btw any decent IDE will highlight dynamic property access with a specific color.
@@aboshxm2416 like I've been working with PHP for 8 years and I've never accidentally double $$-ed. Any IDE also highlights this occurrence differently than normal variables. This is such a dumb argument that I'm doubting that you're even a programmer.
You will most likely never run into such a problem if you stick to good structured programming and good practices. This is just anecdotal, I have never found it to be a problem.
@@AJD... what the fuck are you even talking about? Man I swear, some of you people are just throwing words around without having a clue about what they mean. How does calling a variable from a string value cause any of the vulnerabilities you just mentioned?
Double quotes are interpolated, while singles are not. There was no reason to mix them in this video. Also, double $ is forbidden in the professional world. I agree, though. PHP is a fun language. Every language is a fun language if you're learning and growing. Best.
I wouldn't say it's forbidden, you just _really_ have to know what you're doing. As it stands I'm struggling to find a use case for it, ngl. I do use things like _new $someClassName_ but variable variables are just something I can't find a use for.
Have been using php for 2 years. First time I have seen this lol. Still won't use it but it's cool it's out there, just doing its thing with security lol
It seems like now that there is v8.0, v8.1 and soon 8.2 and it implements some stuff out of othe languages it becomes popular again. Love that language to bits. Was my first i learned at 14 years
Mom can we have pointers?
No, we have pointers at home
Pointers at home:
it is like dynamic pointers:D
@@rad9587 reminds how dynamic array of pointer. Fun :D
Best comment
Dawg imagine doing an implementation of a hash table with dynamic arrays in this language ;-;
@@juanmalpartida1333 You say that like If this was some old obscure language. But there are tons of people using it now days for things like WordPress and Laravel
Pointers in php be like 😂
"yes, I use PHP pointers
$$$$$$$$$$$$$$$$
how did you know?"
💲💲💲 💲WAG POINTERS DEM MONEE 💲💲💲 😎😎😎
Lot of dollar but not a real dollar on your pocket.
@@gillarajieprasatya8798i bought a house with php
"PHP developers are well paid. We see dollar signs all the time"
want free money?
add more variables!
Because companies are complacent. Python and Js programmers are well paid by forward looking companies
@@ianlondon2888Seriously. PHP and JS pay the bills and it doesn’t even come close
C programmers : wait, isn't that a pointer?
ikr :)
I'm fairly new to getting back into C (did some Java stuff back in 2009-2012 but switched to hardware)
And even I'm this question.
But tbh I need to get better at C# (unity) and learn Python because that's where my potential career path lies..
But I wanna finish making a video game first lmfao
@@NotTheHeroStudios C# has much wider usage than unity
Actually it's a way to call a variable... Variable names can contain variables if you write them with curly braces like
$bar = 'crazy';
${"foo".$bar} = "PHPlol";
Echo $foocrazy; // will output PHPlol
And even more weird but useful stuff if you don't use unfiltered user input in the name of the variable.
Oh, and part of this stuff works to call functions too !
Pointerish aliases
That's so much fun haha imagine spending a whole week trying to fix that bug haha
Who cares as long as u get paid lol
@@TsoiIzAlive The mental health
@@spacewargamer4181 I mean if your job is to fix that and you get paid to do so to sit there for 8 hours and try and figure it out and after those 8 hrs you get to go home do you really care about the task at that point
@@TsoiIzAlive In this field of work? Yes you do
You have to fix it the next day
@@spacewargamer4181 Ok, maybe my point didnt come across clear. What Im trying to say is that as long as you get paid fairly why care about the work you are given.
does that make sense?
php is like bash having an identity crisis
Bruh🤣🤣🤣
Well, if you think about it, PHP wasn't even supposed to be a language, so it's need of a therapist just seems natural.
^perl
or batch
or batch
PHP: the performance of JavaScript, the ease of C, and the design quality of PHP.
Bro really said ease of C 😂😂
I laughed right after he said 'php is a fun language'.
Same here
Same here just a big headache
fun to write, harder to maintain
any sh*t code is hard to maintain, brotha
@@ward7576 and this is shit code, so it checks out
@@ward7576 I like how PHP features are just examples of shit code
Frameworks like Laravel puts you to the right path of lord of code by giving you a concrete way to do your stuff. So is not PHP, is the way you use it and organize your code.
@@arturorosas2170 or even better both language and framework are secure by design like for example rust or even go with gin
"php is a fun language" that is the best joke i've heard all year.
I love how he uses double quotes and single quotes and doesn’t mention why or if there even is a reason.
The real reason is this:
I didn't even notice lmao
@@aschmelyun lmao
@@aschmelyun do they matter in php?
@@aimpizza6823 you can't use escape sequences like \t,
... nor interpolate variables within single quotes
@@sney2002 thank you
looks like a huge security vulnerability
It isnt
Its very very useful
@@yungifez "it isnt"
@@yeetyeet7070 i tried 😂😂
It's a vulnerability if you have user input in double quotes. No issue if you're using single quotes.
@@yeetyeet7070 i tried my best
You won
imagine losing track of how far up you want to reference lmao. so practical!!
**PHPTSD intensifies**
"This is the reason why ... *screams internally*"
😂
To all the people saying this is a pointer, it's not. In fact based on the experiments I did with it, it's more similar to javascript objects than anything else. That is, `${...}` in PHP is similar to `window[...]` in javascript.
A *pointer* is a variable that stores a memory address. A pointer can be _dereferenced_ to extract a value from its address, and it can have _arithmetic_ done on it to derive a new offset pointer. For example, if you have a pointer named `buffer`, you can make another pointer `bufferptr`, use the second pointer to "walk" the memory pointed to by `buffer`, and then return `bufferptr - buffer` to get the length of the data stored in `buffer` via `bufferptr`. Or, you can take a pointer like `string`, add to it `token = string + 5`, and `token` will hold a substring. I see where some people would be confused, because $$variable does _look_ like a pointer dereference, but it's not. It's a key lookup.
A *reference* is similar to a pointer, but different. A reference is a variable that mirrors a value. References can be implemented with pointers, but they are not themselves pointers, because references cannot be manually dereferenced or have arithmetic done on them. In languages that have references, technically everything is a reference. For example, in JavaScript, `let foo = 5` creates a reference named `foo` to the value 5. Modifying foo is actually creating a new Number object with the new value and setting foo to be a reference to the new object. The old object, without any living references to it, is eventually garbage-collected. if you then do `let bar = foo`, even though bar is also a reference to 5, foo and bar are not referencing the same object. Since `5` is an instance of a primitive type, it's copied every time it's stored. So modifying foo will not also modify bar. Numbers, strings and booleans are primitive values. Then you have objects and arrays, which are created in memory and then a reference is stored. If you do `a = [1,2,3]; b = a`, then a and b are actually both references to the same array. Modifying one modifies the other. This can get confusing, because JavaScript also has == and === for comparing. === was added later on because of Javascript's fucked up type system. == does a value compare, but will coerce types to make the comparison, which leads to silly results like `[] == false` being true. === is different in that it first checks the types of its operands and will automatically yield false if the types are too different to be compared without duck typing. But then you can also have surprising results, like `a = 5; b = 5; a === b` is true, while `a = []; b = []; a == b` is false, while `a = []; b = a; a === b` is true. That's because for objects that are passed by-reference, such as arrays, the identity is compared rather than the value. You can have two arrays that are completely identical in their contents, but if they are not references to the same array, then they will have different identities and therefore compare unequal. Strings are primitive, so they *are* compared by-value, but the fact that arrays cannot be compared with == or === can seriously trip programmers up. Though JavaScript is just a notoriously difficult language to debug to begin with. Why do you think there's such a huge push to move to TypeScript and WASM?
You might hear of terms such as pass-by-value and pass-by-reference. C is 100% pass-by-value, which is why pointers are so necessary. JavaScript, on the other hand, is pass-by-sharing. Which is essentially what I described above wherein you have primitive types that are passed by-value (copied) and non-primitive values that are passed by-reference (mirrored). Pass-by-sharing is pretty common in managed languages. Though most languages tend to give you more explicit control over references, so in C# for example, you _can_ make a reference to an int. You can even use pointers in C#, though they're disabled by default and are locked behind the `unsafe` keyword (meaning you have to declare within an unsafe{...} scope and turn on a specific compiler switch if you want to use pointers at all). Every language is different and it's good to look into those things and test the basic mechanics to make sure they work as you think they do. It's worth having that deeper understanding.
for commenters: no, its not a pointer mechanism, but lexical scope lookup, that is common for dynamic langs. in python you would do this by locals()[bar], for example
That sweet video loop completion
yessir
Been a few years since I was a PHP dev, but I seem to recall that these so-called "variable variables" were universally loathed by the community and their usage considered to be pretty much unforgivable, for pretty obvious reasons.
Still, it is a very useful feature of the language for some tasks.
Years, working in PHP
and
saw this now 😊
Me internally: *AGHHHHHGHGGGGGGHHH*
This also possible in Python and other languages. Although Python you have to explicitly say globals()[variable].
Dynamic variables. It’s a type of reflection, also note - it’s not really used in PHP by developers. Just like it’s not really used in most other languages.
But yes, this is a thing in many languages. Even can be emulated in JavaScript.
Very true. This is possible in most languages but it's not really that useful for most use cases.
I don't know my dude it kinda reminds me of a board with a nail sticking out on a walk path. Overwhelming feeling to get rid of it knowing that's gonna hurt if I step on it.
I could even sense the boredom and slight depressive tone when he said, "PHP is a fun language".
You’ve successfully reminded me that there’s a language in my past which I hate more than Groovy. That Painful Horrible Preprocessor
Sounds like you should let go of your hate for the language and understand that the hate is actually towards shitty code.
This is not one of the reasons php is fun, its one for the reasons people are able to write horrendous php code
Genuinely almost all programming languages have a way of doing this.
So what you're saying is that all programming languages suck, because the programmer can write garbage code.
@@xIcarus227 In PHP it's $$ instead of $. In every other programming language, "there's a way of doing it". Do you see the difference here?
@@svenyboyyt2304 wdym by saying $$?
Ah! The sheer chaos of implicit/automatic variable templating.
Some men just want to see the world burn.
Old php websites burn my soul through the eyes as soon as I see the code.
Declare variable with $ is also used in Powershell I think 😂
A CPP programmer: I need bleach for my 👀
PHP is really nice programming language, it’s really easy to adapt also easy to search knowledgebase. BUT easy is weakness for PHP. When beginner make code, debug will be nigthmare.
This is chaotic. Hahaha
php pointer 💀💀
glad i never had to learn that language
in php you can actually pass an object by reference like in c++ by using "&" in the function parameter
That's not a pointer.
You think it's a pointer exactly because you never learned the language.
@@xIcarus227 sure, it works like a pointer, what is it then?
@@king_james_official it's called a variable variable, some other languages have ways of doing this as well.
I can see the overlap with a pointer, but since you're not storing a memory address it isn't one, and you don't get all the functionality of a pointer as a result.
Personally I can't even think of a use case where you'd want to use this.
0:30 I agree in general PHP is a simple easy language, thus fun. But your example is the kind of code how you get injection. It needs to have lots of checks around it.
The moment the second dollar came in, ptsd from void pointers and pointers kicked in.
I love PHP. I literally don't understand why people "bash" on it so much.
old grummer words passing to new generation from 2000, it has been an inside joke but people tend to be innocent with their lack of infomations...
PHP sucks, and It still be taken a place inside me.
It really gets fun when you use variable variable names to create variables. Have an empty string, use that as a variable name and you've got an "unnamed" variable.
Thankfully no one does that. I've never seen variable names in practice anyway.
Well I have seen it in typos lmao
"I have no personality so I'll just assume one by claiming PHP sucks having never actually used it"
Exactly.
I've used it and it does indeed suck
@@lukeet331 ... he said without any argument at all.
@@CottonInDerTube since this is not a debate, I don't find it weird they didn't bring up an argument..
If you want one, you can just ask
@@georgplaz YOu know ppl in RL who you always have to ask?
Annoying AF.
Same like "you know what happen ..."
or "whats the matter?" "nothing" -.-
Just say it ffs :D
---
Saying something without really telling something is useless.
=)
Been a PHP dev for 2 years now, never realized this was possible
I hope you don't mean to use this "feature".
@@rumble1925 I will use it now.
Tell me you wanted pointers but didnt wanna copy C without telling me you wanted pointers but didnt wanna copy C
Referencing in PHP is always different being the kernel written in C++
Same goes for V8 though 😅
This isn't referencing though, this is just calling a variable based on a variable's value.
PHP has a reference operator not very dissimilar to C's.
As a Java dev: I hate this with a burning passion 💀
that just screams vulnerability
To be fair things like JNDI (Log4Shell ahem) also scream vulnerability.
The cut makes it even funnier
Same functionality but PHP really make people want to use it more than C pointer
Very fun indeed... PHP Pointer
This reminds me of the gud old days learning C when starting my uni :/
"so we have a pointer to another pointer to another pointer to yet again another pointer."
This video's intro and extro are the same, in a way you never thought could be possible!
This won't cause any major and incredibly prevalent database vulnerabilities, right?
... right?
*To infinity and beyond*
- Buzz
Just came here to compliment the visually aesthetic and proportionally scaled window on the video.
brain aneurysm. that’s the only feeling from this.
In all my years of php I did not know you could do that wth
10+ years here and I learned it last month, I'm with you on that
probably shouldn’t though seems like a bad way to code and could get confusing very very quickly
@@abso1utezer010 not really..
Me: oops i added two $ by an accident
This one hacker:
Lmao I had a pointer flashback with this
pointer goes brr
I didn't know you can do this more than once but the ability to reference anything in php is what I'm missing in a lot of languages. Php can parse itself, it's marvellous. You can have a piece of code that says "if I am inside a method then print the first 3 lines off my class code, whatever they are"...marvellous
When you have a bug and call it a feature
I'm guilty using that kind of funny thingy for production code... lol...
Almost a perfect loop
I'm trying to be like the cool kids these days
@@aschmelyun hi mate, how did you get that instant result? are you using some kind of a live server ? cheers!
This is just one of the reasons you should never use PHP 👍
Any argument ?
@@magrigrigri just imagine that you type two "$" by mistake that would be so hard to debug
@@aboshxm2416 5 years of PHP, never typed $ by mistake while accessing an object property. Btw any decent IDE will highlight dynamic property access with a specific color.
@@aboshxm2416 like I've been working with PHP for 8 years and I've never accidentally double $$-ed. Any IDE also highlights this occurrence differently than normal variables.
This is such a dumb argument that I'm doubting that you're even a programmer.
@@xIcarus227 your input is invalid because PHP programmers are not real programmers 😋
"Debuggers nightmare 101" or pointer-ception 😂 But it’s fun to play around with.
I decided to use PHP for a few personal projects because it's easy to find hosting.
I had forgotten how delightful the language actually is.
You will most likely never run into such a problem if you stick to good structured programming and good practices. This is just anecdotal, I have never found it to be a problem.
@@Meister256 Yeah, I find that most of the problems with PHP are the bad code people write.
Make more videos❤️
Will do!
Love this language 😃❤️
I instantly know if someone is a trash dev when they use this feature.
PHP is a syntactical nightmare
PHP has a special place in my Heart 😌
And in hell, too
@@ScorpioHR The Good thing about PHP is that you can refer to JavaScript code
@@ScorpioHR like PHP is a more than decent language nowadays, it's time to stop being ignorants judging languages by what they were 2 decades ago.
@@User-pi3nf Ok so the devs do have a little bit of sympathy
@@xIcarus227 I'm using it right now and it's terrible. In fact, I didn't know people thought it was terrible until I found out myself.
This is actually a really bad thing and has been a known issue in PHP for a very long time.
Why is it a problem?
@@ferial4091 Cross site scripting. SQL injections. Terrible memory management.
Listen to this, try to avoid this in production code lol
@@AJD... what the fuck are you even talking about? Man I swear, some of you people are just throwing words around without having a clue about what they mean.
How does calling a variable from a string value cause any of the vulnerabilities you just mentioned?
@@AJD... Injection, CSRF, XSS etc vulnerabilities come from your code, not language-related problems.
Interesting. PHP is still as fun as hangnails.
Best transition loop ever.
lmao even worse than js
That's a pretty hard thing to do!
Event wores then breinfuuk
even class names and object attributes are dynamic in php
$someObject = new $someClass();
echo $someObject->$someAttribute;
this is equal to adding a million divs. "Get the feeling of pain- i mean HTML in PHP"
yea that totally wont be completely confusing in devevelopment
Double quotes are interpolated, while singles are not. There was no reason to mix them in this video. Also, double $ is forbidden in the professional world. I agree, though. PHP is a fun language. Every language is a fun language if you're learning and growing. Best.
I wouldn't say it's forbidden, you just _really_ have to know what you're doing.
As it stands I'm struggling to find a use case for it, ngl. I do use things like _new $someClassName_ but variable variables are just something I can't find a use for.
I was fighting for my life in a php login form
Talk about baking in hidden bugs in this fun language
Introducing security vulnerability 101
You have somehow found a way to make me appreciate the way pointers work in cpp.
"this can continue on to infinity"
bro the variable's name is buzz, you missed your chance to make a "To infinity and beyond!" joke there lol
And the fun ends when you start learning Session methods 😅🤣
If i want to do this kind of thing, i'll choose C instead.
We have different deffinitons of fun
This reminds me of pointers, I do not want to be reminded of pointers.
Almost every language is someway is a fun language
"Alien discovers pointers for the first time"
You: why do we call them pointers?
PHP: cause you place your pointer finger on the screen if you want to count them $
I like the "Why" at the end of the video.
smart.
this seems like nightmare.
multiple layered dollar sign, and then trying to find which one is which
Is this a tutorial on how to always get a side project/job? Good idea. Lol
its not a sad bug, it's a fun feature.
making over 100k rev per year using php is indeed fun, highly recommend
So you're telling me Buzz can go to infinity and beyond?
Renaming variables must be fun in PHP.
When I first heard your voice I thought @NotJustBikes had changed careers
he sounds like leafy to me idk
To be fair, I have never seen anyone use variable variables (this feature) in PHP.
btw in python you can do eval(bar)
Have been using php for 2 years. First time I have seen this lol. Still won't use it but it's cool it's out there, just doing its thing with security lol
It seems like now that there is v8.0, v8.1 and soon 8.2 and it implements some stuff out of othe languages it becomes popular again. Love that language to bits. Was my first i learned at 14 years