Имеет ли "весь язык всегда доступный" в случае Clojure?
Девятая маркерная точка в Paul Graham Что сделано Lisp Разное говорит,
9. Весь язык всегда доступен.
Нет реального различия между временем чтения, временем компиляции и временем выполнения. Вы можете компилировать или запускать код во время чтения, чтения или запуска кода во время компиляции и чтения или компиляции кода во время выполнения.
Запуск кода во время чтения позволяет пользователям перепрограммировать синтаксис Lisp; исполняемый код во время компиляции является основой макросов; компиляция во время выполнения является основой Lisp использования в качестве языка расширения в таких программах, как Emacs; и чтение во время выполнения позволяет программам общаться с использованием s-выражений, идеи, недавно изобретенной как XML.
Сохранена ли эта последняя точка маркера для Clojure?
Ответы
Ответ 1
Вы можете свободно смешивать время выполнения и время компиляции в Clojure, хотя Common Lisp все еще несколько более гибкий здесь (из-за наличия макросов компилятора и макросов символов и полностью поддерживаемого macrolet
; Clojure имеет преимущество в своем прохладном подходе к макрогигине через автоматическое разрешение символа в синтаксической цитате). Читатель в настоящее время закрыт, поэтому свободное смешивание времени выполнения, времени компиляции и времени чтения невозможно 1.
1 За исключением неподдерживаемых умных хаков.
Ответ 2
Он держится,
(eval (read-string "(println \"Hello World!!\")"))
Hello World!!
nil
Как и emacs, вы можете иметь конфигурацию вашей программы в Clojure, один проект, который я знаю Clojure for, static который позволяет вам иметь ваш шаблон как вектор Clojure, а также произвольный код, который будет выполнен во время чтения.