stringtranslate.com

Magia (programación)

En el contexto de la programación informática, magia es un término informal para abstracción ; se utiliza 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 tipificación polimórfica 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, sugiriendo 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".

Opacidad referencial

"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 se supone que no deben (en otras palabras, no son referencialmente transparentes). Según 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 infringe esta regla, a menudo se dice que contiene "magia".

Un ejemplo simplificado de magia negativa es el siguiente código en PHP :

función  mágica () {  global  $ alguna variable ; echo  $alguna variable ; }$alguna variable  =  verdadero ;magia ();

Si bien el código anterior es claro, 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:

function  noMagic ( $mivariable ) {  echo  $mivariable ; }$alguna variable  =  verdadero ;noMagic ( $alguna variable );

No ortogonalidad

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

—  Larry Wall , página del manual de perlguts , [1] Perl 5

Esta definición de mágico 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 estar documentadas o no.

Variantes

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 con el tiempo, especialmente en el campo de la criptografía , donde la seguridad mediante la oscuridad se ha abandonado cada vez más en favor de la seguridad mediante el diseño que permite, y a menudo fomenta, el escrutinio público.

The Jargon File hace una distinción entre magia profunda , que se refiere a códigos basados ​​en conocimientos teóricos esotéricos, y magia negra , que se refiere a códigos basados ​​en técnicas que parecen funcionar pero que carecen de una explicación teórica. [5] También define hechicería intensa , que se refiere al código basado en complejidades oscuras o no documentadas de hardware o software particular.‌ Por ejemplo, el infame comentario “No se espera que entiendas esto” : muchos lectores de Lions' Book, un comentario didácticamente anotado sobre el código fuente del kernel de la versión 6 de Unix, interpretó este comentario, que se encuentra en el código, para sugerir que en el oscuro fragmento se mostraba cierta sabiduría teórica profunda, pero en realidad su función "mágica" dependía simplemente de una peculiaridad. de la forma en que se optimizó el compilador de C para el hardware PDP-11 en el que se diseñó para ejecutar la versión 6 de Unix.

Ver también

Referencias

  1. ^ "perlguts-perldoc.perl.org". 5 de octubre de 2014 . Consultado el 18 de febrero de 2015 .
  2. ^ Banahan, Mike; Brady, Declan; Doran, Marcos (1991). "9.10.3 El archivo de encabezado". El libro C: presenta el estándar ANSI C. El conjunto de instrucciones (2ª ed.). Wokingham, Inglaterra: Addison-Wesley Publishers. pag. 234.ISBNstdio.h 0-201-54433-4. No es seguro copiar estos objetos dentro del programa; A veces sus direcciones pueden ser "mágicas".
  3. ^ "perlop-perldoc.perl.org". 7 de septiembre de 2010 . Consultado el 17 de febrero de 2011 .
  4. ^ ab "27. Palabras clave" (PDF) . Manual de referencia BBC BASIC (1ª ed.). Cambridge, Inglaterra: Acorn Computers. Octubre de 1992. págs. 229, 349. ISBN 1-85250-103-0. Consultado el 9 de mayo de 2007 .[ enlace muerto ]
  5. ^ "Magia profunda". Archivo de jerga .