開発
言語仕様のTupleとstd.typecons.Tuple
mima
D言語には、言語仕様としてのTupleとライブラリとしてのstd.typecons.Tupleがあって、色々と紛らわしいです。
ので、ここで少し整理してみます。
言語仕様としてのTuple
D言語では、テンプレートの可変長引数がTupleを生成します。
ここが詳しいですが、特徴を挙げると、
- コンパイル時のみ使える
- スライス演算ができる
- 型や値やエイリアスを扱うことができる
といった感じです。
コンパイル時のみ使えるという特徴は厄介で、関数の戻り値としてTupleを返せないことなどを意味します。
後述のstd.typecons.Tupleと紛らわしいので、名前を変えるべきなんじゃないかと思っています。
std.typecons.Tuple
ライブラリのTupleです。ここが詳しいですが、特徴は
- 実行時に使える
- スライス演算は使えない(スライスはできる)
- 値のみを扱うことができる
こちらの方のTupleは、他の言語のTupleと同じで、無名の構造体のようなものです。
関数の戻り値として返すことができます。
Tupleの要素には普通に[i]のような形でアクセスできますが、iはコンパイル時に計算できる値である必要があります。
このような感じです。やはり、名前を変えるのがいいんじゃないかと思えます。
担当:美馬(簡潔さは言語の魂です!)