¿El dispositivo de Duff funciona en otros idiomas?

Hace muchos años, mientras trabajaba en un problema de E / S de gráficos ajustados, Tom Duff desarrolló un bucle y creó su Dispositivo de Duff de la siguiente manera:

dsend(to, from, count) char *to, *from; int count; { int n = (count + 7) / 8; 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); } } 

(Tenga en cuenta que utiliza parámetros de funciones de estilo antiguo, eso no es un error).

Esta encoding viene directamente del pensamiento en ensamblador y la encoding en C y depende de la caída de la statement del caso de C. ¿Puede este tipo de creatividad en el entrelazado de estructuras de control funcionar en otros idiomas?

Puede hacerlo en cualquier idioma que admita declaraciones GOTO computadas (Fortran, algunos BASIC, etc.)

Funciona en C ++.

Tenga en cuenta que el código generado depende de su comstackdor. En particular, cuando compilé el dispositivo de Duff utilizando architectures ARM dirigidas a GCC, el ensamblador ARM resultante fue subóptimo (creo que GCC lo convirtió en una tabla de salto) en cualquier nivel de optimización.

Acabé de dar la encoding del ensamblador.

El dispositivo de Duff es esencialmente un goto computado que se puede hacer en muchos otros idiomas: ensamblaje (por supuesto) y FORTRAN son una pareja que los admite directamente.

Lo utilicé con mucho éxito en JavaScript para acelerar el procesamiento de grandes arreglos. Me gustaría poder usarlo en C #.

Incluso si no se puede usar de esta manera, es posible que tenga dos bucles:

 dsend(to, from, count) char *to, *from; int count; { int n; for(n=0; n!=count/8; n+=8){ *to = *from++; *to = *from++; *to = *from++; *to = *from++; *to = *from++; *to = *from++; *to = *from++; *to = *from++; } for(; n!=count; n++) { *to = *from++; } } 

Claro que esto será un poco más lento con un count más pequeño, pero es algo más legible, algo más portátil en todos los idiomas y produce un beneficio muy similar con un count grande.