Из Википедии, бесплатной энциклопедии
  (Перенаправлен из Black magic (программирование) )
Перейти к навигации Перейти к поиску

В контексте компьютерного программирования магия - неформальный термин для обозначения абстракции ; он используется для описания кода, который обрабатывает сложные задачи, скрывая эту сложность, чтобы представить простой интерфейс. Этот термин несколько ироничен и часто несет в себе плохие коннотации, подразумевая, что истинное поведение кода не сразу видно. Например, Perl «s полиморфные типизации и закрывающие механизмы часто называют„волшебным“. Термин подразумевает, что скрытая сложность, по крайней мере, в принципе понятна, в отличие от черной магии и глубокой магии (см. Варианты), которые описывают тайные техники, которые намеренно скрыты или чрезвычайно трудны для понимания. Тем не менее, этот термин также может применяться нежно, предлагая «очарование» кода. Действие таких абстракций описывается , как делается «автомагически» , а чемодан с «автоматически» и «волшебным».

Ссылочная непрозрачность [ править ]

«Магия» относится к процедурам, которые производят вычисления на основе данных, явно не предоставленных им, путем доступа к другим модулям, позициям памяти или глобальным переменным, которые они не должны использовать (другими словами, они не являются ссылочно прозрачными). Согласно самым последним моделям архитектуры программного обеспечения , даже при использовании структурного программирования обычно предпочтительно, чтобы каждая функция вела себя одинаково каждый раз, когда ей передаются одни и те же аргументы, тем самым следуя одному из основных принципов функционального программирования . Когда функция нарушает это правило, часто говорят, что она содержит «магию».

Упрощенный пример отрицательной магии - это следующий код на PHP :

функция  magic () {  global  $ somevariable ; echo  $ somevariable ; }$ somevariable  =  true ;магия ();

Хотя приведенный выше код понятен и удобен в обслуживании, если его увидеть в большом проекте, часто бывает трудно понять, откуда функция magic()получает свое значение. Желательно писать этот код, используя следующую концепцию:

функция  noMagic ( $ myvariable ) {  echo  $ myvariable ; }$ somevariable  =  true ;noMagic ( $ somevariable );

Неортогональность [ править ]

Любой SV [скалярное значение] может быть волшебным, то есть у него есть особенности, которых нет у обычного SV.

-  Ларри Уолл , страница руководства perlguts , [1] Perl 5

Это определение магии или Магический может быть расширено до типа данных , фрагмента кода, ключевое слова или адреса машины , которая имеет свойство , не разделяемое другие идентичные объекты. Магические свойства могут быть задокументированы, а могут и не быть.

  • В ISO C дескрипторы файлов (типа FILE) не могут быть безопасно скопированы, поскольку их адреса [2] могут быть волшебными. То есть среда выполнения может размещать исходные дескрипторы файлов в жестко заданном диапазоне адресов и не обеспечивать поведение дескрипторов файлов для созданной пользователем копии по другому адресу. Следовательно, стандартные библиотечные подпрограммы FILE *вместо этого принимают указатели на дескрипторы файлов определенного типа .
  • В Perl 5 оператор неявно назначает строку, прочитанную из файла с помощью <file_handle>, переменной и применяет функцию к выражению, так что любая успешно прочитанная строка, даже или пустая строка , оценивается как истинная и продолжает цикл. Этого не происходит ни с <file_handle> , ни с любым другим управляющим выражением. [3]while(<file_handle>)$_defined()"0"while()while()
  • В эмуляторе , особенно в разрабатываемом, системные точки вызова эмулируемой машины могут быть волшебными; когда они вызываются, эмулятор может запускать собственный код для удобства, скорости или доступа к физическому оборудованию и настраивать эмулируемый ЦП и память, как если бы он выполнял исходный код.
    • Например, CALLинструкция BBC BASIC V волшебным образом обрабатывает адреса системных вызовов Acorn MOS ; вместо попытки перехода к коду ARM по этим адресам он вызывает программное прерывание в ОС RISC, эквивалентное системному вызову. [4] Эффект состоит в том, чтобы эмулировать Acorn MOS в достаточной степени, чтобы 8-битные программы BASIC, не содержащие язык ассемблера, могли работать без изменений.
  • Также в BBC BASIC числовая переменная не только управляет форматированием печати, но и допускает прямое присвоение строк формата ANSI , обычно это ошибка несоответствия типа. [4]@%printf
  • В JavaScript оценка typeofоператора успешна, когда операнд является необъявленным идентификатором, что обычно приводит к расширению ReferenceError.
  • Любой комментарий , влияющий на код, волшебен.
  • Отображенные в памяти адреса ввода-вывода и изменчивые переменные также являются магическими в этом смысле, хотя этот термин обычно не применяется.

Варианты [ править ]

Глубокая магия относится к методам, которые широко не известны и могут намеренно держаться в секрете. Количество таких методов в последние годы, возможно, уменьшилось, [ когда? ] особенно в области криптографии , многие аспекты которой теперь открыты для всеобщего изучения. Жаргон Файл делает различие [5] между глубокой магией , которая относится к коду на основе эзотерических теоретических знаний и черной магией , который относится к коду , основанный на методах , которые появляются на работу , но которые не имеет теоретическое объяснение. Он также определяет тяжелое волшебство , которое относится к коду, основанному на неясных или недокументированных сложности конкретного оборудования или программного обеспечения.

См. Также [ править ]

  • Магическое число (программирование)
  • Черный ящик
  • Культ грузового программирования

Ссылки [ править ]

  1. ^ "perlguts - perldoc.perl.org" . 5 октября 2014 . Проверено 18 февраля 2015 года .
  2. ^ Банахан, Майк; Брэди, Деклан; Доран, Марк (1991). «9.10.3 Заголовочный файл». C Книга: Featuring стандарт ANSI C . Набор инструкций (2-е изд.). Уокингем, Англия: Издательство Аддисон-Уэсли. п. 234. ISBNstdio.h 0-201-54433-4. Копировать эти объекты внутри программы небезопасно; иногда их адреса могут быть «волшебными».
  3. ^ "perlop - perldoc.perl.org" . 7 сентября 2010 . Проверено 17 февраля 2011 года .
  4. ^ a b "27. Ключевые слова" (PDF) . Справочное руководство BBC BASIC (1-е изд.). Кембридж, Англия: Acorn Computers. Октябрь 1992. С. 229, 349. ISBN.  1-85250-103-0. Проверено 9 мая 2007 года .[ мертвая ссылка ] [ требуется неосновной источник ]
  5. ^ «Глубокая магия» . Файл жаргона .