末尾再帰

int main(char[][]args){return main(args);}

このプログラムを実行すると当然スタックオーバーフローになる。
......と思ってたのだが、実行するとなぜか、そうならない。*1

どうやら、dmd は末尾再帰の最適化を実装しているようだ

いままでD言語でプログラムを書くときには再帰の除去を出来る限り行っていたが、
これからは再帰を積極的に使ってくことにするとしよう。

*1:コンパイルオプションに -O 指定時のみ