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]