В лиспе когда-то концепция эквивалентности кода и данных была одной из ключевых. В значительной степени она сохранила свою актуальность для препроцессорного этапа.
В данном случае я не буду касаться того вопроса, сохранили ли лиспы основною свою идею, или она была похерена, это не особо важно, по той причине, что эта концепция изначально была порочной.
Почему идея эквивалентности кода и данных соблазнительна для программиста? Это идет от инертности бытового и математического мышления. Человек всегда склонен искать какую то псевдовизуальную опору. Ему хочется думать о сущностях как о чем то осязаемом. Так для лиспера, например, точечная пара, это структура, которую можно «увидеть» в каком то таком вот (a . b)
представлении, и когда он производит какие то манипуляции в коде с этой структурой, эта визуализация постоянно маячит у него в голове. Он думает о сущности pair ни как подобает о ней думать — как о черном ящике с каким то поведением, а как о этой вот хрени, которая выводится в терминал. Это вообще свойственно программистам, нужна визуальная опора. У многих понятие «объект» или «класс» ассоциировано с какой-то отрисованной таблицей.
Фишка в том, что, так называемое «состояние» является лишь частным случаем поведения, и когда мы пишем (print '(a b c))
, например, мы получаем не форму, и не состояние объекта, а лишь его внешнее представление, некое отображение средствами IO, что является частным случаем поведения. Настоящий объект — это что-то вроде кантовской «вещи в себе», он не осязаем и не видим. Можно реализовывать или менять его поведение, но его нельзя «увидеть» иди «пощупать»
Ничего кроме поведения у объекта нет. Поэтому, не может быть никакой эквивалентности кода и данных. Нет данных. То что принято называть данными — есть лишь частный случай поведения. Эта инертность мышления ведет к тому, что программист не может отцепится в своем уме от сиськи — связывания внешнего представления объекта и сущности этого объекта. Он таскает этот якорь с собой до конца дней.
Без сомнения все это касается и других языков, например, джаваскриптеры постоянно пытаются представлять объект как таблицу, «пропарсить» ее, «передать на сервер» и тп., сишники и плюсовики часто говорят об «участке кода» который куда-то обращается, смешивая тем самым процесс с исходным кодом, это все очень хреново, это говорит о серьезных дырах в головах. Лисп тут выделяется тем, что он выдвинул этот порочный взгляд на вещи в ранг некоего культа, в остальном, дела везде печальны
Перемещено tailgunner из development