Один ответ, чтобы связать их всех? - PullRequest
27 голосов
/ 12 апреля 2011

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

  • Чтение: принять пользовательский ввод
  • Оценить: передать входные данные некоторой среде выполнения для обработки
  • Печать: вывод результатов на экран
  • Цикл: ожидание следующего пользовательского ввода

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

  • Приложение командной строки Linux
  • Бесконечная история доступна через стрелку вверх
  • Возможность редактировать предыдущие команды перед повторным запуском
  • ctrl-r для поиска в истории как у bash
  • Несколько сессий в одном REPL, так что я могу легко переключаться между ними

и более оптимистично

  • подсветка синтаксиса, контекстно-зависимое завершение кода

Это существует?

Ответы [ 3 ]

31 голосов
/ 12 апреля 2011

Bash ничего не знает о C-r: он использует readline, который делает это, а также историю со стрелками вверх. Похоже, что REPL, который вы ищете, это readline? Просто добавьте к rlwrap команду, от которой вы хотите получить поведение, похожее на REPL (установите его, если у вас его нет - это здорово), и вам следует идти вперед.

$ rlwrap java -jar clojure.jar
5 голосов
/ 13 апреля 2011

Scala 2.9 REPL будет иметь поддержку обратного поиска CTRL-R. Ночные сборки уже есть. Некоторое время было выполнено контекстно-зависимое завершение вкладки (хотя его можно улучшить).

При использовании scala с rlwrap используйте флаг -Xnojline :

rlwrap scala -Xnojline

Это предотвращает вмешательство jline в rlwrap. Тогда rlwrap может свободно использовать readline для реализации движений курсора и истории , но это до того, как интерпретаторы увидят строку, и вы не получите завершение с учетом языка .

Я надеюсь, что Scala REPL будет улучшен.

  • Существует компилятор презентаций, который является частью 2.9, который, я думаю, используется для таких вещей, как выделение ошибок и завершение.
  • jline, используемый в scala 2.9, способен использовать цвета ANSI, используя jansi

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

2 голосов
/ 14 апреля 2011

Строго говоря, не REPL, Seco предлагает оболочку в стиле ноутбука, которая может оценивать выражения на любом языке с привязкой JSR-223 .Этот быстро растущий список включает в себя такие языки, как Javascript, Scheme, Python, Ruby, Clojure, Groovy и Prolog.

Вдохновение Seco, Mathematica блокнот для ноутбука, можетв принципе оценивают выражения на любом языке, хотя для этого требуется некоторая работа .

...