Jump to content

Магия (программирование)

В контексте компьютерного программирования магия — это неофициальный термин для обозначения абстракции ; он используется для описания кода, который решает сложные задачи, скрывая при этом эту сложность, чтобы представить простой интерфейс. Этот термин несколько ироничен и часто несет в себе неприятный смысл, подразумевая, что истинное поведение кода не сразу становится очевидным. Например, Perl механизмы полиморфной типизации и замыкания часто называют «магическими».

Этот термин подразумевает, что скрытая сложность, по крайней мере, в принципе понятна, в отличие от вариантов, описывающих тайные техники, которые намеренно скрыты или чрезвычайно сложны для понимания. Однако этот термин также можно применять ласково, подчеркивая «очарование» кода.

Действие таких абстракций описывается как совершающееся « автоматически », смесь слов «автоматически» и «магически».

Ссылочная непрозрачность

[ редактировать ]

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

Упрощенным примером негативной магии является следующий код на PHP :

function magic()
{
    global $somevariable;

    echo $somevariable;
}

$somevariable = true;

magic();

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

function noMagic($myvariable)
{
    echo $myvariable;
}

$somevariable = true;

noMagic($somevariable);

Неортогональность

[ редактировать ]

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

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

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

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

См. также

[ редактировать ]
  1. ^ «perlguts – perldoc.perl.org» . 5 октября 2014 года . Проверено 18 февраля 2015 г.
  2. ^ Банахан, Майк; Брэди, Деклан; Доран, Марк (1991). "9.10.3 stdio.h Заголовочный файл». Книга C: Представление стандарта ANSI C. Набор инструкций (2-е изд.). Уокингем, Англия: Addison-Wesley Publishers. стр. 234. ISBN  0-201-54433-4 . Копировать эти объекты внутри программы небезопасно; иногда их адреса могут быть «волшебными».
  3. ^ «perlop – perldoc.perl.org» . 7 сентября 2010 г. Проверено 17 февраля 2011 г.
  4. ^ Перейти обратно: а б «27. Ключевые слова» (PDF) . Справочное руководство BBC BASIC (1-е изд.). Кембридж, Англия: Acorn Computers. Октябрь 1992 г., стр. 229, 349. ISBN.  1-85250-103-0 . Проверено 9 мая 2007 г. [ мертвая ссылка ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9c659834427ab803a5455a727b9483d0__1718724900
URL1:https://arc.ask3.ru/arc/aa/9c/d0/9c659834427ab803a5455a727b9483d0.html
Заголовок, (Title) документа по адресу, URL1:
Magic (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)