2016-12-04 3 views
0

Ich stoße auf ein Problem, bei dem der Versuch, Code auf IBM's Swift Sandbox auszuführen, eine Art interne Zeitüberschreitung verursacht.Was ist die Zeitüberschreitung bei 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 

Der Code in Frage eine große Base64-Codierung String decodiert:

let base64EncodedInput = [really really long string] 

let inputData = Data(base64Encoded: base64EncodedInput)! 

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

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

Sie können den vollständigen Datenstring sehen und den Code online here laufen.

Maximiere ich die Zeit, die für die Ausführung meines Swift-Prozesses zur Verfügung steht? Was ist die Zeitüberschreitung?

+0

Wir haben jetzt glaube ich eine 10-Sekunden-Timeout, aber das ist nicht, was unsere Timeout-Nachricht aussieht. Die Nachricht, die Sie sehen, weist darauf hin, dass illegaler Code ausgeführt wird, aber die vollständige Fehlermeldung möglicherweise unterdrückt wird. Ich werde mir das genauer ansehen und zu dir zurückkommen. – TheSoundDefense

+0

@TheSoundDefense Danke, dass du dir das angeschaut hast. Ich spielte mit der Eingabe herum und bekam dieses Mal einen anderen Fehler: [gist] (https://gist.github.com/JALsnipe/4e3f1a833701b1d84eedbddbec39f693) – JAL

+0

Dies könnte ein Serverproblem sein und nicht unbedingt etwas mit Ihrem Code nicht in Ordnung. Ich werde es mir ansehen müssen. – TheSoundDefense

Antwort

1

Um die Frage im Titel zu beantworten, haben wir eine harte Zeitüberschreitung von zehn Sekunden implementiert, obwohl der Code schneller beendet werden kann, wenn der Speicher ausgeht oder der Stapel überläuft. Aber das ist nicht das Problem, das Sie hier sehen.

Nach ein wenig Nachforschungen haben wir festgestellt, dass der Basis-64-Codierungsdienst, der die sehr große Zeichenfolge in Ihrer Sandbox-Verknüpfung erstellt hat, \r\n für Zeilenumbrüche anstelle von \n verwendet. Dies verursacht einen Fehler, wenn Sie let rowArray = inputDecodedString.components(separatedBy: "\n") aufgrund eines Fehlers in Foundation verwenden. Wenn Sie stattdessen let rowArray = inputDecodedString.components(separatedBy: "\r\n") verwenden, sollte Ihr Problem verschwinden. Wir werden in der Zwischenzeit ein Problem mit der Foundation stellen.

Der Grund, warum Sie timeout sehen, ist, weil wir eine nicht so große Fehlermeldung zurückgeben. Die Zeile timeout ${TIMEOUT} .build/debug/TempCode ist Teil davon, wie wir den Code eines Sandbox-Benutzers ausführen. Wenn diese Zeile fehlgeschlagen ist, haben wir sie als Teil der Fehlermeldung zurückgegeben. Wir arbeiten an einer weniger verwirrenden Fehlermeldung für die Zukunft.

EDIT: Es stellt sich heraus, dass dies ein bekannter Fehler ist. https://bugs.swift.org/browse/SR-2483

+0

Danke, das ist sehr hilfreich. Bitte verlinke hier auf das Ticket, das du auf https://bugs.swift.org öffnest, damit ich das Problem beobachten kann. – JAL

Verwandte Themen