Почему разработка в стиле REPL более распространена в Ruby? - PullRequest
6 голосов
/ 02 февраля 2011

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

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

Ответы [ 7 ]

8 голосов
/ 03 февраля 2011

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

2 голосов
/ 03 февраля 2011

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

1 голос
/ 03 февраля 2011

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

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

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

1 голос
/ 03 февраля 2011

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

0 голосов
/ 22 августа 2016

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

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

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

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

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

Чем цикл чтения-eval-print отличается от цикла Python?

0 голосов
/ 03 февраля 2011

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

0 голосов
/ 03 февраля 2011

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

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

В Лиспе нет способа распечатать "текущее состояние", которое вы разработали в программе в стиле REPL?Я думаю, что это невозможно в ruby.

...