Magia (programación)


En el contexto de la programación de computadoras, la magia es un término informal para la abstracción ; se usa para describir código que maneja tareas complejas mientras oculta esa complejidad para presentar una interfaz simple. El término es algo irónico y, a menudo, tiene malas connotaciones, lo que implica que el verdadero comportamiento del código no es evidente de inmediato. Por ejemplo, los mecanismos de cierre y tipado polimórfico de Perl a menudo se denominan "mágicos". El término implica que la complejidad oculta es al menos en principio comprensible, en contraste con la magia negra y la magia profunda (ver Variantes), que describen técnicas arcanas que están deliberadamente ocultas o son extremadamente difíciles de entender. Sin embargo, el término también se puede aplicar de manera cariñosa, lo que sugiere un "encanto" sobre el código. La acción de tales abstracciones se describe como realizada "automágicamente" , una combinación de "automáticamente" y "mágicamente".

"Magia" se refiere a procedimientos que realizan cálculos basados ​​en datos que no se les proporcionan claramente, accediendo a otros módulos, posiciones de memoria o variables globales que no se supone deben hacer (es decir, no son referencialmente transparentes). De acuerdo con los modelos de arquitectura de software más recientes , incluso cuando se usa programación estructurada , generalmente se prefiere hacer que cada función se comporte de la misma manera cada vez que se le pasan los mismos argumentos, siguiendo así uno de los principios básicos de la programación funcional . Cuando una función rompe esta regla, a menudo se dice que contiene "magia".

Si bien el código anterior es claro y se puede mantener, si se ve en un proyecto grande, a menudo es difícil entender de dónde magic()obtiene su valor la función . Se prefiere escribir ese código utilizando el siguiente concepto:

Cualquier SV [valor escalar] puede ser mágico, es decir, tiene características especiales que un SV normal no tiene.

Esta definición de mágico o mágico puede extenderse a un tipo de datos , fragmento de código, palabra clave o dirección de máquina que tiene propiedades que no comparten objetos idénticos. Las propiedades mágicas pueden estar documentadas o no.

La magia profunda se refiere a técnicas que no son ampliamente conocidas y que pueden mantenerse deliberadamente en secreto. Podría decirse que el número de tales técnicas ha disminuido en los últimos años, [ ¿cuándo? ] especialmente en el campo de la criptografía, donde la seguridad a través de la oscuridad se ha ido abandonando cada vez más en favor de la seguridad a través del diseño que permite, y a menudo fomenta, el escrutinio público. El Jargon File hace una distinción [5] entre magia profunda , que se refiere a código basado en conocimientos teóricos esotéricos, y magia negra , que se refiere a código basado en técnicas que parecen funcionar pero que carecen de una explicación teórica. También definehechicería pesada , que se refiere a código basado en complejidades oscuras o indocumentadas de hardware o software en particular.