Solidity v0.8.6 修复了一些非关键但令人烦恼的 bug,特别是关于实际上可以到达的不可到达代码的警告。
错误修复
不可到达警告
在 Solidity 0.8.5 中,我们发布了一项新功能,用于检测代码是否由于调用的函数在代码执行前始终回退而变得不可到达。此检测在与嵌套调用内部库函数相关的连接中包含一个错误,其中函数的“回退行为”在确定其调用的函数不总是回退后未正确更新。
由于此错误相当普遍,因此我们发布了此版本,其更改日志异常简短。
优化器设置
我们发现,默认优化器设置根据编译器的调用方式而有所不同:使用命令行上的编译器(solc)会导致激活最小的优化器功能(预期功能),而使用 solc-js 则会禁用所有优化器功能。
这些最小功能是“窥孔优化器”,这是一个执行明显替换(例如删除 PUSH1 0 POP)的例程,以及“跳转目标移除器”,它删除从任何地方都未跳转到的代码。
即使在标准 JSON 中将 settings.optimizer.enabled 设置为 false 时,窥孔优化器和跳转目标移除器也会被激活,并且必须在详细设置中显式禁用。
错误在于,为 settings.optimizer 提供值但不包含 enabled 不等效于将 enabled 设置为 false。它等效于显式禁用所有优化器组件。如果根本没有提供 settings.optimizer,则错误不会出现。
完整更改日志
语言特性
- Yul:Yul 对象中 ".metadata" 数据对象的特殊含义。
错误修复
- 控制流图:修复错误报告的不可到达代码。
- Solc-Js:在不使用 --optimize 标记运行 solcjs 时,在标准 JSON 中使用 settings.optimizer.enabled=false 而不是省略键。
- 标准 JSON:省略 settings.optimizer.enabled 不等效于将其设置为 false。这意味着还禁用了默认情况下在 enabled=false 时仍运行的窥孔优化器和跳转目标移除器。
非常感谢所有帮助使此版本发布成为可能的贡献者!
在此处下载 Solidity 的新版本 此处。