Magia (programación)


En el contexto de la programación informática, 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 polimórficos de escritura y cierre 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 cariñosamente, lo que sugiere un "encanto" sobre el código. La acción de tales abstracciones se describe como realizada "automágicamente" , un acrónimo 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 que deben hacer (en otras palabras, no son referencialmente transparentes). De acuerdo con los modelos de arquitectura de software más recientes , incluso cuando se utiliza 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 fácil de 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 usando 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 magia o mágico se puede extender 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 o no estar documentadas.

La magia profunda se refiere a técnicas que no son muy conocidas y que pueden mantenerse en secreto deliberadamente. 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 abandonado 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. The Jargon File hace una distinción [5] entre magia profunda , que se refiere al código basado en conocimientos teóricos esotéricos, y magia negra , que se refiere al 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 al código basado en complejidades oscuras o indocumentadas de hardware o software en particular.