2016-12-04 38 views
0

我遇到了一個問題,試圖在IBM's Swift Sandbox上運行代碼導致某種內部超時。IBM 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過程?什麼是超時?

+0

我們相信現在有十秒的超時時間,但這不是我們的超時消息的樣子。您看到的消息表示正在運行一些非法代碼,但完整的錯誤消息可能會被抑制。我會深入研究這個問題並回復你。 – TheSoundDefense

+0

@TheSoundDefense感謝您對此進行調查。我正在玩弄輸入,並得到了一個不同的錯誤:[gist](https://gist.github.com/JALsnipe/4e3f1a833701b1d84eedbddbec39f693) – JAL

+0

這可能是一個服務器問題,並不一定是你的代碼有問題。我得看一看。 – TheSoundDefense

回答

1

爲了回答標題中的問題,我們實現了十秒的硬超時,儘管如果內存用完或堆棧溢出代碼可能會更快地中止。但這不是你在這裏看到的問題。

經過一番調查,我們確定在您的沙盒鏈接中創建非常大的字符串的base 64編碼服務使用\r\n代替換行符而不是\n。當您使用let rowArray = inputDecodedString.components(separatedBy: "\n")時,這會導致錯誤,因爲在Foundation中看起來是一個錯誤。如果您改爲使用let rowArray = inputDecodedString.components(separatedBy: "\r\n"),您應該看到您的問題消失。與此同時,我們將向基金會提交一個問題。

您看到timeout的原因是因爲我們正在返回一個不太好的錯誤消息。行timeout ${TIMEOUT} .build/debug/TempCode是我們如何執行Sandbox用戶代碼的一部分,當該行失敗時,我們將其作爲錯誤消息的一部分返回。我們將爲未來製作一個不太混亂的錯誤消息。

編輯:事實證明,這是一個已知的錯誤。 https://bugs.swift.org/browse/SR-2483

+0

謝謝,這是非常有幫助的。請鏈接到您在https://bugs.swift.org打開的票證,以便我可以看到問題。 – JAL

相關問題