Jump to content

Код как данные

В информатике выражение «код как данные» относится к идее, что исходным кодом, написанным на языке программирования, можно манипулировать как данными, такими как последовательность символов или абстрактное синтаксическое дерево (AST), и оно имеет семантику выполнения только в контекст данного компилятора или интерпретатора . [1] Это понятие часто используется в контексте Lisp -подобных языков, которые используют S-выражения в качестве основного синтаксиса, поскольку написание программ с использованием вложенных списков символов делает интерпретацию программы как AST достаточно прозрачной (свойство, известное как гомоиконичность ). [2] [3]

Эти идеи обычно используются в контексте так называемого метапрограммирования — написания программ, которые рассматривают другие программы как свои данные. [4] [5] Например, код как данные позволяет сериализовать первоклассные функции переносимым способом. [6] Другой вариант использования — сохранение программы в строке, которая затем обрабатывается компилятором для создания исполняемого файла. [4] Чаще всего существует API-интерфейс отражения , который представляет структуру программы как объект внутри языка, уменьшая возможность создания неправильной программы. [7]

В вычислений теории вторая теорема Клини о рекурсии обеспечивает форму «код-данные», доказывая, что программа может иметь доступ к своему собственному исходному коду. [8]

Код как данные также является принципом архитектуры фон Неймана , поскольку хранимые программы и данные представлены в виде битов в одном и том же устройстве памяти. [4] Эта архитектура предлагает возможность писать самомодифицирующийся код . [ нужна ссылка ] Это также создает угрозу безопасности, связанную с маскировкой вредоносной программы под пользовательские данные и последующим использованием эксплойта для прямого выполнения вредоносной программы. [9]

Данные как код

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

В декларативном программировании принцип « Данные как код» (DaC) относится к идее, что произвольная структура данных может быть представлена ​​с использованием семантики специализированного языка или API. Например, список целых чисел или строка — это данные, но в таких языках, как Lisp и Perl, их можно напрямую вводить и оценивать как код. [1] Сценарии конфигурации , предметно-ориентированные языки и языки разметки — это случаи, когда выполнение программы контролируется элементами данных, которые не являются явно последовательностями команд. [10] [11]

  1. ^ Перейти обратно: а б Полетто, Массимилиано А. (сентябрь 1999 г.). Поддержка языка и компилятора для динамической генерации кода (PDF) (доктор философии). Массачусетский технологический институт. п. 20. Пока он не скомпилирован динамически, динамический код является данными. Точно так же списки в Lisp и строки в Perl являются данными, но их можно оценивать как код.
  2. ^ Плюш, Майк (февраль 2004 г.). «ConsizedXML опирается на важные качества XML и S-выражений» . XML-журнал . 5 (2). Гейл Академический OneFile: 20+ . Проверено 14 января 2023 г. S-выражения, или символические выражения, — это синтаксис, лежащий в основе Lisp-подобных языков, включая Scheme. По сути, S-выражения представляют собой вложенные списки символов. S-выражения используются в языках, поддерживающих представление о том, что код — это данные.
  3. ^ Рил, Джонатан (22 октября 2006 г.). «Ассимиляция MetaBorg:: Встраивание языковых инструментов в языки». Материалы 5-й международной конференции по генеративному программированию и компонентной инженерии . стр. 21–28. дои : 10.1145/1173706.1173710 . ISBN  1595932372 . S2CID   11111101 . Сообщества Lisp и Scheme являются исключением, поскольку они, как правило, твердо придерживаются идеи, что код — это данные, и реализуют большую часть своего языка на меньшем базовом языке.
  4. ^ Перейти обратно: а б с Клёкнер, Андреас; Пинто, Николас; Ли, Юнсуп; Катандзаро, Брайан; Иванов Павел; Фасих, Ахмед (март 2012 г.). «PyCUDA и PyOpenCL: подход к генерации кода во время выполнения графического процессора на основе сценариев». Параллельные вычисления . 38 (3): 157–174. arXiv : 0911.3456 . дои : 10.1016/j.parco.2011.09.001 . S2CID   18928397 .
  5. ^ Ву, Чаур (2010). «Метапрограммирование». Про DLR в .NET 4 . стр. 185–210. дои : 10.1007/978-1-4302-3067-0_8 . ISBN  978-1-4302-3066-3 .
  6. ^ Так, Гвидо; Корнштадт, Лейф; Смолка, Герт (март 2006 г.). «Общее травление и минимизация» . Электронные заметки по теоретической информатике . 148 (2): 79–103. дои : 10.1016/j.entcs.2005.11.041 .
  7. ^ ВандерХарт, Люк; Сьерра, Стюарт (2010). «Макросы и метапрограммирование». Практический Clojure . стр. 167–178. дои : 10.1007/978-1-4302-7230-4_12 . ISBN  978-1-4302-7231-1 .
  8. ^ Панангаден, Пракаш. «Заметки о теореме рекурсии» (PDF) . COMP 330 Теория вычислений . Университет Макгилла . Проверено 15 января 2023 г.
  9. ^ Бёме, Райнер; Мур, Тайлер (26 августа 2013 г.). «Краткое введение в информационную безопасность» (PDF) .
  10. ^ https://arxiv.org/abs/2401.10603
  11. ^ https://github.com/shuttle-hq/synth


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9a9a002d8555cbdf1f89ac6f1eb09d6d__1711490940
URL1:https://arc.ask3.ru/arc/aa/9a/6d/9a9a002d8555cbdf1f89ac6f1eb09d6d.html
Заголовок, (Title) документа по адресу, URL1:
Code as data - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)