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

Clojure Разработка: IDE или REPL?

Я немного использовал Clojure и хочу создавать проекты, которые больше и сложнее, чем игрушки. Я использую Java в течение последних нескольких лет и привык к тому, что IDE делают для меня - скомпилируйте множество классов, упакуйте их в банках, создайте пакетные файлы для пользователей, чтобы начать их с.

Когда я смотрю примеры разработки в Clojure, они, похоже, находятся вдоль линий файлов загрузки в REPL, смотрят, как они работают, редактируют файл, перезагружают, повторяют. Nary - класс или флага, создаваемые где угодно. В Stuart Halloway потрясающий "Программирование Clojure", например, я не смог найти ни одного примера "gen-class". IDE, которые я использовал (ClojureBox и плагин NetBeans), похоже, способствуют тому же потоку работы.

Это намеренно? Являются ли инструменты слишком незрелыми или я просто не "получаю это"?

Я хотел бы услышать некоторые примеры потока работы от людей, которые создали некоторые нетривиальные программы, которые будут использоваться обычными пользователями (а не другими разработчиками), если это возможно.

Спасибо, что поделились своими мнениями.

4b9b3361

Ответ 1

Я думаю, что здесь есть 2 вопроса:

A), как развернуть (и создавать и управлять зависимостями). Все, что я могу сказать, это посмотреть на другие проекты с похожими целями/доменами и скопировать их.

B) Рабочий процесс:

Мой рабочий поток выглядит следующим образом:

  • откройте файл и напишите декларации о желаемых действиях высокого уровня

  • начните писать некоторые функции для поддержки

2.5 скопируйте определения функций в REPL, когда я их создаю

  1. откройте другой файл и напишите некоторые базовые тесты, чтобы проверить работу функции.

3.5 скопируйте их в REPL

  1. итерация между двумя буферами, создающими тесты до примера и программы, к конечной цели. Они в конечном итоге становятся подобными действиями, и я знаю, что я сделал.

  2. оберните вторичный файл в deftest

Теперь, когда я вернусь через месяц, я могу просто запустить свои тесты и быть счастливыми! Сохранение буферов REPL может принести небольшую выгоду. Это то, что работает для меня в настоящее время, и я счастлив быть образованным, чтобы лучше подходить.

Что касается выбора IDE и REPL - у большинства IDE есть плагины с REPL, поэтому я не уверен, что это один или другой выбор - действительно, именно о том, с каким текстовым редактором вы работаете, и как вы хотите управлять вашей структуры проекта. Не существует каких-либо "сделанных таким образом" структур, предварительно подготовленных AFAIK, поэтому в этот момент легче просмотреть конкретные проекты (например, Clojure или penumbra или compojure или любую из библиотек, перечисленных на главном сайте.

Ответ 2

Подход к разработке REPL был рекомендован большинством IDE семейства LISP (и другого функционального языка) в течение длительного времени. Некоторые из этих REPL также содержат функции автозаполнения, которые вы можете связать с Java IDE.

REPL дает вам несколько основных преимуществ перед стандартным подходом. Во-первых, он позволяет выполнять произвольный код во время выполнения вашей программы, что значительно упрощает отладку многопоточных систем. Во-вторых, и что более важно, это упрощает проверку ваших функций во время кодирования. Вам не нужно создавать фреймворк вокруг новой функции или класса, вы можете играть с ней непосредственно в REPL и видеть, как она реагирует на различные варианты использования.

Ответ 3

Ну, для начала, практически любой достойный плагин разработки для любого редактора или IDE даст вам возможность использовать Clojure REPL из среды IDE. Вероятно, вы даже можете загружать файлы в REPL для тестирования и т.д. Вам не нужно выбирать тот или иной.

Enclojure идет долгий путь, это точно. Тем не менее, большинство людей вполне довольны использованием Emacs, включая меня. Emacs использует Lisp в качестве языка конфигурации, поэтому он обычно является наиболее естественным выбором для Lisper.

Для языков, имеющих REPL, использование REPL в качестве основной части процесса разработки является нормой. Редактируя файлы, загружая их в REPL, играя с ними, чтобы увидеть, если работа, полоскание, повторение. Это одно из основных преимуществ языков с REPL, таких как Clojure и Haskell и CL и т.д.

Как для сборки банок, так и для компиляции кода Clojure и т.д., это просто. У вас даже нет/have/компилировать Clojure код большую часть времени, если вы этого не хотите. Когда вы это сделаете, вы AOT скомпилируете его с gen-классом, который компилирует его в файлы классов, которые затем можно положить в банку. Есть много примеров и даже учебных пособий, распространяющихся среди межсетевых экранов. Самый простой и эффективный способ - использовать что-то вроде Ant и написать сборку script, которая компилирует код Clojure и генерирует .jar для вас. В первый раз, когда я это сделал, я подумал, что это будет трудно сделать, но на самом деле это было очень просто. Я просто посмотрел на файлы сборки Clojure и Clojure -Contrib Ant и ссылался на страницы справки Ant для всего, что мне нужно.

Одна вещь, которую я должен упомянуть, это тот факт, что Enclojure/does/фактически создает исполняемые файлы .jar для вас, если вы попросите его сделать это. Я уверен, что более продвинутые вещи, к которым вы привыкли, будут добавлены в будущем. Они, действительно, все еще совершенно новые.

Ответ 4

Я использую оба - Eclipse IDE и плагин против часовой стрелки, который предоставляет REPL. Это особенно приятная комбинация, если вы разрабатываете Java-код вместе с Clojure (как и я).

Мой общий подход:

  • Напишите Clojure код в редакторе
  • Держите REPL открытым для тестирования вещей (Ctrl + Enter - полезный ярлык здесь: он выполняет любой код, выбранный в вашем редакторе в REPL)
  • Используйте общие средства IDE для управления проектами, построения, тестирования, SCM и т.д.

Иногда я также работаю исключительно в REPL. Обычно это лучше для быстрого тестирования. Если мне особенно понравится кусок тестового кода, я просто скопирую его в REPL в свой тестовый набор или вставлю.

Ответ 5

С Eclipse вы можете выполнять модульные тесты (или любую программу) каждый раз при сохранении файла в проекте. Весь процесс занимает меньше секунды - он отлично подходит для разработки, основанной на тестах, и устраняет необходимость вырезания и вставки в REPL для большинства ситуаций. Плюс вы получите, чтобы держать тесты!: -)

Вы хотите использовать cake, чтобы избежать запуска JVM при каждом запуске тестов. Вы можете запустить cake test в командной строке или просто запустить Eclipse для вас при сохранении любого файла в вашем проекте.

У меня это получилось, создав проект с Leiningen, установив cake и установите плагин counterclockwise Eclipse. Чтобы настроить Eclipse для запуска тестов при каждом сохранении, выберите "Project- > Properties- > Builders", нажмите "New", выберите "Программа", вызовите "что-то вроде" запустить тесты ", добавьте путь к cake в разделе" Местоположение ", выберите" Рабочий каталог "для вашего проекта и добавьте test к необязательным аргументам. На вкладке" Параметры сборки "выберите" Во время автостроек".

У меня есть общая идея для этого из книги Джеффа Юнкера "Основы развития Agile Python". Был мужчиной Emacs в течение 20 лет, но этот трюк заставил Eclipse в начале моего рабочего процесса в последнее время.


Обновление: примерно через год я теперь использую Midje с опцией lazytest, чтобы делать то же самое, развиваясь как с Emacs, так и с Eclipse.

Ответ 6

Я создаю проект с Leiningen. Если вы просто хотите немного удалиться, вы можете просто набрать lein repl, и ваш путь к классу проекта будет настроен для этого repl.

На самом деле, хотя я использую Emacs, slime и swank clojure. После перехода к проекту просто введите M-x clojure -jack-in. Это запускает swank-сервер, и slime подключается к нему, и вы получаете ответ в буфере. Разумеется, это не стоит больше, чем выполнять замену оболочки. То, что вы получаете, это возможность писать код в другом буфере, а с помощью keybinding выбрать sexps или более крупные единицы и выполнить их в repl, чтобы увидеть, работает ли он. Также слизь дает вам удобные сочетания клавиш для обычных задач. Для получения дополнительной информации см. Swank- clojure на github.

JohnJ. Вы можете сделать то же самое в Emacs. На самом деле эта фраза, вероятно, является тавтологией.

(add-hook 'after-save-hook etc.

Вот пример после-save-hook для git: https://gist.github.com/449668

Ответ 7

"Когда я смотрю примеры разработки в Clojure, они, похоже, находятся вдоль линий загрузочных файлов в REPL, смотрят, как они работают, редактируют файл, перезагружают, повторяют. Nary класс или банка, создаваемые где угодно...... Я хотел бы услышать некоторые примеры потока работ от людей, которые создали некоторые нетривиальные программы, которые будут использоваться обычными пользователями (а не другими разработчиками), если это возможно.

Примеры Отладка Clojure функций, которые вызывают в java-коде (eclipse), тривиальны, но иллюстрируют, как в eclipse можно связать проекты таким образом, чтобы можно было вызывать clojure/scala функциональность из java.