多値の仕様変更

Xtalは関数から多値を返すことが出来ます。

foo: fun(){
  return 0, 1, 2;
}

a, b, c: foo();
a.p; // 0
b.p; // 1
c.p; // 2

今までの仕様では、一つの値だけ必要としているところで多値を返す関数を呼ぶと、最初一つの値だけを受け取り、後は全て捨てていました。

a: foo();
a.p; // 0

今回、これの仕様を変更し、一つの値しか受け取らない場所では多値を配列に直すことにしました。

a: foo();
a.p; // [0, 1, 2]

この仕様変更はいくつか理由がありますが、一番大きな理由は、「将来Xtal言語を他のVMに載せやすくするため」です。*1
多値が一切考えられていないVMだと、これまでの仕様の多値では、効率がとても悪くなりそうなので。


この変更により、多値を返す関数をイテレータ呼び出しすると、多値を巡回します。

bar: fun(){
 return "a", "b", "c";
}

bar(){
  it.p;
}
// a
// b
// c
// と出力される

*1:例えばFlashVMで動かせるようにしたりなど