与之前的版本一样,我们大部分时间都花在了使 Solidity 面向未来上,进一步完善了 Yul 优化器、Solidity 到 Yul(以及 eWasm)的转换器和 SMT 检查器。
从 Solidity 生成的代码现在始终在 CBOR 元数据中包含版本号,以便能够快速评估合约是否可能受到编译器错误的影响。
语言特性
- 内联汇编:在 0.5.7 中引入的 Revert 更改:callvalue() 指令不再需要 payable。
- 静态分析器:禁止库在外部调用自身。
编译器特性
- 汇编器:在已部署的字节码中编码编译器版本。
- 代码生成器:修复动态大小结构作为构造函数参数的处理。
- 内联汇编:禁止 msize() 和 Yul 优化器的组合。
- 元数据:添加源文件的 IPFS 哈希值。
- 优化器:添加规则以简化 SHL/SHR 组合。
- 优化器:添加针对左移一位的乘法和除法的规则。
- SMT 检查器:支持继承状态变量。
- SMT 检查器:支持元组和具有多个返回值的函数调用。
- SMT 检查器:支持 delete。
- SMT 检查器:将对 this 的外部函数调用内联。
- Yul 优化器:将单次运行的 for 循环简化为 if 语句。
- Yul 优化器:优化数字的表示。
- Yul 优化器:不要内联递归函数。
- Yul 优化器:如果使用了 msize(),则不要删除影响 msize() 的指令。
错误修复
- 代码生成器:在从存储器中加载时,将未初始化的内部函数指针显式转换为无效函数。
- 代码生成器:修复在分配包含映射数组的结构时出现的断言失败。
- 编译器内部:在每次编译之前重置 Yul 字符串存储库,释放内存。
- SMT 检查器:修复基本构造函数修饰符中的错误转换。
- SMT 检查器:修复访问从基类继承的状态变量时出现的内部错误。
- SMT 检查器:修复定点运算中的内部错误。
- SMT 检查器:修复对不支持类型的赋值时的内部错误。
- SMT 检查器:修复在内联修改局部变量的函数调用时分支中的内部错误。
衷心感谢所有帮助使此版本发布成为可能的贡献者!
下载 Solidity 的新版本这里.