2011-02-02 2 views
6

Похоже, что программисты Lisp и Clojure часто разрабатывают программы непосредственно в REPL. ср Clojure Development: IDE or REPL?Почему в Ruby не используется стиль стиля REPL?

Мой вопрос: почему этот подход не является более распространенным в Ruby, через irb? Разве это просто культурная разница или существуют структурные (специфические для языка) причины, по которым REPL-ориентированное развитие чаще встречается с Lisps, чем с такими языками, как Ruby и Python?

ответ

8

Синтаксис Lisp, похоже, очень хорошо подходит для комбинированного подхода REPL-и-source-file. Гораздо проще перемещать фрагменты кода программно, когда текстовые пределы каждой формы ясны.

2

Я использую Emacs для Clojure и Ruby и часто загружаю свои рубиновые модули в irb и интерактивно играю в emacs так же, как и REPL.

+1

Это аккуратный, но это не дает ответа на вопрос. Он не утверждал и не предполагал, что это невозможно (на самом деле, как раз наоборот). Он спросил, почему он не стал более популярным. – Ken

+0

Может быть, они не используют emacs, или намного лучше в Test Driven Development, чем я. – thattommyhall

0

Фактически это is мой способ разработки Ruby.

Обычно я пишу свой код, затем вставляю его части в irb, приспосабливаю их, вставляю снова и так далее.

Не существует ли в Lisps способа напечатать «текущее состояние», в котором вы разработали REPL-стиль в программе? Я думаю, что это невозможно в рубине.

1

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

+1

Это культурная вещь, я думаю. Ruby имеет уникальное наследие быстрого запуска, выход, когда вы закончите, в то время как культ lisp больше связан с живой средой. Но нет никакой технической причины, по которой Руби нельзя было бы использовать таким образом. – technomancy

2

Я думаю, что многое из этого связано с редакторами, которые, как правило, используют рубисты. Я использую vim, у которого нет отличного способа взаимодействия с REPL. Textmate находится в одной лодке (AFAIK). Emacs, Dr Racket и т. Д., С другой стороны, у всех есть замечательный механизм взаимодействия с REPL. Я считаю, что Лисперс будет использовать эти типы редакторов/сред.

+0

slime.vim приличный: http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/ –

+0

@Ben Mabey: это выглядит действительно круто. Я должен это проверить. – cam

1

Может быть это поможет:

  • interactive_editor является IRB расширение, которое добавляет в способности открыть Vim, Emacs, MacVim, нано и TextMate и сделать редактирование IRB буфера.
  • irbtools включает в себя interactive_editor наряду с некоторыми другими приятными дополнениями.
  • Utility Belt - еще одна коллекция драгоценных камней IRB, расширяющая ее функциональность, а также включает в себя что-то, что позволяет редактировать буфер.

Я старая школа, поэтому у меня обычно есть редактор, открытый и irb работает в терминальном окне; Старые привычки умирают, вы знаете. Я использую irbtools, но намерен переключиться на Utility Belt, чтобы увидеть, как он себя чувствует в сравнении.

0

Я не разработчик Ruby. Тем не менее, я считаю, что причиной является Пропорциональная прозрачность.

Большинство идиоматических функций Clojure являются чистыми функциями, подчиняющимися ссылочной прозрачности. В результате я лично считаю намного проще тестировать функции, которые являются независимыми автономными блоками, и они несколько обеспечивают цель модульных тестов. Clojure, являющийся очень упрямым языком, предпочитает, чтобы большинство функций были без гражданства. Он дает четкое различие между кодом, в котором происходят побочные эффекты, а также состояния поддерживаются с использованием различных других альтернатив, таких как var, refs, agents, atoms и т. Д., Сохраняя большую часть вашего кода чистым, побочным эффектом свободным и ссылочным прозрачным.

Я чувствую, что любой код, структурированный вокруг ссылочно прозрачных функций и функций без гражданства, автоматически предоставит пользу от REPL, будь то в Ruby или любом другом языке программирования.

Хотя для большинства практических целей CLI, предоставленный другим языком, будет одинаково полезен, однако концепция Read, Eval, Print and Loop не то же самое в LISP, как и на любом другом языке. Любой язык non-homoiconic не имеет фазы READ, и это будет просто чтение текстового представления или строки, однако в LISP фаза READ фактически может анализировать в любой форме s-expression, которую вы бросаете на нее. Более подробную информацию о нем см ниже 2 ответов:

Is Lisp the only language with REPL?

How is Lisp's read-eval-print loop different than Python's?

Смежные вопросы