27

任意の Haskell コードを安全に実行する (または安全でないコードの実行を拒否する) 方法を探しています。

持つ必要があります:

  • モジュール/関数のホワイトリスト
  • 実行時のタイムアウト
  • メモリ使用制限

私が見たい機能:

  • スレッドを殺す能力
  • モジュールをネイティブコードにコンパイルする
  • コンパイル済みコードのキャッシュ
  • 複数のインタープリターを同時に実行する
  • コンパイラ エラーの複雑なデータ型 (単純なメッセージを文字列に挿入)

この種の機能を使用すると、任意の Haskell コードを実行できるブラウザー プラグインを実装することが可能になります。これは、私が念頭に置いているアイデアです。

編集:私は2つの答えを持っています。どちらも素晴らしいです。ありがとう!悲しいことに、すぐに使えるライブラリはなく、似たようなプログラムしかないようです。しかし、それは有用なリソースです。とにかく、7.2.1 がリリースされるのを待って、自分のプログラムで SafeHaskell を使ってみようと思います。

4

2 に答える 2

31

lambdabotでこれを約 8 年間行っており、次をサポートしています。

  • 制御された名前空間
  • OS 強制タイムアウト
  • ネイティブ コード モジュール
  • キャッシング
  • 同時対話型トップレベル
  • カスタム エラー メッセージが返されます。

この一連のルールは文書化されています。以下を参照してください。

lambdabot で採用された安全へのアプローチは、Safe Haskell言語拡張作業に影響を与えました。


Haskell でコンパイルされた Haskell アプリケーションを動的に拡張する方法については、次の 2 つの論文を参照してください。

于 2011-05-12T03:22:27.143 に答える
26

GHC 7.2.1 には、必要なものの一部をカバーするSafeHaskellと呼ばれる新しい機能が含まれる可能性があります。SafeHaskell は型安全性を保証し (そのため、 のようなものunsafePerformIOは非合法化されます)、信頼メカニズムを確立するため、安全な API を備えているが安全でない機能を使用して実装されたライブラリを信頼できます。信頼できないコードを実行するために正確に設計されています。

他の実用的な側面 (タイムアウトなど) については、Don が言うように lambdabot を見るのに最適な場所です。

于 2011-05-12T06:20:28.320 に答える