Гомоиконичность

Гомоикони́чность (гомоиконность, англ. homoiconicity, англ. homoiconic, от греч. ὁμός — равный, одинаковый + ср.-греч. εἰκόνα — «о́браз», «изображение») — свойство некоторых языков программирования, в которых структура программы похожа на его синтаксис, и поэтому внутреннее представление программы можно определить прочитав текстовую разметку. Если язык гомоиконичен, это означает, что текст программы имеет такую же структуру, как её абстрактное синтаксическое дерево (то есть AST и синтаксис являются изоморфными). Это позволяет всему коду на языке быть доступным и обработанным в качестве данных, используя одно и то же представление.

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

Типичным примером является язык программирования Лисп, который был создан, чтобы быть лёгким для списочных манипуляции и где структура задана как S-выражения, которые принимают форму вложенных списков. Лисп-программы записываются в виде списков; в результате получается, что программа может получить доступ к своим собственным функциям во время работы, а также перепрограммировать себя «на лету». Гомоиконичные языки, как правило, включают полную поддержку синтаксических макросов, позволяющие программисту выражать программные преобразования в сжатой форме. Примерами таких языков программирования являются Clojure (современный диалект Лиспа), Rebol и Рефал.

Источник: Википедия

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я