2

私はPrinciples of Computer System Design(Saltzer & Kaashoek)を読んでおり、初期の章の1つはモジュール性があります。たとえば:プロセス内で「真の」モジュール性をサポートする言語はありますか?

  • 異なるモジュールは
  • モジュールが

できるだけその内部実装のように少しを露出するように構成されるべきである指定されたインターフェイスを介して対話する必要があります今ではすべてのかなり標準のものだ、とありますほとんどのOO言語が動作する方法。しかし、彼らのようなより厳しい要件を、言及:

  • と呼ばれるモジュールが
  • Aがで死ぬために、呼び出し元を引き起こすできないようにする必要があり、モジュールと呼ばれる返すことができないことで、発信者をロックできないようにする必要がありスタック領域が不足しています

これらの要件は、私には完全な意味を成しています。大規模なプログラム全体に広がるエラーを止め、すべてをクラッシュさせるためには、多くのことがあります。

しかし、クライアント/サーバープロセスにすべてを分割する方法は、多くの目的のために多少残虐なように思えます。あなたは、クライアント/サーバの両方があるように思わとしてモジュール化したいすべて執筆:たとえば

  • 信じられないほど退屈

(WRTの実行速度)が遅いが、私のことができるようにしたいと思います私の数学モジュールに作業を委任し、実行時間とメモリ使用量に制限を設けていますが、私は実際に別の数学を作る必要はありませんサーバは、さらに、IPCのメッセージパッシングオーバーヘッド(計算とレイテンシの両方)は、直接プロシージャコールに比べてかなり大きいと確信しています。

この種のモジュール性を提供する言語はありますか内にプロセスがありますか?ダイレクトプロシージャコールのタイトカップリングとマルチプロセスクライアント/サーバー設計のオーバーヘッドの中間にありますか?私はそれを想像する方法、代わりに:

y = Math.sin(x) 

無限ループにオープン私を残し、Mathモジュールで、オーバーフローを積み重ね、私は

Yを設定します
y = try(maxMemory=1024kb, maxTime=12ms){ 
    Math.sin(x) 
}catch(Anything){ 
    0 
} 

ような何かをしたいと思いますMath.sin内で何かが失敗した場合のデフォルト値(0)に変更します。無効な入力、バグ、無限ループ、実行時例外、その他。このようなものはすでにいくつかの言語で存在していますか?そうでない場合、なぜですか?それは私には、非常に有用なものが、さまざまな場所で好きなようです。

+0

OSによって最適に処理されるものをプロセス空間に実装しようとしています...探しているものと似たようなものがあるかもしれませんが、存在すればこれらはほぼ確実に実装されています複数のプロセスを作成する機能があります。同じオーバーヘッドがありますが、言語によって定型コードがすべて処理されます。もう1つの解決策は、独自の仮想プロセス、スケジューラを持つことができるVMレイヤーを使用することですが、agianはパフォーマンスを低下させます。 –

答えて

1

あなたはsandbox library使っRacketでこれを行うことができます。

> (require racket/sandbox) 
> (define x 0) ;; some input value 
> (call-with-limits 0.012 ;; 12 ms 
        1  ;; 1 MB 
        (lambda() (sin x))) 
0 

> (call-with-limits 1 ;; 1 sec 
        1 ;; 1 MB 
        (lambda() (sleep 2) 'done)) 
with-limit: out of time 

> (call-with-limits #f ;; no time limit 
        1 ;; 1 MB 
        (lambda() 
         (let loop() 
         (cons (make-vector 10000) (loop))))) 
with-limit: out of memory 

コードは別々の軽量ラケット(「緑」)のスレッド(ない別のOSプロセス)で実行されます。

例外を発生させる最後の2つのケースは、代替値を代入したい場合に捕捉できる例外です。

あなたはまた、一方など、

を、承認されたライブラリの少数へのアクセスを制限する設定の評価者のような、より強力なものを行うファイルシステムとネットワークへのアクセスを制限することができサンドボックスのライブラリを使用して、これはもっとあります通常の関数呼び出しよりも高価です。実際には、信頼するコンポーネントとそうでないコンポーネントを把握する必要があります。あるいは、追加の要件の静的検証をサポートするシステムを見てください。

関連する問題