謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

aliasのこうしてほしいなというメモ

forkしたいけど技術が無いのでミリ。できるようになったらやる予定。以下メモ。

単数タプル(alias)

aliasを単数タプルの型にする。

void func(){}
alias test=func;
alias test="test";

タプルにexpressionを入れられるように

import std.typetuple;
int x;
alias TypeTuple!(x*x) test;//旧構文
void main(){
  x=10;
  writefln(test);
  x=20;
  writefln(test);
}
int x;
alias test=x*10;//新構文

assertionごまかしたらうまくいった(tuple_exp.diff)。gdcで動作確認。完全修飾名じゃないのでコンフリクトするはず。いや、前方参照があるからそんなこと無いのか?

変数テンプレート(?)の省略構文

template f(alias i){
  const int f=i*10;
}

を省略して

const int f(alias i)=i*10;

と書けるように(value_temp.diff)。
aliasも型なので同様。

型タプルを型に限定してalias[]を値/型/式を入れられるタプルにする

template test(T...){}ではTは型のみ。
template test(alias T...)ではTはなんでもおk。
ってかtemplate test(char
str...)とかも書けるように。

toStringとtoHashを削除してconv(char[])とconv(hash_t)に

これはガチ。引数も渡せるようにしてconv(char[],16)12とかも対応させる。

{}をデレゲーリテラルからスコープ(コード片)リテラル

alias test(alias[] arr)={
  foreach(i;arr){
    writefln(i);
  }
}
void main(){
  int x,y,z;
  test!([x,y,z]);
}

バッドノウハウ色出まくり。

タプルリテラル

@2,4,"test"@とかにする。{}は特殊な場合にスコープのと衝突する。
タプルをstructや配列にcastできるようにしたりとか。

名前付きタプル

@"test"=2,"test2"=3@とかにする。
valuesやnamesでtypetupleを取得できるようにする。
連想配列や配列にcastできるようにする。

static foreach

constの配列に。scope static foreachでスコープを導入、そうでなければスコープを導入しない? むしろ変数の宣言でスコープを変更できた方がいいな。