0

IronPythonプロジェクトとOrchard CMSプロジェクトのソース コードを見てきました。IronPython は、Microsoft.Scripting.Hosting.Shell ( DLRの一部) という名前空間で動作します。オーチャード プロジェクトは、さまざまなインターフェイス (IShellContainerFactory、IShellSettings) で間接的に「シェル」の概念を使用して動作します。

上記のプロジェクトはどれも詳細なドキュメントを持っていないため、ソース コードを読んでアプリケーションの全体的な構造/アーキテクチャを理解しようとしている場合、その名前から型 (クラスなど) の意味を理解することは非常に重要です。

このソース コードの作成者は、「シェル」について言及するときに何を念頭に置いているのでしょうか。「シェル」という言葉を聞くと、コマンド ライン インタープリターのようなものを思い浮かべます。IronPython には対話型インタープリターがあるため、これは理にかなっています。しかし、私にとっては、Web CMS に関してはあまり意味がありません。

「シェル」と呼ばれるものに遭遇したとき、私は何を考えるべきですか?一般的に言えば、「シェル」の役割と責任は何ですか? その質問に答えることさえできますか?「シェル」の意味は主観的ですか (用語を役に立たなくしています)?

ありがとう。

4

2 に答える 2

2

オーチャードでは、「シェル」という用語は実際にはスコープのメタファーです。ネストされたスコープには、host、shell、workの3つがあります。

ホストは、Webアプリドメインの期間中存続する単一のコンテナーです。

シェルは、現在の構成に従って構築されたホストによって作成された子コンテナーです。構成が変更されると、新しいシェルが構築され、既存のシェルが解放されます。

作業は、シェルによって作成された別のコンテナであり、単一の要求の期間中存続するコンポーネントを保持します。

シェルコンテナを使用することの良い点の1つは、静的変数の使用を回避し、構成が変更されたときにアプリドメインを循環させる必要がないことです。もう1つの優れた点は、ホストが複数のシェルを保持し、リクエストごとに適切なシェルを使用するときに、Orchardアプリドメインが同時に複数の「サイト」にサービスを提供できるようにすることです。

于 2010-11-17T08:22:53.683 に答える
1

シェルの一般的な意味は、「コマンドを解釈して実行するユーザー プロセス」になると思います。

  1. ユーザー プロセス」: オペレーティング システムのカーネルに組み込まれているプロセスとは異なります。IBM メインフレームの世界では、JCL をシェルとしてカウントするのは難しいでしょう。

  2. '解釈して実行する': シェルは、特定の一連のコマンドを実行するよう厳密にプログラムされるのではなく、ファイルまたは端末からコマンドを読み取り、提示されたものに反応します。

  3. 'コマンド: コマンドが何であるかは、コンテキストによって異なります。標準の Unix シェルでは、実行されるコマンドは主に他のプログラムであり、シェルはそれらを適切にリンクします。明らかに、組み込みコマンドがあり、通常は、コマンドの実行結果に対する適切な反応を可能にするフロー制御構文もあります。

他のコンテキストでは、他の種類のコマンドが実行されていると考えるのが合理的です。たとえば、ユーザーがデータベースに接続している間に SQL ステートメントを実行できるようにする「SQL シェル」を思い描くことができます。

Python シェルは、Pythonic 表記をサポートし、Python の構文に密接に関連する構文を使用して、Python に似たステートメントを実行します。Perl シェルは、Perl に似た表記法をサポートし、Perl に似たステートメントを実行します...そして、リストは続きます。(たとえば、Tcl には tclsh (Tcl シェル) があります。)

于 2010-03-28T21:50:09.007 に答える