Один REPL, чтобы связать их все?
Я хотел бы знать, есть ли REPL, который не зависит от языка. Я провожу много времени, погружаясь в REPL (в основном для Clojure, Scala и Haskell), и связанные с ними все в большей или меньшей степени меня расстраивают. Похоже, что работа REPL довольно общая, поскольку они:
- Чтение: введите пользовательский ввод
- Вычислить: передать ввод в некоторую среду выполнения для обработки
- Печать: печать результатов на экране
- Loop: подождите следующего входа пользователя
Я не понимаю, почему не должно быть какой-то языковой REPL, но я не смог найти такую вещь. Некоторые вещи, которые мне бы хотелось в моем идеальном REPL:
- Linux-приложение командной строки
- Бесконечная история, доступная с помощью стрелки вверх.
- Возможность редактирования предыдущих команд перед повторным запуском
- ctrl-r для поиска истории как bash имеет
- Несколько сеансов в одном REPL, поэтому я могу переключаться между ними легко
И более оптимистично
- подсветка синтаксиса, завершение контекстно-зависимого кода
Это существует?
Ответы
Ответ 1
Bash ничего не знает о C-r
: он использует readline, который делает это, а также историю всплывающих окон для него. Похоже, что REPL, который вы ищете, является readline? Просто префикс команды, с которой вы хотите работать с REPL-подобным образом, с помощью rlwrap (установите его, если у вас его нет - это здорово), и вам должно быть хорошо идти.
$ rlwrap java -jar clojure.jar
Ответ 2
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.
Ответ 3
В то время как не строго говоря, REPL, Seco предлагает оболочку в стиле ноутбука, которая может оценивать выражения на любом языке с помощью JSR-223. Этот быстро растущий список включает языки, такие как Javascript, Scheme, Python, Ruby, Clojure, Groovy и Prolog.
Seco inspiration, Mathematica front-end для ноутбука, может в принципе оценивать выражения на любом языке, хотя требуется некоторые работы, чтобы это произошло.