REPL¶
OnionのREPLは onion.tools.Repl によって実装され、言語の主要な対話型シェルです。
REPLの起動¶
以下のいずれかの方法で起動できます。
主な機能¶
- 継続プロンプト付きの複数行入力
- セッションスコープ内での
module、import、val、var、def、クラス定義 - 評価済み式の永続的な
resNバインディング - JLine 3 による履歴管理とシンタックスハイライト
- 同一ソーススナップショットの再検査時に利用されるセッションコンパイルキャッシュ
コマンド¶
:help ヘルプを表示
:quit / :exit / :q REPLを終了
:clear ターミナルをクリア
:history 入力履歴を表示
:imports 現在のモジュール/インポートを表示
:type <expr> 式の推論型を表示
:ast <expr> 式の構文解析ASTを出力
:typed <expr> 式の型付きAST概要を出力
:bytecode <expr> 式の生成JVMバイトコードを出力
:load <file> ファイルを現在のセッションに読み込む
:time [on|off] コンパイル/評価時間の計測を切り替え
:classpath 有効なクラスパスを表示
:reset セッションをリセット
:paste ペーストモードに入る
例¶
結果と resN¶
複数行定義¶
onion> def factorial(n: Int): Int {
| if n <= 1 {
| return 1;
| } else {
| return n * factorial(n - 1);
| }
| }
型とバイトコードの確認¶
onion> :type Math::max(1, 2)
Math::max(1, 2): Int
onion> :bytecode 1 + 2
== <generated class> ==
...
ファイルの読み込み¶
注意事項¶
onion replとonion-replは同じ実装を起動します。:timeは、コンパイラのパフォーマンス調査中にREPLのコンパイル/評価レイテンシを比較するのに便利です。:bytecodeはASMトレースでクラス出力を表示するため、ヘルパークラスやクロージャクラスが主要な生成クラスと一緒に表示されることがあります。