Подтвердить что ты не робот

Имеет ли "весь язык всегда доступный" в случае Clojure?

Девятая маркерная точка в Paul Graham Что сделано Lisp Разное говорит,

9. Весь язык всегда доступен.

Нет реального различия между временем чтения, временем компиляции и временем выполнения. Вы можете компилировать или запускать код во время чтения, чтения или запуска кода во время компиляции и чтения или компиляции кода во время выполнения.

Запуск кода во время чтения позволяет пользователям перепрограммировать синтаксис Lisp; исполняемый код во время компиляции является основой макросов; компиляция во время выполнения является основой Lisp использования в качестве языка расширения в таких программах, как Emacs; и чтение во время выполнения позволяет программам общаться с использованием s-выражений, идеи, недавно изобретенной как XML.

Сохранена ли эта последняя точка маркера для Clojure?

4b9b3361

Ответ 1

Вы можете свободно смешивать время выполнения и время компиляции в Clojure, хотя Common Lisp все еще несколько более гибкий здесь (из-за наличия макросов компилятора и макросов символов и полностью поддерживаемого macrolet; Clojure имеет преимущество в своем прохладном подходе к макрогигине через автоматическое разрешение символа в синтаксической цитате). Читатель в настоящее время закрыт, поэтому свободное смешивание времени выполнения, времени компиляции и времени чтения невозможно 1.


1 За исключением неподдерживаемых умных хаков.

Ответ 2

Он держится,

(eval (read-string "(println \"Hello World!!\")"))
Hello World!!
nil

Как и emacs, вы можете иметь конфигурацию вашей программы в Clojure, один проект, который я знаю Clojure for, static который позволяет вам иметь ваш шаблон как вектор Clojure, а также произвольный код, который будет выполнен во время чтения.