IBM Swift Sandbox的超时时间是多少?

时间:2016-12-04 03:26:14

标签: linux swift ibm-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流程的时间?什么是超时?

1 个答案:

答案 0 :(得分:1)

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

经过一番调查后,我们确定在您的沙箱链接中创建了非常大的字符串的base 64编码服务使用\r\n代替换行符\n。由于Foundation中的错误,使用let rowArray = inputDecodedString.components(separatedBy: "\n")时会导致错误。如果您改为使用let rowArray = inputDecodedString.components(separatedBy: "\r\n"),则应该会看到问题消失。在此期间,我们将向基金会提出问题。

您看到timeout的原因是因为我们返回了一条不太好的错误消息。行timeout ${TIMEOUT} .build/debug/TempCode是我们执行沙盒用户代码的一部分,当该行失败时,我们将其作为错误消息的一部分返回。我们将在未来处理一个不太混乱的错误消息。

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