肝の仕様について

※注意

これは、ウミヘビの本体開発者向けの文書です。クリエイター向けのウミヘビの説明についてはこちらをご覧ください。


プロジェクトの保存について

プロジェクトはある種のフォルダ(以降プロジェクトフォルダと呼ぶ)、またはそれに変換できる形式のファイル(.zipなどの圧縮ファイルなど)として保存される。

また、プロジェクトフォルダの中には次のものが存在する:


assetsフォルダ

この中にはプロジェクトで使うファイルを保存する。

この中に含まれるすべてのファイルは次のいずれかの名前のフォルダの直下にあり、また、そのフォルダ名に紐づいた役割を持つ:

例えば、「assets/images/test.png」や「assets/ABC/images/xyz.jpg」は、「images」フォルダ直下にあるため画像ファイルとして認識されるが、 「assets/images/movies/test.gif」は「images」フォルダ直下ではなく、「movies」フォルダ直下にあるため動画ファイルとして認識される。


favicon.ico

このプロジェクトのアイコンのicoファイルであり、任意である。

存在しない場合はデフォルトのものが代わりに使われる。


data.json

この中にはプロジェクトのバージョンなどのデータやプログラムを保存する。

このファイルはオブジェクトを表現し、次のプロパティを持つ:


宣言ノード

宣言ノードは次のいずれかである(今後追加する予定):


静的イベント購読ノード

静的イベント購読ノードは静的なイベント購読を表すノードであり、次のプロパティを持つオブジェクトである:

なお、かつては、スコープブロックの中で静的なイベント購読をした場合は、スコープブロック終了時に購読したイベントを解除していたが、0.7.0からは、スコープブロックの中では利用できなくなった。


変数定義ノード

変数定義ノードは変数の定義を表すノードであり、次のプロパティを持つオブジェクトである:

なお、スコープブロック内で用いられた場合はローカル変数、そうでない場合はグローバル変数を定義する。

また、IDが存在するものは外からの参照が可能になる。


定数定義ノード

定数定義ノードは定数の定義を表すノードであり、次のプロパティを持つオブジェクトである:

なお、スコープブロック内で用いられた場合はローカル定数、そうでない場合はグローバル定数を定義する。

そして、グローバル定数の値及びグローバル変数の初期値の計算は定数、変数の順番にプログラムの開始の前に上から順番に、ローカル定数の値及びローカル変数の初期値の値の計算はその文が実行される際に行われる。
計算される前に参照するとエラーになるので気を付けること。

また、変数定義ノードと同様に、IDが存在するものは外からの参照が可能になる。


関数定義ノード

関数定義ノードは関数の定義を表すノードであり、次のプロパティを持つオブジェクトである:

なお、スコープブロック内で用いられた場合はローカル関数、そうでない場合はグローバル関数を定義する。
そして、ローカル関数は定義されたスコープブロックの変数等の参照が可能である。

また、変数定義ノードと同様に、IDが存在するものは外からの参照が可能になる。


特殊関数定義ノード

特殊関数定義ノードは特殊関数の定義を表すノードであり、次のプロパティを持つオブジェクトである:

なお、スコープブロック内で用いられた場合はローカル関数、そうでない場合はグローバル関数を定義する。
そして、ローカル関数は定義されたスコープブロックの変数等の参照が可能である。


仮引数ノード

仮引数ノードは仮引数を表すノードであり、次のプロパティを持つオブジェクトである:

なお、仮引数は、関数内では定数として扱われる。 (0.4.0で変更: 以前は変数として扱われていた。)


型ノード

型ノードは型を表すノードであり、次のいずれかである(今後追加する予定):


参照型ノード

参照型ノードは参照の型を表すノードであり、次のプロパティを持つオブジェクトである:


関数型ノード

関数型ノードは関数の型を表すノードであり、次のプロパティを持つオブジェクトである:


スコープブロックノード

スコープブロックノードはスコープブロックを表すノードであり、文ノードを要素として持つリストである。


文ノード

文ノードは文を表すノードであり、次のいずれかである(今後追加する予定):


終わるノード

終わるノードは関数から値を返して終わることや、イベント購読内でイベント時の処理を終わることなどを表すノードであり、次のプロパティを持つオブジェクトである:

なお、関数やイベント購読の外で使った場合はエラーになる。


「もし」ノード

「もし」ノードは条件分岐を表すノードであり、次のプロパティを持つオブジェクトである:


「~の間」ノード

「~の間」ノードは繰り返しを表すノードであり、次のプロパティを持つオブジェクトである:

なお、最初から条件が「いいえ」の時は、もしあれば、「else」を実行しておわる。


式ノード

式ノードは式を表すノードであり、次のいずれかである(今後追加する予定):


通常リテラルノード

通常リテラルノードは数値リテラルや文字列リテラルなどの通常のリテラルを表すノードであり、次のプロパティを持つオブジェクトである:


関数呼び出しノード

関数呼び出しノードは関数の呼び出しを表すノードであり、次のプロパティを持つオブジェクトである:


ID参照ノード

ID参照ノードはIDを基にした関数などの参照を表すノードであり、次のプロパティを持つオブジェクトである:

(次は0.3.0で追加)

※変数を参照した場合は、変数の参照が返され、定数を参照した場合は、その定数の値が返されるので、注意すること。


名前参照ノード

名前参照ノードは名前を基にした関数などの参照を表すノードであり、次のプロパティを持つオブジェクトである:

※ID参照ノードと同様に、変数を参照した場合は、変数の参照が返され、定数を参照した場合は、その定数の値が返されるので、注意すること。


内部参照ノード

内部参照ノードは名前空間の内部の関数などの参照を表すノードであり、次のプロパティを持つオブジェクトである:

※ID参照ノードと同様に、変数を参照した場合は、変数の参照が返され、定数を参照した場合は、その定数の値が返されるので、注意すること。


ローカル変数定義式ノード

ローカル変数定義式ノードはローカル変数の定義を表すノードであり、次のプロパティを持つオブジェクトである:

また、この式の値は新しくできた変数の参照となる。


代入式ノード

代入式ノードは参照への代入を表すノードであり、次のプロパティを持つオブジェクトである:

また、この式の値は代入された値となる。


間接参照式ノード

間接参照式ノードは参照の間接参照を表すノードであり、次のプロパティを持つオブジェクトである:

また、この式の値は間接参照された参照の値となる。


キャスト式ノード

キャスト式ノードは値のキャストを表すノードであり、次のプロパティを持つオブジェクトである:

また、この式の値はキャストされた値となる。


関数式ノード

関数式ノードは関数式を表すノードであり、次のプロパティを持つオブジェクトである:

また、次のいずれか一方のみを持つ:

また、この式の値は関数となる。


構築式ノード

構築式ノードはクラスの実体の構築を表すノードであり、次のプロパティを持つオブジェクトである:

また、この式の値は新しく作られたクラスの実体となる。


型判別式ノード

型判別式ノードは値の型の判別を表すノードであり、次のプロパティを持つオブジェクトである:

また、この式の値は値がその型だったら「はい」、そうでなかったら「いいえ」となる。


バージョン文字列

バージョン文字列は、三つの非負整数(順に、メジャーバージョン、マイナーバージョン、パッチバージョンと呼ぶ)をドットでつなげたものに、次のバージョン接尾辞がついたものである:

また、バージョンアップの際、
破壊的な変更がある場合はメジャーバージョンを一増やしてマイナーバージョンやパッチバージョンを0に戻し、
機能の追加がある場合はマイナーバージョンを一増やしてパッチバージョンを0に戻し、
単なるバグ修正の場合はパッチバージョンを一増やす。

例えば、バージョン「1.2.3」であるライブラリがあるとき、
これのバグを修正したバージョンはバージョン「1.2.4」、
これに新たな機能を追加したバージョンはバージョン「1.3.0」、
これからいくつかの時代遅れな機能を取り除いたバージョンはバージョン「2.0.0」である。

しかし、元のバージョンのメジャーバージョンが0であるもの(未完成バージョン)は、メジャーバージョン、マイナーバージョン、パッチバージョンのいずれかを増やすが、マイナーバージョンを一増やした時は、パッチバージョンを0に戻し、メジャーバージョンを一増やしたときは、マイナーバージョンやパッチバージョンを0に戻さなくてはならない。

例えば、バージョン「0.1.2」であるライブラリに変更を加えたバージョンは、その変更の種類にかかわらず、バージョン「0.1.3」、「0.2.0」、「1.0.0」のいずれかにする。

また、バージョンは基本的にメジャーバージョンが大きい方が新しく、
それが同じ場合は、マイナーバージョンが大きい方が新しく、
それも同じ場合は、パッチバージョンが大きい方が新しく、
それまで同じ場合は、開発中接尾辞がない方が新しく、
あるものの中では、リリース接尾辞を持つもの、ベータ接尾辞を持つもの、アルファ接尾辞を持つものの順に新しく、
それも同じ場合は、開発中接尾辞に含まれる数字が大きいものの方が新しい。

例えば、「1.2.3a5」は、次のどのバージョンよりも古い:


ID

ウミヘビにおけるIDとは、様々なものを区別するための文字列である。

IDは名前空間に属し、同じ名前空間に属すIDの中で一意である。

0.6.0で変更される以前は、代わりにUUIDの文字列表現(ローマ字はすべて大文字)を用いていた。


メタデータファイルについて

メタデータファイルとは、型の継承関係や関数の引数や戻り値の型などの情報を保存するjsonファイルのことで、あるオブジェクトを表現し、そのオブジェクトは次のプロパティを持つ:


定義データ

定義データとはIDを持つプログラムの要素に対応し、次のプロパティを持つオブジェクトであり、対応するものによって異なる形式を取る。

関数

関数に対応する場合は次のプロパティを持つ:

変数

変数に対応する場合は次のプロパティを持つ:

定数

定数に対応する場合は次のプロパティを持つ:

イベント

イベントに対応する場合は次のプロパティを持つ:

型に対応する場合は次のプロパティを持つ:

名前空間

名前空間に対応する場合は次のプロパティを持つ:


実行環境について

こちらを参照してください。

変更履歴


作成 ski.com