Conjuntos de sobrecarga en D: cómo construir APIs de plantillas ad-hoc

Fuentes: (Ab)using Overload Sets to Create Ad-Hoc Template APIs

El lenguaje de programación D permite agrupar funciones que comparten nombre y cabecera de plantilla bajo un mismo conjunto de sobrecarga (overload set), un mecanismo que sustenta buena parte de su programación genérica. Combinado con la especialización de plantillas, este recurso da lugar a las llamadas APIs ad-hoc: interfaces sin definición primaria, definidas únicamente por la colección de especializaciones que el compilador logra emparejar en tiempo de compilación.

El artículo, un extracto del libro "Black Magic in D" de Michael Boston, explica primero la noción de conjunto de sobrecarga y muestra cómo la especialización sobre valores enteros puede recorrerse con un bucle en tiempo de compilación, generando tablas de búsqueda o despachos basados en constantes.

A continuación presenta un caso práctico: en la biblioteca joka de Kap, los tipos GVec2, GVec3 y GVec4 estaban ligados a su dimensión en el propio nombre, lo que impedía escribir código genérico por dimensión. El autor reorganiza la cabecera compartida para incluir un parámetro entero N, de modo que GVec!(2,T), GVec!(3,T) y GVec!(4,T)formen parte de un único conjunto de sobrecarga y una función print(int N, T) opere sobre cualquier dimensión.

El texto también describe cómo intercambiar un conjunto de sobrecarga —por ejemplo, sustituir std.conv.to por una implementación del usuario— y resume la mecánica de cabeceras compartidas entre enum, funciones, plantillas y struct. Concluye que diseñar APIs que acepten conjuntos de sobrecarga facilita la extensibilidad y reduce la duplicación de código.