Почему разработка в стиле REPL не так распространена в Ruby?

Похоже, программисты на Lisp и Clojure часто пишут программы прямо в REPL. ср. Разработка на Clojure: IDE или REPL?

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


person dan    schedule 02.02.2011    source источник


Ответы (7)


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

person Svante    schedule 02.02.2011

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

person thattommyhall    schedule 02.02.2011
comment
Это аккуратно, но это не отвечает на вопрос. Он не утверждал и не предполагал, что это невозможно (на самом деле, как раз наоборот). Он спросил, почему это не стало более популярным. - person Ken; 03.02.2011
comment
Может быть, они не используют emacs или лучше меня разбираются в разработке через тестирование. - person thattommyhall; 03.02.2011

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

person cam    schedule 02.02.2011
comment
slime.vim приличный: technotales.wordpress.com/2007 /10/03/like-slime-for-vim - person Ben Mabey; 03.02.2011
comment
@Ben Mabey: это выглядит очень круто. Я должен это проверить. - person cam; 03.02.2011

Возможно, это поможет:

  • interactive_editor — это расширение IRB, которое добавляет возможность открывать vim, emacs, MacVim, nano и TextMate и делать редактирование буфера irb.
  • irbtools включает в себя интерактивный редактор вместе с некоторыми другими приятными дополнениями.
  • Utility Belt — это еще одна коллекция жемчужин IRB, расширяющая его функциональность, а также позволяющая редактировать буфер.

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

person the Tin Man    schedule 03.02.2011

На самом деле это это мой способ разработки Ruby.

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

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

person Fabian Zeindl    schedule 02.02.2011

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

person Andrew Grimm    schedule 02.02.2011
comment
Я думаю, это культурная вещь. У Ruby есть наследие unix, заключающееся в быстром запуске и выходе, когда вы закончите, тогда как культура lisp больше ориентирована на живую среду. Но нет никаких технических причин, по которым Ruby нельзя было бы использовать таким образом. - person ; 03.02.2011

Я не разработчик Ruby. Однако я чувствую, что причина в ссылочной прозрачности.

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

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

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

Является ли Lisp единственным языком с REPL?

Чем цикл чтения-вычисления-печати в Lisp отличается от цикла Python ?

person Abhiroop Sarkar    schedule 22.08.2016