2013-04-15 2 views
3

Ну, я знаю, что это глупый вопрос, но подумайте над ним на секунду.Почему нет режима Repl для Java

Почему мы не можем использовать режим замены или тип оболочки для Java. Скажем, я просто хочу сделать Math.max(2,3), чтобы получить вывод 3. Он может быть похож на режим Scala repl, где по умолчанию обрабатываются класс и основные объявления (он продолжается до App) и оценивается только выражение.

Технически:

  1. Существует интерпретатор отстаем может выполнить его - Если Scala и Groovy можно, то это означает, что JVM не является серьезной проблемой
  2. Если Javac причина, говорят, что мы удалить все оптимизации и он напрямую преобразует строку за строкой строго в java-байтовый код, тогда должен быть выход. Вывод типа может быть не очень сильным, чтобы отображать много информации, но, как минимум, вывод методов может быть показан. Вероятно, javac может быть немного изменен для таких случаев.
  3. Ex: В отладчике мы привязываем точки останова к строке, а затем выполняем вперед. Аналогичная стратегия может быть применена

Было бы здорово иметь оболочку по умолчанию для каждого процесса JVM, где в перспективе можно получить доступ или установить некоторые скажем статические переменные и иметь живую информацию.

Все это было бы подумал прочь, но почему не она была принята большинством (есть несколько реализаций с открытым исходным кодом, хотя)

ответ

4

Это более или менее точно, что BeanShell делает.

+0

Он был принят в качестве JSR-274, но мне интересно, почему не она была включена еще – Jatin

+0

материал, который принимается не обязательно включены в Java SE или EE или МЕНЯ. JSR - всего лишь способ стандартизации вещей. В этом случае причина, по которой он не является частью Java SE, заключается в том, что подавляющее большинство приложений Java не нуждаются в таких вещах. вы добавляете мегабайты (в основном) бесполезные вещи для каждого будущего установщика Java JRE ... на бесконечность, –

2

Отображаемое представление в Eclipse обеспечивает много удобного поведения в этой области, с завершением команды, доступом к запущенному стеке приложений и выходом консоли через System.out.

2

Как и @Sean, вы можете использовать оболочку bean в режиме repl.

java -cp ./bsh-2.0b4.jar bsh.Interpreter 
BeanShell 2.0b4 - by Pat Niemeyer ([email protected]) 
bsh % System.out.println("Hello World"); 
Hello World 

В качестве альтернативы, менее известная Display вкладка на Eclipse IDE может выполнить произвольный код на Java и вычисления выражений на лету. Ctrl+U выполняет выражение, и Ctrl+Shift+I оценивает их. Это не режим замены, но приближается.

Смежные вопросы