【问题标题】:Swift REPL mode random crash with reflect带有反射的 Swift REPL 模式随机崩溃
【发布时间】:2015-02-15 18:25:19
【问题描述】:

在了解了 reflect() 动态学习类型之后,我开始使用它并遇到了这个奇怪的崩溃:

# swift -version
Swift version 1.1 (swift-600.0.56.1)
Target: x86_64-apple-darwin14.1.0
# swift
Welcome to Swift!  Type :help for assistance.
1> println(reflect({1}))
Swift._OpaqueMirror
2> reflect({1})
Segmentation fault: 11

但是:

1> reflect({1}).dynamicType
$R0: MirrorType.Type = Swift._OpaqueMirror

此行为是可重复的,并且硬件/操作系统 (10.10.2) 运行良好。在评估过程中也会出现明显的停顿,就好像堆栈或缓冲区溢出一样。使用分配给闭包的变量和反映变量等变化也会崩溃。最后:在 lldb 中运行 swift 使其具有正确的输出!

[...]
(lldb) c
Process 3322 resuming
Welcome to Swift!  Type :help for assistance.
1> reflect({"a"})
reflect({"a"})
$R0: _OpaqueMirror = {
  data = {
    owner = {}
    ptr = {}
    metadata = 0x07fad7e8ffffff40
  }
}

有什么见解吗?

【问题讨论】:

    标签: swift reflection crash closures read-eval-print-loop


    【解决方案1】:

    看起来这已在 Swift 1.2 测试版中得到修复:

    % swift -v
    Apple Swift version 1.2 (swiftlang-602.0.37.3 clang-602.0.37)
    Target: x86_64-apple-darwin14.1.0
    Welcome to Swift version 1.2. Type :help for assistance.
      1> println(reflect({1}))
    Swift._OpaqueMirror
      2> reflect({1})
    $R0: _OpaqueMirror = {
      data = {
        owner = {}
        ptr = {}
        metadata = 0x0000000100700068
      }
    }
      3>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2013-08-23
      • 2013-04-21
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多