...

動的ユーザインタフェース環境記述言語 DUEL

by user

on
Category: Documents
2

views

Report

Comments

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/
Fly UP