Один REPL, чтобы связать их все?

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

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

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

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

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

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

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

3 ответа

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

$ rlwrap java -jar clojure.jar


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. Реально, это потребует значительных усилий, и добавление этих функций, безусловно, является более низким приоритетом, чем, например, улучшение поддержки eclipse... Кроме того, может возникнуть смысл добавить поддержку REPL в eclipse.


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

Seco inspiration, Mathematica front-end для ноутбука, может в принципе оценивать выражения на любом языке, хотя требуется некоторые работы, чтобы это произошло.

licensed under cc by-sa 3.0 with attribution.