Представьте себе простой (составленный) язык, в котором функции выглядят как :
function f(a, b) = c + 42
where c = a * b
(Скажем, это подмножество Лиспа, которое включает 'defun' и 'let'.)
Также представьте, что оно включает неизменяемые объекты, которые выглядят так:
struct s(a, b, c = a * b)
Опять же, по аналогии с Лиспом (на этот раз надмножеством), скажем, определение структуры, подобное этому, будет генерировать функции для:
make-s(a, b)
s-a(s)
s-b(s)
s-c(s)
Теперь, учитывая простую настройку, кажется очевидным, что есть много общего между тем, что происходит за сцены, когда вы либо называете «f», либо «make-s». После того, как 'a' и 'b' предоставлены во время вызова / создания экземпляра, имеется достаточно информации для вычисления 'c'.
Вы можете думать о создании экземпляра структуры как о вызове функции с последующим сохранением результирующего символического окружение для последующего использования при вызове сгенерированных функций доступа. Или вы можете думать о вычислении функции как о создании скрытой структуры с последующим использованием ее в качестве символической среды для оценки конечного результата выражения.
Моя игрушечная модель настолько упрощена, что она « бесполезно? Или это действительно полезный способ подумать о том, как работают настоящие языки? Существуют ли какие-либо реальные языки / реализации, о которых кому-то без опыта работы в CS, но интересующемуся языками программирования (например, мне) следует узнать больше, чтобы изучить эту концепцию?
Спасибо.
EDIT: Спасибо за ответы, так что далеко. Вкратце, я думаю, что меня интересует, существуют ли какие-либо реальные языки, в которых людям, изучающим язык, говорят, например, «вы должны думать об объектах как о замыканиях». Или, если есть какие-либо реальные языковые реализации, в которых создание экземпляра объекта и вызов функции на самом деле имеют общий (нетривиальный, т.е. не только вызовы библиотеки) код или структуры данных.
Проводит ли я аналогию , что, как я знаю, раньше делали другие, пойти дальше простой аналогии в реальных ситуациях?