The topic of this article may not meet Wikipedia's general notability guideline. (October 2011) |
CorbaScriptは、 Common Object Request Broker Architecture(CORBA )オブジェクトとのやり取りをサポートするために設計されたオブジェクト指向 スクリプト言語です。動的な呼び出しとインターフェースリフレクション機能を活用し、クライアントサイドとサーバーサイドの両方のCORBAアプリケーション開発に柔軟なスクリプト環境を提供するために開発されました。
CorbaScriptは動的インタプリタ言語であり、その構文はC++やJavaに似ています。しかし、PythonやSmalltalkといった動的言語の設計要素をいくつか取り入れています。これらの言語と同様に、CorbaScriptはすべての値をオブジェクトとして扱い、実行時に動的な型チェックをサポートします。ソースコードは、シンプルな参照カウント式ガベージコレクタを備えた専用の仮想オブジェクト指向マシンによって実行される擬似コードに変換されます。[1]
特徴
基本的なスクリプト
CorbaScript には、次のような一般的なスクリプト機能が含まれています。
- 解釈実行。対話型モードとバッチ モードの両方に適しています。
- 実行時の型チェック。
- long、double、boolean、char、string、array、dictionaryなどの基本型。
- if-else、while、do-while、for-inなどの制御構造。
- throw、try-catch-finally を使用した例外処理。
- ユーザー定義のプロシージャとモジュール (再利用可能なスクリプト ファイル)。
- クラス、多重継承、ポリモーフィズムなどのオブジェクト指向プログラミング構造。
ランタイムには、参照カウントに基づく単純なガベージ コレクターが含まれています。
CORBA統合
CorbaScript はCORBAミドルウェアと緊密に統合されており、Dynamic Invocation Interface (DII) と Dynamic Skeleton Interface (DSI) の両方に完全にアクセスできるようになります。
- DII 経由で任意の CORBA オブジェクトを呼び出し、CORBA クライアントのスクリプトを可能にします。
- DSI 経由で CORBA オブジェクトを実装し、サーバーを CorbaScript で記述できるようにします。
- struct、union、sequence、arrayなどの複合型を含む、OMG インターフェース定義言語(IDL) 定義のデータ型を完全にサポートします。
- CORBA DynAny API を使用して、in、out、および inout パラメータにアクセスします。
- インターフェース リポジトリを介して型チェックがサポートされ、オプションでキャッシュしてパフォーマンスを向上します。
- 動的な検出とリフレクションのための IDL インターフェイスの構造へのスクリプト アクセス。
高度な統合
CorbaScript には、基本的なスクリプト機能以外にも次のような追加機能が含まれています。
- ネイティブ コード統合のためのCライブラリの動的ロード。
- Java 仮想マシンとの対話の実験的なサポート。
- C++に新しい機能を埋め込むことを可能にする拡張可能なランタイム。
モジュール
CorbaScriptを使用すると、任意のスクリプトをインポート可能なモジュールとして機能させることができます。標準モジュールには以下が含まれます。
- LIBC: 標準 C ライブラリ関数への動的アクセス。
- IO: バイナリおよびテキスト ファイルの読み取り/書き込みのサポート。
- math : 標準的な数学演算。
- POSIX : system() や fork() などの POSIX システム コール。
- ソケット: TCP/IP ネットワークのサポート。
- IOR: CORBA オブジェクト参照 (IOR) の簡略化された保存/取得。
- NSTools および CosNamingImpl: CORBA ネーミング サービスを管理するためのツールと実装。
- shell: シェル プログラムを作成するための基本クラス。
- SMTP : 基本的な SMTP 実装。
- time : 日付と時刻のユーティリティ。
デモ
CorbaScript ディストリビューションには、多数のサンプル アプリケーションとツールが含まれています。
- hello: 基本的な CORBA クライアント/サーバー「Hello World」アプリケーション。
- calc: シンプルな計算機サービス。
- チャット:ファクトリーとオブザーバーの設計パターンを実装したチャット システム。
- コンポーネント: 暗黙的な接続を使用するクライアント コールバック コンポーネント。
- コンピュータ: 分散型素数サービス。
- event: OMG イベント サービスを使用したイベント チャネルの実装。
- grid: グリッド オブジェクトのファクトリー パターン。
- ir: CORBA インターフェース リポジトリをナビゲートします。
- リンク: 再帰オブジェクト呼び出しのデモンストレーション。
- ネーミング: CORBA ネーミング サービスとの統合。
- テスト: 引数の型と渡し方モードのデモンストレーション。
- ワーカー:遅延 (非同期) 呼び出しを使用するクライアント サーバーの例。
- remote_cssh: OMG IDL とシェルベースのリモート呼び出しを使用するスクリプト エンジン インターフェイス。
- プロセス: URLを使用した CORBA オブジェクト アクセスとファクトリ パターン。
例
こんにちは例
以下は、CorbaScript を使用して、次の OMG IDL インターフェースで定義された CORBA オブジェクトと対話する方法を示しています。
インターフェイスHello { void hello (); void display ( in string message ); };
CorbaScript を使用すると、このインターフェースを実装する CORBA オブジェクトに対して操作を呼び出すことができます。
>>> # `hello` 変数は CORBA `Hello` オブジェクトを参照します。
>>> hello = Hello ( "IOR:...." )
>>> # 'hello' 操作を呼び出します
>>> hello . hello ()
>>> # 'display' 操作を呼び出します
>>> hello . display ( "Hello World!" )
>>> # CORBA ネーミング サービスを取得します
>>> NS = CORBA . ORB . resolve_initial_references ( "NameService" )
>>> # CORBA ネーミング サービスで名前を解決します
>>> object = NS . resolve ( CosNaming . Name ( CosNaming . NameComponent ( "anHelloObject" , "" )))
>>> # 自動シーケンス変換によるより簡単な構文
>>> object = NS . resolve ([[ "anHelloObject" , "" ]])
>>> # 解決されたオブジェクトに対して操作を呼び出します
>>> object . display ( "Hello World!" )
CorbaScript を使用すると、CORBA オブジェクトを簡単かつ直感的に呼び出すことができます。
CorbaScript で CORBA オブジェクトを実装する
次の例は、CorbaScript で `Hello` インターフェイスを実装する方法を示しています。
# Helloインターフェースを実装するスクリプトクラスを定義する
class HelloImpl { # コンストラクターproc __HelloImpl__ ( self ) {}
# `hello` 操作の実装
proc hello ( self ) {
println ( "OMG IDL `hello` 操作が呼び出されます。" )
}
# `display` 操作の実装
proc display ( self , message ) {
println ( message )
}
}
>>> # インスタンスを作成する
>>> hello = HelloImpl ()
>>> # ローカル呼び出し
>>> hello . hello ()
OMG IDL `hello` 操作が呼び出されます。
>>> hello . display ( "Hello World!" )
Hello World!
>>> # CORBA に接続し、実装されたインターフェースを指定します
>>> CORBA . ORB . connect ( hello , Hello )
>>> # CORBAネーミングサービスにオブジェクトを登録する
>>> NS = CORBA . ORB . resolve_initial_references ( "NameService" )
>>> NS . bind ([[ "anHelloObject" , "" ]], hello . _this )
この例は、CorbaScript が CORBA オブジェクトの呼び出しと実装をどのように簡素化するかを示しています。CORBA ネーミングサービスシェルや CORBA CosNaming 実装などの追加の例は、CorbaScript の配布物に含まれています。
可用性
CorbaScript インタープリタはC++で実装されており、ほとんどの主要なUnixベース システムおよびWindowsで利用できます。
参考文献
- ^ CorbaScript の機能、corbaweb.lifl.fr(2005年4月22日アーカイブ)
外部リンク
- CorbaScript 言語 (アーカイブ)
- CORBA スクリプティング共同改訂提案
- 正規表現:スクリプトでCORBAを管理する – ITworld
- Christophe Gransart による IDLScript/CorbaScript チュートリアル