Cosificación
La cosificación es una forma de instanciación. Cuando reifica un concepto, toma algo abstracto y lo hace concreto, al igual que la definición del diccionario que proporcionó.
Puede optar por reificar un tipo como un término que habita algún árbol de sintaxis abstracta de tipos posibles.
Puede cosificar un patrón de diseño creando una implementación de propósito general para algún lenguaje. Por ejemplo, algo como
template<typename T> class Singleton {
public:
static T& Instance() {
static T me;
return me;
}
protected:
virtual ~Singleton() {};
Singleton() {};
}
reifica el patrón de diseño singleton como plantilla en C ++.
Puede convertir la idea de ordenación rápida de Hoare en una implementación en el lenguaje de programación que elija. En este sentido, dedico mucho tiempo a cosificar conceptos de la teoría de categorías al código Haskell.
Puede cosificar un idioma como intérprete de ese idioma. La idea de Larry Wall de Perl el lenguaje se reifica como el intérprete de Perl.
Los paquetes data-reify y vacuum reifican términos como gráficos que representan cómo se estructuran en la memoria con el intercambio.
Reflexión
La otra cara de la cosificación es la reflexión , que toma algo concreto y genera una abstracción, generalmente olvidando algunos detalles. Quizás quieras hacer esto porque la abstracción es más simple, o de alguna manera captura la esencia de lo que estás hablando.
La reflexión del sistema de tipos en Java, C #, etc. toma una clase concreta en un lenguaje de programación y le proporciona la estructura abstracta de una clase, lo que le da acceso a la lista de los miembros que proporcionan sus clases. Aquí estamos tomando la noción concreta de un tipo y generando un término abstracto que describe su estructura, descartando cualquier valor particular.
Al igual que cómo puede cosificar un lenguaje de programación en una implementación, algunas veces puede ir en la dirección opuesta. Aunque esto generalmente se considera una mala idea, puede tomar una implementación e intentar reflejar una especificación de lenguaje a partir de las propiedades deseables de su comportamiento. TeX fue implementado primero por Knuth, sin especificación. Cualquier especificación de TeX se ha reflejado en la implementación de Knuth.
(Más formalmente, si ve la reflexión como un functor olvidadizo que lo lleva de un dominio concreto a un dominio abstracto, entonces la reificación, idealmente, se deja adjunta a la reflexión).
El paquete de reflexión que mantengo proporciona un método de reificación que toma un término y produce un tipo que lo representa, luego un método de reflexión que le permite generar un nuevo término. Aquí el dominio 'concreto' es el sistema de tipos y el dominio abstracto son términos.