昔の多値の仕様

以前の実装では、多値を返す関数呼び出しは、多重代入で受取らないと、他の値は全て切り捨てられていました。
関数呼び出しの際、「呼び出し側が必要とする戻り値の数」がこっそり渡されていて、それ以上の値は単に切り捨てる実装になっていたわけです。

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

{
  a: foo();
  a.p; //=> 0
}

{
  a, b: foo();
  a.p; //=> 0
  b.p; //=> 1
}

これは「多値を返すけど、最初の戻り値だけを使うケースが多い関数」では都合のいい仕様でした。
それ以外では特に都合のいいケースは無く、配列と多値をあえて混同したい場合は逆に不都合となることがわかりました。
0.9.5.0ぐらいからは、これを止めて次のようにしてます。