Итак, я прочитал об этом, и это почти то, что это значит: взять абстрактную концепцию и сделать ее конкретной.Или есть прокси, который представляет абстрактную концепцию.Например, в Лиспе концепция абстракции и применения процедуры претворяется в жизнь при использовании лямбда-выражений.
Реализация сама по себе является широкой концепцией и не только применима к функциональным языкам программирования.
ВJava, например, есть типы, которые доступны во время выполнения.Это типы reifiable.Это означает, что существует конкретное представление абстрактной концепции типа во время выполнения.В отличие от этого, существуют типы, которые не подлежат повторному получению.Это особенно очевидно при использовании обобщений в Java.В Java универсальные объекты подвергаются стиранию типов, и поэтому универсальная информация о типах недоступна во время выполнения (если параметризованный тип не использует неограниченные подстановочные знаки).
Другой пример - попытка смоделировать концепцию.Например, предположим, что у вас есть класс Group
и класс User
.Теперь есть определенные абстрактные понятия, которые описывают отношения между ними.Например, абстрактная концепция User
является членом Group
.Чтобы конкретизировать эти отношения, вы должны написать метод с именем isMemberOf
, который сообщает, является ли User
членом Group
.Итак, что вы сделали здесь, так это то, что у вас есть reified (сделано реальным / явным / конкретным) абстрактное понятие членства в группах.
Другой хороший пример - этобаза данных, где у вас есть родительские и дочерние отношения между объектами.Вы можете описать это отношение в абстрактном понятии дерева.Теперь предположим, что у вас есть функция / метод, который берет эти данные из базы данных и создает объект фактический Tree
.Теперь вы сделали reified абстрактную концепцию древовидных отношений родитель-потомок в фактический Tree
объект.
Возвращение к функционалуЯзыки в целом, пожалуй, лучший пример реализации - создание самого языка программирования Lisp.Лисп был полностью абстрактной и теоретической конструкцией (в основном просто математическая запись для компьютерных языков).Так продолжалось до тех пор, пока функция Lisp eval
не была фактически реализована Стивом Расселом в IBM 704:
Согласно тому, что сообщил Пол Грэм в Hackers & Painters, p.185, Маккарти сказал: «Стив Рассел сказал, смотри, почему бы мне не запрограммировать этот eval ..., и я сказал ему, хо-хо, ты путаешь теорию с практикой, этот eval предназначен для чтения, а недля вычислений. Но он пошел вперед и сделал это. То есть он скомпилировал eval в моей статье в машинный код IBM 704, исправляя ошибку, а затем объявил об этом как интерпретатор Lisp, что, безусловно, и было.по сути, форма, которую он имеет сегодня ... "
Итак, Лисп был преобразован из абстрактной концепции в реальный язык программирования.