Erlang 以外の言語で REPL を実装したいと考えており、対話型erl
(Eshell) プロンプトのこの機能に非常に興味をそそられています。
1> spawn(fun() -> timer:sleep(5000), io:format("~p~n", ["later"]) end).
<0.34.0>
2> i can ty
ここで行ったことは、最終的に端末に書き込むバックグラウンド プロセスを生成することです。その間、i can ty
ちょうど 5 秒が経過したところで入力したところ、 の"later"
すぐ上に挿入され2>
、結果は次のようになりました。
1> spawn(fun() -> timer:sleep(5000), io:format("~p~n", ["later"]) end).
<0.34.0>
"later"
2> i can type...
Bash や Node.js などの他の言語では、次のような結果になります。
2> i can ty"later"
pe...
Erlang はどのようにそれを行うのでしょうか? 私はググってみたり、そのソースコードをざっと見たりしましたが、これがどのように達成されるかを見つけることができませんでした. いくつかの端末制御シーケンスが含まれている必要があると思いますか?