IBM Swift 沙盒的超时时间是多少?

What is the timeout on IBM's Swift Sandbox?

我 运行 遇到了一个问题,试图在 IBM's Swift Sandbox 上 运行 编码导致某种内部超时。

Swift Ver. 3.0.1 (Release)
Platform: Linux (x86_64)
Error running code: 
WARNING: Your kernel does not support swap limit capabilities, memory limited without swap.
/swiftfiles/doit.sh: line 51:    42 Illegal instruction     timeout ${TIMEOUT} .build/debug/TempCode

有问题的代码正在解码一个大的 Base64 编码字符串:

let base64EncodedInput = [really really long string]

let inputData = Data(base64Encoded: base64EncodedInput)!

let inputDecodedString = String(data: inputData, encoding: .utf8)!

let rowArray = inputDecodedString.components(separatedBy: "\n")

您可以在线查看完整的数据字符串和运行代码here

我是否已将分配给 运行 我的 Swift 流程的时间用完了?什么是超时?

为了回答标题中的问题,我们实现了 10 秒的硬超时,但如果内存耗尽或堆栈溢出,代码可能会被更快地终止。但这并不是您在这里看到的问题。

经过一些调查,我们确定在您的沙盒 link 中创建超大字符串的 base 64 编码服务使用 \r\n 作为换行符而不是 \n。由于似乎是 Foundation 中的错误,这会在您使用 let rowArray = inputDecodedString.components(separatedBy: "\n") 时导致错误。如果您改为使用 let rowArray = inputDecodedString.components(separatedBy: "\r\n"),您应该会看到您的问题消失了。同时,我们将向 Foundation 提交问题。

您看到 timeout 的原因是我们返回 not-so-great 错误消息。 timeout ${TIMEOUT} .build/debug/TempCode 行是我们如何执行 Sandbox 用户代码的一部分,当该行失败时,我们将其作为错误消息的一部分返回。我们将致力于为将来减少混乱的错误消息。

编辑:事实证明这是一个已知错误。 https://bugs.swift.org/browse/SR-2483