[新しい構文を考える] e4x相当
ゲームにおいてもXMLは当たり前のように使用するようになっています。*1
XtalもXMLリテラルとか、XMLノードを簡単に扱える機構を取り入れるべきなのかもしれません。
これは、かなり前、取り入れる方向で考えていました。
しかし、XMLの仕様をちゃんと実装している暇は正直ありません。
とりあえず、文法の部分についてだけ、以前考えていたことを記しておきます。
Xtalにe4xとまったく同じ構文を導入するのは不可能です。
他の構文と衝突したり、言語機能的にムリがあったりするからです。
*2
それに、いくつかe4xには欠点と思えるところもあります。
e4xでの記法をXtalでもいけるような別の記法を考えてみます。
要素取得
e4xでは
elem.ns::foo
という書き方でelem以下の名前空間nsに属したfoo要素にアクセスできます。
複数のfoo要素があるならば、XMLListを返します。
この書き方は欠点が多いです。
たとえば、要素名には-(ハイフン)と.(ピリオド)を含むことができますが、
e4xの構文では、elem.tag-nameという形式でアクセスすることはできず、
elem["tag-name"]と書く必要があります。
要素の名前によっていちいちアクセスの記法を変える必要があるわけです。
ハイフンなんかはよく使われるので煩わしいでしょう。
また、メソッド呼び出しと区別がつかないのも厄介です。
elem.foo.length
は、foo要素が何個あるのかを取得しているのか、fooの下のlength要素を取得しているのか判断ができません。
これに対しては、次の記法を考えています。
elem.<ns:foo-bar>
これは、elem.op_child(ns, "foo-bar")のシンタックスシュガーとなります。
XMLの記法とほぼ同じで、ハイフンなどを気にする必要はありません。
名前空間を省略するとそこはnullが渡されます。
要素設定
e4xでは
elem.ns::foo = 10;
です。
これは次のように。
elem.<ns:foo> = 10;
elem.op_set_child(ns, "foo", 10)のシンタックスシュガーです。