Magic (programmation) – Wikipedia wiki

before-content-x4

Un article de Wikipédia, l’encyclopédie libre

after-content-x4

Dans le contexte de la programmation informatique, la magie est un terme informel pour l’abstraction; Il est utilisé pour décrire le code qui gère les tâches complexes tout en cachant cette complexité pour présenter une interface simple. Le terme est quelque peu ironique et porte souvent de mauvaises connotations, ce qui implique que le véritable comportement du code n’est pas immédiatement apparent. Par exemple, les mécanismes de typage et de fermeture polymorphes de Perl sont souvent appelés «magie». Le terme implique que la complexité cachée est au moins en principe compréhensible, contrairement à la magie noire et à la magie profonde (voir variantes), qui décrivent des techniques arcaniques qui sont délibérément cachées ou extrêmement difficiles à comprendre. Cependant, le terme peut également être appliqué de manière attachante, suggérant un “charme” sur le code. L’action de telles abstractions est décrite comme étant faite “automatiquement” , un portmanteau de “automatiquement” et “comme par magie”.

Opacité référentielle [ modifier ]]

La «magie» fait référence aux procédures qui effectuent des calculs basés sur des données qui ne leur sont pas clairement fournies, en accédant à d’autres modules, positions de mémoire ou variables globales qu’ils ne sont pas censés (en d’autres termes, ils ne sont pas référentialement transparents). Selon les modèles d’architecture logicielle les plus récents, même lors de l’utilisation de programmation structurée, il est généralement préféré que chaque fonction se comporte de la même manière que les mêmes arguments y sont transmis, suivant ainsi l’un des principes de base de la programmation fonctionnelle. Lorsqu’une fonction enfreint cette règle, elle contiendrait souvent “la magie”.

Un exemple simplifié de magie négative est le code suivant en PHP:

fonction  la magie ()  {  mondial  $ quelque part ;  écho  $ quelque part ;  }  $ quelque part  =  vrai ;  la magie ();  

Bien que le code ci-dessus soit clair et maintenable, s’il est vu dans un grand projet, il est souvent difficile de comprendre où la fonction la magie() obtient sa valeur de. Il est préféré d’écrire ce code en utilisant le concept suivant:

after-content-x4
fonction  nomagique ( $ myvariable )  {  écho  $ myvariable ;  }  $ quelque part  =  vrai ;  nomagique ( $ quelque part ));  

Non-orthogonalité [ modifier ]]

Tout SV [valeur scalaire] peut être magique, c’est-à-dire qu’il a des caractéristiques spéciales qu’un SV normal n’a pas.

Cette définition de la magie ou magique Peut être étendu à un type de données, un fragment de code, un mot-clé ou une adresse machine qui a des propriétés non partagées par des objets autrement identiques. Les propriétés magiques peuvent être documentées ou non.

  • Dans ISO C, des poignées de fichiers (de type DÉPOSER ) ne peut pas être copié en toute sécurité comme leurs adresses [2] Peut être magique. Autrement dit, l’environnement d’exécution peut placer des poignées de fichiers d’origine dans une plage d’adresses codés en dur et ne pas fournir un comportement de manche de fichier à une copie créée par l’utilisateur à une autre adresse. Par conséquent, les routines de la bibliothèque standard acceptent les pointeurs vers des poignées de fichiers, de type DÉPOSER * , plutôt.
  • Dans Perl 5, la déclaration alors que( ) attribue implicitement la ligne lue à partir du fichier par à la variable $ _ et applique le défini () fonctionner à l’expression afin que toute lecture de chaîne avec succès, même "0" ou la chaîne vide, évalue comme vrai et continue le alors que () boucle. Cela n’arrive pas n’importe où ailleurs, ou pour alors que () avec toute autre expression de contrôle. [3]
  • Dans un émulateur, en particulier un en développement, les points d’appel du système de la machine émulés peuvent être magiques; Lorsqu’ils sont appelés, l’émulateur peut exécuter le code natif pour plus de commodité, de vitesse ou d’accès au matériel physique et configurer le CPU et la mémoire imités comme s’il avait exécuté le code d’origine.
    • Par exemple, le APPEL Déclaration de BBC Basic V traite les adresses d’appel système de l’ACORN MOS comme par magie; Au lieu d’essayer de se ramifier pour armer le code à ces adresses, il soulève une interruption logicielle dans RISC OS équivalent à l’appel système. [4] [ Source non primaire nécessaire ]] L’effet est d’imiter suffisamment les MOS de glands pour que les programmes de base 8 bits ne contiennent pas le langage d’assemblage pour s’exécuter sans modification.
  • Également dans BBC Basic, non seulement la variable numérique @% Formatage d’impression de contrôle, il accepte l’attribution directe d’ANSI printf chaînes de format, normalement une erreur de décalage de type. [4]
  • En javascript, évaluation du Type de L’opérateur réussit lorsque l’opérande est un identifiant non déclaré, ce qui entraînerait normalement un Référence .
  • Tout commentaire qui a un effet sur le code est magique.
  • Les adresses d’E / S mappées de mémoire et les variables volatiles sont également magiques dans ce sens, bien que le terme ne soit pas normalement appliqué.

Variantes [ modifier ]]

Magie profonde fait référence à des techniques qui ne sont pas largement connues et peuvent être délibérément gardées secrètes. Le nombre de ces techniques a sans doute diminué ces dernières années, [ quand? ]] Surtout dans le domaine de la cryptographie où la sécurité par l’obscurité a été de plus en plus abandonnée en faveur de la sécurité grâce à la conception qui permet et encourage souvent le contrôle du public. Le Fichier de jargon fait une distinction [5] entre magie profonde , qui fait référence au code basé sur les connaissances théoriques ésotériques, et magie noire , qui fait référence au code basé sur des techniques qui semblent fonctionner mais qui manquent d’une explication théorique.

Il définit également magie lourde , qui fait référence au code basé sur des subtilités obscures ou sans papiers de matériel ou de logiciel particulier. Le code source du noyau, interprété ce commentaire, trouvé dans le code, pour suggérer qu’une sagesse théorique profonde était exposée dans l’extrait obscur, mais en fait, sa fonction “magique” dépendait simplement d’une particularité de la façon dont le compilateur C a été optimisé pour Le matériel PDP-11 sur lequel la version 6 d’Unix a été conçu pour s’exécuter.

Voir également [ modifier ]]

Les références [ modifier ]]

  1. ^ “Perlguts – perldoc.perl.org” . 5 octobre 2014 . Récupéré 18 février 2015 .
  2. ^ Banahan, Mike; Brady, Declan; Doran, Mark (1991). “9.10.3 le stdio.h En tête de fichier”. Le livre C: avec la norme ANSI C . Le jeu d’instructions (2e éd.). Wokingham, Angleterre: Addison-Wesley Publishers. p. 234. ISBN 0-201-54433-4 . Il n’est pas sûr de copier ces objets dans le programme; Parfois, leurs adresses peuvent être «magiques».
  3. ^ “Perlop – perldoc.perl.org” . 7 septembre 2010 . Récupéré 17 février 2011 .
  4. ^ un b “27. Mots-clés” (PDF) . Manuel de référence de base de la BBC (1er éd.). Cambridge, Angleterre: Acorn Ordinateurs. Octobre 1992. pp. 229, 349. ISBN 1-85250-103-0 . Récupéré 9 mai 2007 . [ dead link]]
  5. ^ “Magie profonde” . Fichier de jargon .

after-content-x4