Xtalの昔の多値の説明と、何故それを止めたのかの理由

Xtalは昔は「多値と配列は違うもの。余った多値は完全に切り捨てる」という実装で、多値を配列に纏める記法 (a,*b = 1,2,3)」、「配列を多値に展開する記法 (a,b = ary.values)」が存在していました。
つまり、「a,b = 1,2,3」は「a=1, b=2」であり、「a = 1,2,3」は「a=1」、そして「*a = 1,2,3」は「a=[1,2,3]」でした。

実に統一性がある、と、一時は満足したのですが、実装した後冷静にこれで何が嬉しいのか考えてみました。これで嬉しい場面は「よく使う値と、ほとんど使わない値を同時に返す関数がある。その関数を使うときにほとんど使わない二つ目以降の値を気にしなくてもいい」ぐらいしかありません。
はて、そんなの「「よく使う値だけを返す関数」と「よく使う値とほとんど使わない値を多値で返す関数」と別々の関数として用意すれば利便性は同じではないのか」、と思いました。後者で前者は簡単に実装出来ます。

それより「a = foo()」で fooが多値を返そうが単値を返そうが気にせずに受取れて、それを「return a」または「yield a」で全部返せた方が便利ではないかと思いました。*1
もう一つ、仮想マシンの実装が簡潔になることもありました。他の仮想マシン*2に載せる時も、こっちの仕様の方がが楽で効率も良くなるんではないか、と予測し、この仕様を止め、今の仕様に変更しました。

*1:昔のやり方だと、「*a = foo()」「return a.values」としなければならず、単値の時ムダに配列を生成する必要があり、その分効率も悪い

*2:FlashVMだとか、JVMだとか