Duff's device
名詞
これまでに見られたC言語におけるfall throughの最も劇的な用法。Tom DuffがLucasfilmにいたときに考案した。データを出力ポートに順次コピーする内側のループから、命令を可能な限り最適化して取り除こうとして、彼はそれを展開することにした。それから彼は、展開されたバージョンが、switchとループの構造をインターレースすることで実装できることに気づいた。
register n = (count + 7) / 8; /* count > 0 assumed */
switch (count % 8)
{
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
初めて遭遇する者すべてに衝撃を与えるとはいえ、この仕掛けは実際には完全に妥当で合法なCである。case文におけるCのデフォルトのfall throughは、長らくその最も物議を醸す単一の機能だった。Duffは「This code forms some sort of argument in that debate, but I'm not sure whether it's for or against.」(このコードはその議論に何らかの論拠を提供するが、賛成なのか反対なのかは分からない)と述べた。Duffはこの仕掛けをhttp://www.lysator.liu.se/c/duffs-device.htmlで詳しく論じている。*toから後置++が省略されているのは意図的であった(紛らわしいが)ことに注意。Duffの仕掛けはメモリコピーの実装に使えるが、本来の目的は値をマジックなIOレジスタに順次コピーすることだった。
[最大限に難解にするには、上の最も外側の波括弧の組は実際には取り除くこともできる ——GLS]