 Hello again. So it's actually not brand new in like blockchain terms because it's a year old So it's like really old at this point Okay, you'll Which is important. Oh the big one. Okay So some of you may have attended Def Country and may have seen this other talk called Yulia Which I had last year. There's some overlap between that and this one But yeah after Def Country we did learn that there's another language called Yulia and maybe we shouldn't call our language Yulia as well So we decided to rename it to Yul So that's that's the real talk about Okay, the design goals for Yul the couple of design goals we had but first of all it has to be easy to read and write Secondly, it has to be a good base for transformations for more importantly optimizations on top of it And the third main point is that it should be a really good base for auditing. So actually these three points play together By having it easy to audit We we are writing code as like single instructions in a function You know the smaller the code it the easier to audit and as a result It's quite easy to read but it's not well optimized it use a lot of gas So that's why we need a lot of good optimization steps on top of it And the last big point for the design goals is to support multiple target VMs Of course it supports EVM, but it also supports EVM 1.5 and E-wasm Okay, some of the features we have in Yul itself. It does look like an assembly language But it's heavily augmented from an assembly language. First of all, it has variables And it also has blocks and the blocks are the own scopes Variables declared in blocks are not visible outside and you can nest blocks Then we also have two really high level constructs, which are quite uncommon in assembly languages We have for loop and we have a state switch statement But we do also have like this single condition if statement for those cases where switch statement would be in a work hill More importantly, as mentioned we have functions and we have function calls Functions can be clearly defined and lastly we have types and that's kind of unheard of in assembly languages So that's why Yul is more like an intermediate language for compilers than an assembly language But it can be used in an SN assembly language to write a manually contracts in Okay, just what it looks like an example of the switch Construct this is a function. There's a switch statement with three cases The k01 and the default as you see there's no break statement in the textual blocks Because it there's no fault through if it goes to k0 it wouldn't go through case one But this can be written as a for loop as well. So this is what it looks like writing it as a for loop now here You can identify That it is closer to assembly because we have those idiom like instructions LT for less than add and what it's lesson more so it is like an augmented assembly Okay, Yul itself originates from The solidity in my assembly, which you guys probably are familiar with because it can be used within solidity So this in now assembly was introduced like two years ago. It had instructions and jumps didn't really add anything else It did it like variables, but didn't had all these nice features. I explained These nice features were introduced probably a year ago We added the functions and foreign switch and they can be used for a year at this point Now with zero five zero we're making a big change and we are removing Some of the features in an in line assembly. We're removing jumps But you guys shouldn't be afraid because the foreign switch statements are way better to do the same things You were doing with jumps Here I also must mention that even though In a nice and there was a single version of a line assembly presented to you guys But in the back end we had like three different versions of it And the solidity compiler can be used in a similar mode and all these three different versions can be accessed through December mode so the first version is this In line assembly the bad one which has jumps the second version is the strict in line assembly Which is you as I explained but the third version is the strict in line assembly with types Now with zero five zero we're not gonna have types yet But with zero six zero We are planning to have full complete you'll support now. I must expand here. What what the hell does it mean? So in Ethereum basically deploying a contract is a two-step process There's a constructor which we usually call the init code This is being sent to the network this constructor is executed it can change the state and it can also return a bytecode Which is stored in the state and that's the bytecode for your contract Currently there's no way to Represent these two stages in you'll but we do have a plan to do that and that's what we call you'll objects So that's like the next big part we have to do and Then you will be fully capable to write contracts in And then lastly probably at zero seven zero We're gonna have types mandatory and we're gonna have user defined types By user defined types here I actually mean a specific type for a memory pointer a specific type for storage key and storage value Maybe actual user defined types later Okay, so when do we gonna have this in solidity? It's gonna take a while But it's already in solidity partially it's being used in the ABI encoder v2 Which is a complete rewrite of the ABI stuff. Are you gonna talk? Tomorrow at great lengths about all the changes in solidity. So you guys should listen to that There are two blockers to get this in solidity have optimizations, but the good news There's a lot of optimization work already being done. So that that should be covered soon enough but the other big blocker is Revwriting this code generator. So in solidity, we take the source code we do we parse it we do Analysis etc. And in one stage we generate EVM bytecode, which probably is a bad idea So we need to rewrite this this one step into two steps to generate you and then use you to generate EVM But this only gonna start up to zero five zero, but that's like the big plan for next year Okay, there are other languages actually already involved with you Apart from solidity, there's this language called Flint Which is a fifth like language and it targets you it actually works, I just tried it yesterday and Okay, it's not compliant with zero five zero, but it works There is is a prototype LLL to you compiler, which is really small and There's also this other language called logic on which was a eat Berlin project Which also targets you Hopefully, I mean, that's my personal hope but probably the entire solidity and shares that That you're gonna be used and utilized by the entire ecosystem And hopefully we can convince the viper people to also use it and get all the benefits we have Okay, the tools regarding you Obviously pretty much everything is the solid is in this solidity compiler, which is C++ But there's also already a rust implementation of fuel and in this rust implementation. It is called you'll sewer In this rust implementation You can create you'll code programmatically and you can print it out, but you can also parse you'll code Do transformations on it and print it out And this rust library is also integrated with soul seed to tap into the optimization steps and the compiler There's like one other use case I really like called why if you So basically why you VM is it came from a need we have any wasm So if it wasn't we want to replace the VM entirely and we want to give you this Web assembly only client But probably you still want to execute even bite code and you can do that with why if you So why if you translate Evian bite code into your source code, which can be also compiled back to Evm and validated But it can be also compiled to E wasm directly. I think this really cool project And I hope that they're gonna be other You know independent third-party you'll implementations and analyzers for you So basically that that's what I wanted to tell you guys you should check the documentation So make sure you follow the link I have there, which is latest Don't go to the 0 4 24 or 25 version of it go to the latest Also join our channel ask any questions interact with us and Please contribute to you sir and why Evm you need your help. Thank you guys