Есть несколько очень интересных вариантов использования. Один пример - в программировании с графическим интерфейсом - я видел это при разработке приложения с графическим интерфейсом в реальном времени, когда оно работало рядом с моим Emacs: я добавил код для новой кнопки и нажал «Cc Cc», чтобы скомпилировать эту единственную функцию, а кнопка просто появилось в окне! Не нужно было закрывать и снова открывать приложение. Затем я начал настраивать виджеты и манипулировать макетом, и открытое окно мгновенно перестраивалось - кнопки начинали перемещаться, просто появлялись новые текстовые поля и т. Д., Как только я выполнял каждое небольшое изменение, которое я сделал.
Другим примером является превосходный скринкаст о библиотеке OpenjL Clojure «Penumbra», где программист создает 3D-игру в тетрис в реальном времени. Он начинает с пустого окна OpenGL рядом со своим emacs. Он определяет объект куба - C-M-x - и он на экране. Запускает команду на вращение, сразу же начинает вращаться. Запускает цикл, определяющий еще 5 кубов в разных местах, pop-pop-pop-pop-pop они появляются. Это все сразу реагирует, полный набор инструментов OpenGL прямо здесь, чтобы играть с. Добавьте новую текстуру поверхности в свой куб и сразу увидите, как она появляется. Он становится гибким трехмерным миром - код динамически изменяет существующий мир, а не закрывает и повторно открывает трехмерное полотно при каждом изменении.
Penumbra Livecoding Screencast - скачайте HD версию для лучшего опыта.
Существует также отличная презентация / скринкаст о аудиотеке "Overtone" для Clojure. Библиотека представляет собой набор инструментов для синтезатора, где у вас есть набор функций синтезатора для управления звуковой волной. Во время презентации разработчик пишет немного кода, который запускает воспроизведение тона. Затем он тратит десять секунд, записывая цикл, который воспроизводит этот звук в 10 раз, но с каждым разом увеличивает частоту, и снова C-M-x, и вы слышите его, ноты поднимаются выше. В течение 20 минут в режиме реального времени он запускает песню. Это выглядит как тонна веселья.
Обертон Презентация Ссылка
Другими областями применения могут быть, например: веб-сканирование / извлечение данных - разработка и уточнение алгоритмов извлечения информации в режиме реального времени, отслеживание данных, возвращаемых на каждом этапе; Программирование робототехники - отправляйте команды роботу, пока он жив; Распознавание лиц / изображений - с такой библиотекой, как OpenCV, вы можете мгновенно обновлять то, что библиотека распознает на изображении / видео, когда вы разрабатываете код; Математическая работа (у Clojure есть «Заклинатель» для статистики); и в любой среде, в которой вы хотите сразу увидеть, как ваши изменения повлияли на данные, с которыми вы работаете.
Так что это самый забавный аспект, когда перед вами стоит REPL. Вещи, которые не были материальными, податливыми, интерактивными, начинают становиться. Дизайн графического интерфейса, 3D-графика, программное звуковое производство, извлечение и преобразование данных - все это обычно делается на расстоянии вытянутой руки. Но с Clojure (и, в некоторой степени, с другими динамическими языками) это стало действительно осязаемым и незамедлительным; вы видите каждое изменение, как только пишете код, и если что-то не работает или вы не получаете ожидаемый результат, вы просто изменяете то, что пропустили, и немедленно повторяете его.
Clojure очень настроен на это. Самое дикое в том, что вы можете использовать библиотеки Java в реальном времени одинаково - несмотря на то, что сама Java не может! Таким образом, Overtone использует библиотеку Java-синтезатора в реальном времени, несмотря на то, что вы никогда не могли в Java, Penumbra использует привязки Java OpenGL и т. Д. Это потому, что Rich Hickey разработал Clojure, чтобы он мог компилироваться в байт-код JVM на лету. Это удивительный язык - Clojure внес огромный вклад в то, насколько невероятно увлекательным и продуктивным может быть программирование.