Yul 使用指南
简介 Yul(早期称为 JULIA 或 IULIA)是一种中间语言,可编译到多种后端,包括: Ethereum Virtual Machine (EVM) 1.0 EVM 1.5 计划支持的 eWASM 它旨在作为这些平台的通用标准。Yul 已经可以在 Solidity 中作为 内联汇编 使用,未来 Solidity 编译器甚至可能将 Yul 用作默认的中间语言。Yul 的设计也使得为其构建高级优化器变得容易 核心特性: 核心组件 函数(function) 代码块(block) 变量(variable) 字面量(literal) 循环(for) 条件语句(if / switch) 表达式与变量赋值 强类型系统 变量和字面量必须带类型前缀 支持类型:bool, u8, s8, u32, s32, u64, s64, u128, s128, u256, s256 操作符与内置函数 Yul 本身不提供操作符 对于 EVM,操作码(opcode)作为内置函数提供 如果后端平台不同,可以重新实现这些函数 示例: 递归实现 { function power(base:u256, exponent:u256) -> result:u256 { switch exponent case 0:u256 { result := 1:u256 } case 1:u256 { result := base } default: { result := power(mul(base, base), div(exponent, 2:u256)) switch mod(exponent, 2:u256) case 1:u256 { result := mul(base, result) } } } } 循环实现 { function power(base:u256, exponent:u256) -> result:u256 { result := 1:u256 for { let i := 0:u256 } lt(i, exponent) { i := add(i, 1:u256) } { result := mul(result, base) } } } 注:循环实现依赖 EVM 的 lt 和 add 操作码。 ...