One interesting property of both stdin/stdout based REPLs and RPC based REPLs is that they need to support asynchronous events. In both these programs, I don't need to wait until the function is done to see the output printed. It's not sufficient to read-eval-wait-print-loop.