Comments
Description
Transcript
動的ユーザインタフェース環境記述言語 DUEL
動的ユーザインタフェース環境記述言語 DUEL とそのエンジンについて (TM) Dynamic User interface Environment description Language DUEL and the Engine (TM) エンジニアリングソリューションセンタ 沖ソフトウェア株式会社 2004年5月21日 version 0.0 2004年7月9日 vesion 1.0 Copyright (c) 2003,2004 Oki Software Co., Ltd. OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ 抜粋 概要 • 動的ユーザインタフェース環境記述言語 DUEL (TM) Dynamic User interface Environment description Language DUEL • • • • • (TM) DUEL はGUI 制御を行なう動的な実行環境記述言語である DUEL Micro Edition (DUAL ME) は組み込み機器の GUI 制御を行なうもので、DUEL のサブセット になる DUEL の構文規則は XML 準拠(長形式、短形式)のものと Lisp の S 式準拠(キーワード、標準 Lisp 形式)をサポートする DUEL の実行は、GUI 各部品の並行動作を「エージェント」と「関係」によるモデルで記述する。 DUEL ME の実行は、GC 制御可能なイベントコールモデルで実行する GUI 部品 ボタン 画像 テキスト メニュー メニュー テキスト 入力 HTML テキスト 動画 音声 関係モデル コンカレント インタラクティブ ムービー 2個以上のエージェントの関係を記述する エージェント指向 それぞれ独立して記述する GC 制御可能なイベントコールモデル for DUEL Micro Edition OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL 言語の構文規則 • XML ベースと Lisp ベースの二つの構文規則を持つ – XML ベース • • – Lisp ベース • • • 既存の XML エディタで記述可能 DUEL XML 長形式と DUEL XML 短形式がある 記述コスト、伝送コストが小さくなる Lisp の S式に準拠した形式 DUEL Lisp キーワード形式と DUEL Lisp 標準形式がある UJML との比較 – スクリプトと XML 表記が混在している • – JavaScript などと同じように見にくい DUEL では統一した表記方法を与える OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL 言語の例 long format // source program class HelloWorld extends Object { public static void main (String[] argv) { System.out.println(“Hello World!”); } <!-- DUEL long format --> } <class name=“HelloWorld” super=“Object”/> <method name=“main” access=“public” slot=“static” type=“void”> <parameters> <parameter name = “argv” type = “String[]”/> </parameters> <body> <expression name=“System.out.println”> <arguments> <argument value=“¥”Hello World!!¥””/> </arguments> </expression> </body> </method> </class> OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL 言語の例 short format <!-- DUEL short format --> <class data=“HelloWorld extends Object”/> <method data=“public static void main (Stirng[] argv)”/> <body> <expression data=“System.out.println(¥”Hello World!!¥”)/> </body> </method> </class> OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL 言語の例 lisp format (keyword, standard) (!-- DUEL lisp keyword format) (class :name HelloWorld :super Object (method :name main :access public :slot static :type void (parameters (parameter :name argv :type String[] ) (body (System.out.println ”Hello World!!”) ) ) ) (!-- DUEL lisp standard format) (defclass HelloWorld (Object)) (defmethod (main HelloWorld) :public (argv String[]) (System.out.println ”Hello World!!”) ) OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL の特徴 • • • • • オブジェクト指向言語 GC 有り エージェント指向言語 (DUEL のみ。DUEL ME ではない) マルチスレッド対応 (DUEL のみ。DUEL ME ではない) イベントコールモデル (DUEL ME のみ) OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ エージェント指向と関係モデル (DUEL) • DUEL の実行は、GUI 各部品の並行動作を「エージェント」と「関係」によるモデルで記述する。 GUI 部品 ボタン 画像 テキスト メニュー メニュー テキスト 入力 HTML テキスト 動画 音声 関係モデル コンカレント インタラクティブ ムービー 2個以上のエージェントの関係を記述する エージェント指向 それぞれ独立して記述する ・エージェント記述 各オブジェクトに対し、(1) インタプリタ (2) メッセージキュー (3) メソッドを定義することにより、自分自身のみの記述を行なう ・関係記述 複数のエージェントの関係とその動作記述を行なう。 ・全体記述は行なわずに、エージェントと関係のみで記述する。これにより、部分のみを注目して記述するだけで全体が動作する。 複雑なコンカレントインタラクティブムービーが上記の方法で記述する OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ エージェント記述の例 (DUEL) (defclass Fish (Moving-Graphic-Image Event-Listner) (position direction velocity)) (defmethod (moving Fish) (direction velocity) スーパークラス (setf (direction self) direction) スロット変数 (setf (velocity self) velocity) ) 引数 メソッド moving 所属クラス Fish 自分自身の direction の左辺値 セッタ self は自分自身を指す擬似変数 インタプリタオブジェクト メッセージキュー *standard-message-queue* はシステム標準のキュー (defagent Fish fish-interpreter *standard-message-queue*) インタプリタ定義 (definterpreter fish-interpreter (message) (cond ((empty (queue self)) (execute message)) (t (setf top (pop (queue self))) (execute top) ))) 到着メッセージオブジェクト 実行 空か? キューから取り出す OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ 関係記述の例 (DUEL) (defrelation near (x Fish) (y Fish) (moving x (make-instance ‘velocity ‘random)) (moving y (make-instance ‘velocity ‘random)) ) OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ ビジュアルプログラミング エージェント記述と関係記述を GUI 操作だけのビジュアルプログラミングを行なう メタファとして、マルチタイムチャートがある タイムチャート ボタン 画像 ボタン タイムチャート HTML テキスト コンカレントインタラク ティブムービー ボタン タイムチャート 画像 画像 HTML テキスト タイムチャートメタファにより、GUI オブジェクトの動 作記述をビジュアルにプログラムする OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL ME • • • DUEL Micro Edition 組み込み機器用の DUEL 言語とそのエンジン GC 制御可能なイベントコールモデルで動作する。 – – – • DUEL ME VM は DUEL VM のサブセットとなる。 – • 登録されたイベント(例. ボタン操作など)は静的コールによる高速実行 動的なイベントは、イベントオブジェクトのプーリングとポーリング制御による実行 これにより、動的にイベントを生成しないために GC が制御可能である。 GC は高速な非移動型 Mark&Sweep と世代管理型の混合実装である。 DUEL へのマイグレーションが可能なライブラリを提供する。 OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL Intermediate Code --- DUELIC • DUELIC --- DUEL 中間コード • タイプ – – – – size = 6 例. “abc” 例. abc --- シンボル abc の値 初期値は自分自身が入っている (quote abc) でシンボル 但し、FALSE, TRUE はシンボルとして使えない 整数 バイト整数 文字 2バイト文字 論理値 d e scope = 2 c c’ a 例. 123 例. 123b 例. ’a 例. `a 例. FALSE, TRUE タイプスペシフィックな関数のみ size = 3 ベクタリスト (メモリ管理において便 利なようにベクタと同形にする) b リスト size 関数 – a b scope = 2 即値型 • • • • • • ベクタ ベクタにより実装されるリスト 挿入、削除に対応したベクタ 文字列 シンボル • • • – a b c d e 強い型付けを行なう ベクタ 例. #(a b c d e) リスト 例. (a b) ベクタリスト 例. $(a b c c’ d e) • • – – size = 5 初期値 value 文字列 interned name シンボル (メモリ管理の便利さ のためにリストと同形にする) OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ シンボルテーブルに 格納された文字列 DUEL 言語の内部表現 DUEL long format short format lisp keyword format lisp standard format DUEL 仮想マシン DUELVM メモリ内部表現 class name: 2 super: 3 method name: 4 access: public arguments: size: 1 argumentName: 5 type: 0 code: 0 constant table 0: String[] 1: System.out.println 2: HelloWorld 3: Object 4: main 5: argv 6: “Hello World” code table 0: const 8, invoke 1 OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUEL ME Intermediate Code --- DUELIC ME DUEL ME VM reduced constant table class 0: String[] name: 2 1: System.out.println super: 3 2: HelloWorld method 3: Object name: 4 4: main access: public 5: argv arguments: 6: “Hello World” size: 1 argumentName: 5 code table type: 0 0: const 8, invoke 1 code: 0 DUEL ME と互換性がある 共通化を行なうことにより、メモリ フットプリントを小さくする DUEL VM のサブセット OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/ DUELIC Machine • • ヒープ – – ベクタ領域(ベクタ、ベクタリスト) ペア領域(リスト領域、シンボル領域) – 文字列領域 スタック – 関数フレーム • • • – リターンアドレス 引数個数 引数群 キャッチフレーム • • リターンアドレス キャッチ名 OSK 沖ソフトウェア エンジニアリングソリューションセンタ ESC http://www.okisoft.co.jp/esc/