2016-04-12 2 views
0

私は確かに決定論的な方法でawkを実行する方法を探しています。つまり、結果は入力のみで判断する必要があります。言い換えれば、プログラムが出力されていることを前提に、繰り返し可能であることを知りたい。awkの確定的な実行

これは、システム時刻や/dev/randomなどの変更内容のファイルなど、非決定的な入力ソースへのアクセスを削除することを意味します。

私はgawkのサンドボックスフラグを見ましたが、これは助けにならないと思っています。ZeroVM

+0

通常の操作でawkはどのような副作用を生成しますか? –

+0

わかっても分かりません。システムクロック、状態などに依存するようにawkプログラムを書く多くの方法があります。これは決定論を破壊します。 – ateles

+0

あなたは何について話していますか?質問を編集して[mcve]を追加してください。 –

答えて

1

一般的には可能ではないと思います。実行するとたとえば、このスクリプトは、それが依存していないにもかかわらず、異なる値を出力します任意の入力ファイルの

awk 'BEGIN{print systime()}' 

しかし、あなただけの入力ファイルに依存する機能、繰り返し可能な方法でスクリプトを書くことができますし、あらかじめ定義された出力順序を持つ(配列の順序の反復は予測できない)、システムコールを行わない、またはランダムを使用しない。

+0

何らかの種類のサニタイザスクリプトですべてのシステム機能を削除する考えがありました。それが実際に助けになるかどうかは分かりません。コードを書く人が悪意のある人であっても、何かが必要です。 – ateles

+0

その場合、 'awk'の代わりに' Haskell'を使います。 – karakfa

+0

私が理解しているところでは、Awkとは異なり、Haskellは簡単な言語ではなく、それを使用する人はほとんどいません。私は、データだけでなく、人々が独自のコードロジックを入力できるサービスを作りたいと考えています。 Goの遊び場のようなものですが、別の目的のためです。 – ateles

1

ZeroVMは、アプリケーションをサンドボックス化し、すべての非決定性システムコールを削除します。例として、スケジューリングがない(そのスケジューリングが非決定論につながるので)、実行は毎回1970年1月1日から開始されます(特定のシステムコールによって時刻が進められます)。

私はもうZeroVMがインストールされたシステムを持っていませんが、awkをコンパイルするのは難しいことではありません。事実、私はbusyboxがZeroVMで動作していたことを覚えています。busyboxはsome form of awkです。

+0

お役立ち情報私はこれまでの文書を見てきました。明日それを深く見ていきます。うまくいけば私はドッカーのイメージを回転させることができます。セットアップはやや複雑に見えましたが、不可能ではありません。 – ateles

関連する問題