まだ試してないけど感想だけ。
文字列と配列リテラルの動作の不整合が解決されてる。内部のコードが幾分ましになってるはず。
const、invariant、finalはしっかり考えられてる。本当にこれが一番なのかは疑わしかったが、読んでみるとこれが一番な気がしてきた。
stringという型名は長すぎ。strにしてほしかった。それと文字列がimmutableである必要はあるのか(スレッドを使う場合を除く)。まぁchar[ ]使えばいいんだけど(phobosも問題無い感じだし)。
.idupはconst(char)[ ]からinvariant(char)[ ]を作成することか。
後は速度がどう変化したかが気になる。
幾つか追記。
2.000のリリース早杉と思った。結局ASTもExpression Aliasもyieldも入らなかったけど、でもまあ幾つかの重要なリテラルのサポートの為だけでも2.000をリリースする意味はあったと思う。
まぁまだAlphaだけど。
使ってみたが、以下のがどうなってるのかちょっと混乱中。
class Class{ char[] a; this(const char[] a=""){ this.a=a; } }
const(char)[ ] ~ const(char)[ ]がchar[ ]型になる。
string d = "a"~"b"~(1?"a":"")で何故かクラッシュ。