我想用 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
刚刚输入了五秒钟,"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 是如何做到这一点的?我试过用谷歌搜索,甚至快速浏览了它的源代码,但不知道它是如何完成的。我认为它必须涉及一些终端控制序列?