いしな.net

PLOYUM仕様

概要

  • C系?
  • オブジェクト指向!
  • ネイティブ実行とJITとインタプリタと共存可能!
  • C/C++の欠点は排したい。
  • C/C++の長所は残したい。
2014/01/01(水)

こんな感じ

@class( fvec3 ) @derive( SuperClass ) @implement( Interface1, Interface2, ... ) @sealed { float x; float y; float z; float X @ { get { return x; } set(v) { x = v; } } ## これはコンストラクタ void @+ ( void ) :x(0.0f), y(0.0f), z(0.0f) { ## nothing to do. return; } ## これはデストラクタ @virtual void @- ( void ) { ## nothing to do. return; } ## operator +を定義! fvec3 operator + ( const fvec3 v ) { fvec3 result = new fvec3(); result.x = v.x + x; result.y = v.y + y; result.z = v.z + z; return result; } }
2014/01/01(水)

コメント

##から行末(改行コードの手前)までが行コメントとして扱われる。
#{から}#までがブロックコメントとして扱われる。
2014/01/01(水)

クラス

@class( className )により、クラスの定義が開始される。

クラス定義には以下の属性を指定できる

名称説明
@abstractこのクラスは要約クラスである。
@deriveクラスの継承をする。継承元は一つだけ指定できる。
@implementインタフェースの実装をする。インタフェースは複数指定できる。
@inheritクラスの継承をする。継承元は独立クラスに限られ、複数指定できる。
@scopeこのクラスのスコープを指定する。指定できるスコープはinternalexternalのどちらか。
@sealedこのクラスを基本クラスとして、派生クラスを作成することを禁止する。
@staticこのクラスはstaticなフィールド、メソッド、プロパティしか持たない。

独立クラスとは親クラス・インタフェースを持たないクラスのこと。

2014/01/01(水)

フィールド・メソッド・プロパティ

クラス内にはフィールド・メソッド・プロパティが定義できる。

定義 = <> <名称>; のとき、フィールドの定義

定義 = <> <名称>{block} のとき、プロパティの定義

定義 = <> <名称>(arguments) [{block}] のとき、メソッドの定義

これらは以下の属性を指定できる

名称説明
@abstractフィールドには指定できない。このクラスでメソッド・プロパティの実装を行わないことを表す。@staticと同時に指定できない。
@newこのクラスでフィールド・メソッド・プロパティを再定義することを表す。
@overrideフィールドには指定できない。このクラスでメソッド・プロパティをオーバーライドすることを表す。
@overloadフィールドには指定できない。このクラスでメソッド・プロパティをオーバーロードすることを表す。同一シグネチャのメソッド・プロパティのオーバーロードはできない。
@scopeこのクラスのスコープを指定する。ただし、ownerownectedは@staticと同時に指定できない。
スコープ識別子
モジュール外
不可視継承クラス無関係クラス
モジュール内 owner owner --------
private private --------
ownected ownected --------
protectedchild protected----
public internal xprotectedpublic
モジュール内スコープ範囲
同一クラス継承クラス無関係クラス
インスタンス内 ownerownected存在しえない
別インスタンス privateprotectedpublic
@sealedこのクラスを基本クラスとして、派生クラスを作成することを禁止する。
@staticこのクラスはstaticなフィールド、メソッド、プロパティしか持たない。
@virtual@staticと同時に指定できない。

フィールドは自動的にアライメントされる?

2014/01/01(水)

アクセスレベル

モジュール1
class A { value; func() { value = 11111; ## ownew アクセス } func( A arg ) { value = arg.value; ## private アクセス } } class B <- A { func() { value = 111111; ## ownected アクセス } func( B arg ) { arg.value = 11; ## child アクセス } func( A arg ) { arg.value = 11; ## これは internal アクセスです。 } } class C { func() { new A().value = 11111; ## internal アクセス new B().value = 11111; ## internal アクセス } }
● モジュール2
class D <- A { func() { value = 111111; ## xownected アクセス。これに制限するスコープ指定は無い。 } func( D arg ) { arg.value = 11; ## protected アクセス } func( A arg ) { arg.value = 11; ## これは public アクセスです。 } } class E { func( A arg ) { arg.value = 11; ## public アクセス } }