Solidity v0.8.2 添加了一个优化器阶段,可以内联少量代码以节省 Gas,并提供更多方法来处理代码文档,例如导出内联注释和允许自定义 natspec 标签。
值得注意的新功能
内联器
此版本将一个简单的内联器添加到 Solidity 的底层优化器中。 它可以内联不包含控制流分支或具有副作用的操作码的简短函数。 如果你想了解更多关于内联器的信息,请阅读这篇文章.
自定义 Natspec 和导出的文档
现在可以使用编译器之外的文档标签集。 这些自定义标签必须以@custom: 后跟小写字符或连字符。 这些标签的用法由应用程序定义,但我们认为这对于正式验证或特殊文档需求很有用。 例子可以是 @custom:since v2.3 或 @custom:invariant sum(m_balances).
这些自定义标签包含在 "开发者文档" 中的 NatSpec 导出中。
也可以在函数内部使用三斜杠文档。 这些由编译器作为 Json AST 的一部分导出,作为以下语句的 "documentation" 属性。
完整变更日志
编译器功能
- AST: 将每个语句上方的 NatSpec 注释导出为它们的文档。
- 内联汇编: 不再警告关于变量或函数被 EVM 操作码遮蔽。
- NatSpec: 允许并导出所有以 @custom: 开头的标签。
- NatSpec: 为解析错误提供源位置。
- 优化器: 在跳转到在几个无副作用操作码之后再次跳转的小块时进行简单的内联。
错误修复
- AST: 为枚举成员添加了 referencedDeclaration。
- 代码生成器: 修复了当函数作为其他可调用对象的参数传递时发生的内部错误,当函数类型可以隐式转换,但并不相同。
- 解析器: 在某些情况下正确解析 .address。
- SMTChecker: 修复了部署阶段中块和交易变量的类型约束缺失。
- 类型检查器: 修复了当覆盖说明符不是合约时的内部错误。
- 类型检查器: 将函数哈希冲突错误变为致命类型错误。
AST 更改
- 将 nameLocation 添加到声明以表示符号名称的确切位置。
- 删除了冗余函数类型 "bytearraypush" - 被 "arraypush" 替换。
- 支持字段文档以保存每个语句上方的 NatSpec 注释。
衷心感谢所有为本次发布做出贡献的人!
从这里下载 Solidity 的新版本 这里.