この新しいバージョンでは、大きな新しい機能が付け加わりました。制約処理です。
また、拡張性が高くなり、バイナリファイルの入力・出力に対するサポートができました。
- MINERVAにおける制約処理
MINERVA 2.0は、制約処理の先端的な機能性と共にあなた自身のユーザー定義制約処理を加えるという可能性を提供します。
制約処理は、例えば以下のような難しい管理問題のために非常に強力です: 資源割り当て、スケジューリング、計画。
MINERVAは、制約処理のために2つの述語を定義します:
co_add(+Var, +Constraint)
co_get(+Var, -Constraint)
- co_add(+Var, +Constraint)
-
変数に制約を、または、制約変数を加えます。
"Constraint"は、変数以外のいかなる項でもはありえます。
"Var"が変数であるならば、それは制約変数になります。
"Var"が制約変数であるならば、制約は追加の制約としてマークされます、そして、ユーザー定義述語co_merge(+Var,[NewConstraint,OldConstraint])が起動されます。
"Var"が変数でないならば、ユーザー定義述語co_check(+Var, NewConstraint)は起動されます。
- co_get(+Var(-Constraint)
-
co_get(+Var, -Constraint)は、制約変数と関連する現在の制約を復帰します。
"Var"が制約変数でないならば、述語は失敗します。
プログラマは、2つのユーザ定義述語を供給せねばなりません:
co_merge(+Var, +ConstraintList)
co_check(+Term, +Constraint)
- co_merge(+Var, +ConstraintList)
-
制約変数が単一化されるとき、それらの付随する制約も単一化されなければなりません。 これは、co_merge/2のジョブです。
個々の制約のリストは新しい制約に結合されなければなりません。そして、新しい制約はそれからco_add/2で再び制約変数と関連することができます。
個々の制約が矛盾を引き起こすならば、述語は失敗します。
co_merge/2が起動される前に、関連する制約変数は普通の変数に変えられます。 co_add/2の以下の呼び出しの後でのみ、そして、もちろんバックトラックの場合だけでのみそれは、再び制約変数になります。
- co_check(+Term, +Constraint)
-
制約変数が値を与えられるとき、すなわち、変数でない項に連結される時に、ユーザー定義述語co_check/2は起動されます。
この結合が与えられた制約"Constraint"の下で許される場合のみ、co_check/2は成功しなければならなりません。
これらの述語は、マニュアル/レファレンス/述語/制約に詳しく説明されています。
- バイナリーファィル入出力
MINERVA 2.0は、バイナリー・データを処理するための述語セットを提供します、例えば、これはデータマイニング、交信プロトコルまたはコンパイラ書込みのために使用されます。
read_boolean/2,
read_byte/2,
read_char/2
read_double/2,
read_float/2,
read_int/2,
read_long/2,
read_short/2,
read_utf/2,
read_unsigned_byte/2,
read_unsigned_short/2,
バイナリーファィルへの書込みのための述語の相補的なセットも提供されます:
write_*/2
最初の引き数は常にバイナリー・ストリームです、第二の引数は読取り書込みのための項を含みます。 JavaクラスDataInputStreamとDataOutputStreamは、セマンティックスのために参照して下さい。
これらの述語は、マニュアル/レファレンス/述語/バイナリ入出力において文書化されます。
- 完全なJava1.2イベント処理
Java 1.1/1.2スタイルイベント処理は現在一貫しています、同時に、Java 1.0スタイルイベント処理は今後サポートされません。 この変更は、ユーザーアクションを受け入れるGUI要素に影響を及ぼすだけです。
以下は新しいです。
canvas_create / 2,
canvas_create / 5,
menuItem_addActionListener / 2,
textField_addActionListener / 2,
これらは、以下の廃止されたものにそれぞれ置き換わります。
canvas_create / 1,
canvas_create / 4,
list_selectedItems / 2,
textField_getInputStream / 2,
これらの述語のうちの1つを使っているプログラムは、MINERVA 2.0で正しく働くために調節される必要があります。
全てのインタラクティブのプログラム例は、これらの述語の使用を示します。
- GUIビルダーにおけるイベント
パッケージGUIビルダーは、開設時間にイベント・リスナーを加えさせます。gui/tst1.min, gui/tst4.minを参照して下さい。
guibuilderで、あなたは以下のリスナーを定義することができます:
button(Name,Label) ** action(Goal)
text_field(Field) ** action(Goal)
text_field(Field,Columns) ** action(Goal)
checkbox(Checkbox,Label) ** action(Goal)
checkbox(Checkbox,Label,Group,State) ** action(Goal)
item(Name,Label) ** action(Goal)
check_item(Name,Label) ** action(Goal)
Component ** mouse(List)
付随する動きが起こるとき、Goalは起動されるゴールを表します。
リストは、以下の何でも含むことができます:
clicked=Goal
pressed=Goal
released=Goal
entered=Goal
exited=Goal
- main(+Applet,+Args)
GUIによるプログラムのために、最高のレベル・ユーザー定義述語は、現在、最初の引き数として、アプレットをも取ることができるmain/2です。
- Javaアレイへの直接アクセス
MINERVA 2.0は、与えられたJavaクラスのデータのアレイをつくって、これにアクセスすることができます。
array_set(+Array, +Index, +Value)
array_get(+Array, +Index, -Value)
create_array(+Class, +Size, -Array)
expand_array(+Array, -List)
- array_set(+Array, +Index, +Value)
-
値をセットします: Array[Index] = Value
- array_get(+Array, +Index, -Value)
-
値を返します: Value = Array[Index]
- create_array(+Class, +Size, -Array)
-
クラスClassと寸法Sizeとから新しいアレイを作ります。結果として生じるオブジェクトが最後の引き数と単一化されます。
- expand_array(+Array, -List)
-
Java ArrayをMinerva Listに変換します
これらの述語の使用のための実例は、フォルダ例題プログラム/Minervaの特徴/Javaアレイにあります。
- java_predicates/2
名前を変えられてもはや存在しない述語create_interface/2から拡張され、述語と指令java_predicates/2は、どんなJavaクラスのどんなメソッドとでも拡張することができ、名前マッピングを制御することができます。
指令として使われるならば、リファレンスをつけられたクラスとメソッドの存在はコンパイル時にチェックされます。 述語として使われるならば、参照クラスは実行時にアクセスされるだけです。
java_predicates/2は、また、Java変数にアクセスを与えます。
minervaxは、同じ構文を理解します。
- JDBC、Swing、Speechとより多くの第三者API
MINERVA 2.0では、第三者の全Javaライブラリを加えるツールmetagen があります。
minervaxは、これを知っています。 呼出しは、以下の通りです "minerva -l metagen ClassName"
例:
minerva -l metagen java.awt.Dimension -o dim.mxt
あるいは
minerva -l metagen java.awt.Dimension > dim.mxt
minervax dim
mjavac dim.java
minerva -b dim
...
dimension_create(Dim),
dimension_width(Dim, Old),
dimension_width(Dim, 100),
dimension_width(Dim, New),
...
MINERVAの中でクラスとメソッドを加えるためにすぐ使用できるための実例として、グラフィカルユーザーインターフェースのために広く利用されているSwing、リレーショナル・データベースのためのJDBC、音声認識と合成のためのJSAPIを紹介します。
例題プログラム/機能拡張を参照します。
プログラム・テンプレートは、Java 1.2 Swing、MS-Access 97とIBM ViaVoiceで動く方法を示します。
- アイコンとレジストリ・テンプレート
Windowsシステム環境でダブルクリックでプログラムをコンパイル、実行するために、レジストリエントリを提供すると共に、MINERVAソースと対象ファイルタイプのためのアイコンによるフォルダがあります。
フォルダ・アイコンを参照します。 MINERVAがレジストリ・エントリまたはアイコンに正しく作用することを要求しない点に注意して下さい。
- 参照
MINERVAのクライアントのアプリケーションを紹介するフォルダ概要/参照ができました。
- より多くのコンパイラ警告
MINERVAコンパイラminervacによるより多くの警告、例えば別のパッケージに同じ名をつけられた述語があれば、警告を与えます。
- インターネット・サーバーからMINERVAプログラムをロードする
あなたは、他のサーバからプログラムをロードするために、load/1を使って、またはオンデマンドでロードするためにMINERVAパッケージ・システム使うことが可能です。
*.minの中のload/1の中でURLを指定するか、:
load(someservice),
load('ftp://ftphost/someservice.mbc'),
load('http://wwwhost/someservice.mbc'),
または、MINERVA Startup Property *.mspの中でURLを指定します:
package.someservice=localdir/someservice.mbc
package.someservice=ftp://ari/pub/minerva20/someservice.mbc
package.someservice=http://ari/minerva20/someservice.mbc
または、両方の方法を結合します。
- ドキュメンテーションの改善
ドキュメンテーションへの訂正に加えて、HTMLページのための速いローディングを確保しつつ、我々はより簡単なナビゲーションと索引を加えました。
このリリースに関するご意見・ご質問をお待ちしています。もし、機能に関するご希望がありましたら、それもお知らせ下さい。