fbpx
Wikipedia

Magic (programming)

In the context of computer programming, magic is an informal term for abstraction; it is used to describe code that handles complex tasks while hiding that complexity to present a simple interface. The term is somewhat tongue-in-cheek, and often carries bad connotations, implying that the true behavior of the code is not immediately apparent. For example, Perl's polymorphic typing and closure mechanisms are often called "magic". The term implies that the hidden complexity is at least in principle understandable, in contrast to black magic and deep magic (see Variants), which describe arcane techniques that are deliberately hidden or extremely difficult to understand. However, the term can also be applied endearingly, suggesting a "charm" about the code. The action of such abstractions is described as being done "automagically", a portmanteau of "automatically" and "magically".

Referential opacity edit

"Magic" refers to procedures which make calculations based on data not clearly provided to them, by accessing other modules, memory positions or global variables that they are not supposed to (in other words, they are not referentially transparent). According to most recent software architecture models, even when using structured programming, it is usually preferred to make each function behave the same way every time the same arguments are passed to it, thereby following one of the basic principles of functional programming. When a function breaks this rule, it is often said to contain "magic".

A simplified example of negative magic is the following code in PHP:

function magic() { global $somevariable; echo $somevariable; } $somevariable = true; magic(); 

While the code above is clear and maintainable, if it is seen in a large project, it is often hard to understand where the function magic() gets its value from. It is preferred to write that code using the following concept:

function noMagic($myvariable) { echo $myvariable; } $somevariable = true; noMagic($somevariable); 

Non-orthogonality edit

Any SV [scalar value] may be magical, that is, it has special features that a normal SV does not have.

— Larry Wall, perlguts manual page,[1] Perl 5

This definition of magic or magical can be extended to a data type, code fragment, keyword, or machine address that has properties not shared by otherwise identical objects. The magical properties may or may not be documented.

  • In ISO C, file handles (of type FILE) cannot be safely copied as their addresses[2] may be magic. That is, the runtime environment may place original file handles in a hard-coded address range, and not provide file handle behaviour to a user-created copy at another address. Consequently, the standard library routines accept pointers to file handles, of type FILE *, instead.
  • In Perl 5, the statement while(<file_handle>) implicitly assigns the line read from the file by <file_handle> to the variable $_, and applies the defined() function to the expression so that any successfully read string, even "0" or the empty string, evaluates as true and continues the while() loop. This does not happen to <file_handle> anywhere else, or to while() with any other control expression.[3]
  • In an emulator, especially one in development, the emulated machine's system call points may be magic; when they are called, the emulator may run native code for convenience, speed or access to physical hardware, and set up the emulated CPU and memory as if it had executed the original code.
    • For instance, the CALL statement of BBC BASIC V treats the system call addresses of Acorn MOS magically; instead of attempting to branch to ARM code at those addresses, it raises a software interrupt in RISC OS equivalent to the system call.[4][non-primary source needed] The effect is to emulate Acorn MOS sufficiently for 8-bit BASIC programs not containing assembly language to run without modification.
  • Also in BBC BASIC, not only does the numeric variable @% control print formatting, it accepts direct assignment of ANSI printf format strings, normally a type mismatch error.[4]
  • In JavaScript, evaluation of the typeof operator succeeds when the operand is an undeclared identifier, which would normally result in a ReferenceError.
  • Any comment that has an effect on the code is magic.
  • Memory-mapped I/O addresses and volatile variables are also magic in this sense, although the term is not normally applied.

Variants edit

Deep magic refers to techniques that are not widely known, and may be deliberately kept secret. The number of such techniques has arguably decreased over time, especially in the field of cryptography where security through obscurity has been increasingly abandoned in favour of security through design which allows, and often encourages, public scrutiny.

The Jargon File makes a distinction between deep magic, which refers to code based on esoteric theoretical knowledge, and black magic, which refers to code based on techniques that appear to work but which lack a theoretical explanation.[5] It also defines heavy wizardry, which refers to code based on obscure or undocumented intricacies of particular hardware or software.‌ For an example, the infamous “You are not expected to understand this” comment: many readers of Lions’ Book, a didactically annotated commentary on the Unix version 6 kernel source code, interpreted this comment, found in the code, to suggest some deep theoretical wisdom was on display in the obscure snippet, but in fact its "magical" function was merely dependant on a peculiarity of the way the C Compiler was optimised for the PDP-11 hardware on which version 6 of Unix was designed to run.

See also edit

References edit

  1. ^ "perlguts – perldoc.perl.org". 5 October 2014. Retrieved 18 February 2015.
  2. ^ Banahan, Mike; Brady, Declan; Doran, Mark (1991). "9.10.3 The stdio.h header file". The C book: Featuring the ANSI C standard. The Instruction Set (2nd ed.). Wokingham, England: Addison-Wesley Publishers. p. 234. ISBN 0-201-54433-4. It is not safe to copy these objects within the program; sometimes their addresses may be 'magic'.
  3. ^ "perlop – perldoc.perl.org". 7 September 2010. Retrieved 17 February 2011.
  4. ^ a b "27. Keywords" (PDF). BBC BASIC Reference Manual (1st ed.). Cambridge, England: Acorn Computers. October 1992. pp. 229, 349. ISBN 1-85250-103-0. Retrieved 9 May 2007.[dead link]
  5. ^ "Deep Magic". Jargon File.

magic, programming, confused, with, magic, number, programming, magic, programming, environment, magic, software, enterprises, deep, magic, redirects, here, concept, chronicles, narnia, book, series, lion, witch, wardrobe, context, computer, programming, magic. Not to be confused with Magic number programming For the Magic programming environment see Magic Software Enterprises Deep magic redirects here For the concept in the Chronicles of Narnia book series see The Lion the Witch and the Wardrobe In the context of computer programming magic is an informal term for abstraction it is used to describe code that handles complex tasks while hiding that complexity to present a simple interface The term is somewhat tongue in cheek and often carries bad connotations implying that the true behavior of the code is not immediately apparent For example Perl s polymorphic typing and closure mechanisms are often called magic The term implies that the hidden complexity is at least in principle understandable in contrast to black magic and deep magic see Variants which describe arcane techniques that are deliberately hidden or extremely difficult to understand However the term can also be applied endearingly suggesting a charm about the code The action of such abstractions is described as being done automagically a portmanteau of automatically and magically Contents 1 Referential opacity 2 Non orthogonality 3 Variants 4 See also 5 ReferencesReferential opacity editMain article Referential transparency Magic refers to procedures which make calculations based on data not clearly provided to them by accessing other modules memory positions or global variables that they are not supposed to in other words they are not referentially transparent According to most recent software architecture models even when using structured programming it is usually preferred to make each function behave the same way every time the same arguments are passed to it thereby following one of the basic principles of functional programming When a function breaks this rule it is often said to contain magic A simplified example of negative magic is the following code in PHP function magic global somevariable echo somevariable somevariable true magic While the code above is clear and maintainable if it is seen in a large project it is often hard to understand where the function magic gets its value from It is preferred to write that code using the following concept function noMagic myvariable echo myvariable somevariable true noMagic somevariable Non orthogonality editAny SV scalar value may be magical that is it has special features that a normal SV does not have Larry Wall perlguts manual page 1 Perl 5 This definition of magic or magical can be extended to a data type code fragment keyword or machine address that has properties not shared by otherwise identical objects The magical properties may or may not be documented In ISO C file handles of type FILE cannot be safely copied as their addresses 2 may be magic That is the runtime environment may place original file handles in a hard coded address range and not provide file handle behaviour to a user created copy at another address Consequently the standard library routines accept pointers to file handles of type FILE instead In Perl 5 the statement while var style padding right 1px lt file handle gt var implicitly assigns the line read from the file by lt file handle gt to the variable span class nv span and applies the span class nb defined span span class p span function to the expression so that any successfully read string even span class s 0 span or the empty string evaluates as true and continues the span class k while span span class p span loop This does not happen to lt file handle gt anywhere else or to span class k while span span class p span with any other control expression 3 In an emulator especially one in development the emulated machine s system call points may be magic when they are called the emulator may run native code for convenience speed or access to physical hardware and set up the emulated CPU and memory as if it had executed the original code For instance the span class k CALL span statement of BBC BASIC V treats the system call addresses of Acorn MOS magically instead of attempting to branch to ARM code at those addresses it raises a software interrupt in RISC OS equivalent to the system call 4 non primary source needed The effect is to emulate Acorn MOS sufficiently for 8 bit BASIC programs not containing assembly language to run without modification Also in BBC BASIC not only does the numeric variable span class nv span control print formatting it accepts direct assignment of ANSI printf format strings normally a type mismatch error 4 In JavaScript evaluation of the span class ow typeof span operator succeeds when the operand is an undeclared identifier which would normally result in a span class ne ReferenceError span Any comment that has an effect on the code is magic Memory mapped I O addresses and volatile variables are also magic in this sense although the term is not normally applied Variants editDeep magic refers to techniques that are not widely known and may be deliberately kept secret The number of such techniques has arguably decreased over time especially in the field of cryptography where security through obscurity has been increasingly abandoned in favour of security through design which allows and often encourages public scrutiny The Jargon File makes a distinction between deep magic which refers to code based on esoteric theoretical knowledge and black magic which refers to code based on techniques that appear to work but which lack a theoretical explanation 5 It also defines heavy wizardry which refers to code based on obscure or undocumented intricacies of particular hardware or software For an example the infamous You are not expected to understand this comment many readers of Lions Book a didactically annotated commentary on the Unix version 6 kernel source code interpreted this comment found in the code to suggest some deep theoretical wisdom was on display in the obscure snippet but in fact its magical function was merely dependant on a peculiarity of the way the C Compiler was optimised for the PDP 11 hardware on which version 6 of Unix was designed to run See also editMagic number programming Black box Cargo cult programming Nothing up my sleeve numberReferences edit perlguts perldoc perl org 5 October 2014 Retrieved 18 February 2015 Banahan Mike Brady Declan Doran Mark 1991 9 10 3 The stdio h header file The C book Featuring the ANSI C standard The Instruction Set 2nd ed Wokingham England Addison Wesley Publishers p 234 ISBN 0 201 54433 4 It is not safe to copy these objects within the program sometimes their addresses may be magic perlop perldoc perl org 7 September 2010 Retrieved 17 February 2011 a b 27 Keywords PDF BBC BASIC Reference Manual 1st ed Cambridge England Acorn Computers October 1992 pp 229 349 ISBN 1 85250 103 0 Retrieved 9 May 2007 dead link Deep Magic Jargon File Retrieved from https en wikipedia org w index php title Magic programming amp oldid 1187437317 Variants, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.