2016-12-04 7 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コードを実行することができます。

スウィフトプロセスを実行するために割り当てられた時間を最大限に活用していますか?タイムアウトとは何ですか?

+0

今私は10秒のタイムアウトを信じていますが、それはタイムアウトメッセージのようなものではありません。表示されているメッセージは、不正なコードが実行されていることを示していますが、完全なエラーメッセージは表示されない可能性があります。私はこれをより深く見て、あなたに戻ってきます。 – TheSoundDefense

+0

@TheSoundDefenseこれをお探しいただきありがとうございます。私は入力で遊んでいましたが、今度は別のエラーが発生しました:[gist](https://gist.github.com/JALsnipe/4e3f1a833701b1d84eedbddbec39f693) – JAL

+0

これはサーバーの問題であり、コードに間違いがないとは限りません。私は一見する必要があります。 – TheSoundDefense

答えて

1

タイトルの質問に答えるために、10秒のハードタイムアウトを実装しましたが、メモリがなくなったりスタックがオーバーフローしたりするとコードがより早くkillされる可能性があります。しかし、それはあなたがここで見ている問題ではありません。

調査の結果、Sandboxリンクで非常に大きな文字列を作成したベース64エンコーディングサービスで\nの代わりに\r\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

+0

ありがとう、これは非常に役に立ちます。問題を見ることができるよう、https://bugs.swift.orgで開いているチケットにリンクしてください。 – JAL

関連する問題