eval как интерпретация
Когда впервые видишь тексты типа 60 функций PicoLisp, которые надо знать или которые вам пригодятся, то невольно думаешь, что такой порядок числа функций во всей системе. Но число токенов в системе на порядок больше, около 666-ти на текущий момент согласно документации. Так вот, среди этих 60-ти функции eval нет, хотя она входит в число классических функций Лисп. Конечно, теперь она присутствует, практически, в любой системе, но легенда гласит, что появилась она, именно, там. Функция фундаментальная не только потому, что в связи с ней интерпретируют такие концепции как рефлексивность или гомоиконичность, а, прежде всего, потому, что эта функция - интерпретатор. И легенда гласит, что разработчики Лисп, это сразу осознали, когда она впервые ими была реализована на ассемблере. Код на самом Лисп, согдасно учебнику авторов можно увидеть здесь.
Но если пойти дальше, то на этой парадигме можно построить всю теорию программирования, на концепции интерпретации. Что такое актор в модели акторов? Тот же интерпретатор, посылающий другому интерпретатору месседжи. А что такое активный объект как не то же самое? По сути, любая процедура или функция - это интерпретатор. Более того, те же параметры или переменные, которые можно интерпретировать как “примитивные процедуры или функции“ - по сути те же интерпретаторы, трансформирующие одни данные в другие, одни значения в другие, например, имена в адреса памяти … Все эти обозначения типа трансляция, компиляция, транспиляция, “парсинг” и так далее, не более, чем символизация процесса трансформации или переписывания одной лексики в другую и специализация выражает только специализацию лексики, то есть откуда и куда.
Как аргумент в пользу фундаментальности концепции интерпретации можно, например, привести статью 1968-ого года, когда теория программирования только зарождалась - “Рекурсивные и параметрические интерпретаторы“, в которой автор прямо называет правую часть переменной интерпретацией! Обратите внимание, не значением! И в этом есть смысл, поскольку это он сам и есть! Сам термин “эволюция“ акцентирует на развитии или вычислении. Если выдерживать такой темп, в среднем, около двух функций в день (а сегодня есть ещё и prEval), то у нас ещй останется время в этом году обсудить ещё некоторые принципиальные вещи. Меня смущает в рускоязычных переводах постоянное использование термина “оценка“. Поэтому потом я хочу поговорить об этом отдельно. Другое дело - интерпретация, которую, собственно говоря, и можно далее специфицировать. Это то же самое, что и имплементация или реализация, экзекуция. То есть не только толкование, но и исполнение. В связи с последним хочу привести ссылку на ученика академика А. П. Ершова, профессора Андрея Берса, его статью “Исполненные смыслом тексты“ (ещё его статьи). Ну и о концепции интерпретации, зародившейся в лингвистическом сообществе (кстати, на заре развития информатики, помимо математиков и физиков, туда много приходило филологов (не только Хомский!), в свзи с чем такое огромное количество лингвистических метафор в лексике компьютерных интерфейсов), приведу, тоже в качестве библиографии, ещё одну важную ссылку.