gpt4 book ai didi

swift - wholemodule 优化模式保留了哪些断言?

转载 作者:行者123 更新时间:2023-11-28 06:26:05 25 4
gpt4 key购买 nike

我能找到的所有关于 Swift 断言的解释都解释说 assert*-O 抛出,但是 precondition* 被保留,除非 -未选中 已设置。

但是,我们现在有 whole-module optimization -wmo 作为发布构建的新默认值。

当启用全模块优化时,precondition* 断言是否保留?

最佳答案

考虑这个小程序:

func f(_ i: Int) -> Int {
assert(i > 0, "needed positive number")
return i
}

print(f(0))

xcrun swiftc [opt]编译它并运行结果给出:

  • -Onone:断言错误
  • -Onone -wmo: 断言错误
  • -O:打印 0
  • -O -wmo:打印 0

相比之下:

func f(_ i: Int) -> Int {
precondition(i > 0, "needed positive number")
return i
}

print(f(0))
  • -Onone:前置条件错误
  • -Onone -wmo: 前置条件错误
  • -O:非法指令:4
  • -O -wmo:非法指令:4

我无法完全解释最后两个结果,但很明显,整个模块的优化不会影响断言的处理方式;只有优化级别很重要。


这是在

Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9

关于swift - wholemodule 优化模式保留了哪些断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com