如何实现F#读取评估打印循环(REPL)?

pau*_*doo 7 f# read-eval-print-loop

我想在我的应用程序中添加一个F#REPL以进行实时调试.我正在查看fsi.exe(F#Interactive)的源代码,并且有很多东西正在进行中,看起来像是在使用F#编译器内部.因此,我不能在我们的应用程序的上下文中编译相同的代码.

在某处实现F#REPL有一个很好的简单例子吗?我希望这相当容易.

Tom*_*cek 5

简短的回答是F#(不幸的是)目前不提供任何用于在您的应用程序中托管F#Interactive的API.有很多人要求这样做 - 例如参见这个问题.

你可以做的事情基本上有两件事:

  • 您可以修改开源版本并编译fsi.exe为一些提供所需API的DLL库.这不是一个简单的任务--F#Interactive与编译器紧密绑定(它编译你动态输入的代码),但它应该可以将实现REPL的类型封装成你可以调用的某种类型(但是你不能只采取一些文件出来 - 你需要编译整个F#才能使其工作).

  • 您可以fsi.exe像Visual Studio一样作为单独的进程运行,并使用标准输入/输出向其发送命令.fsi.exe启动时加载库可以获得更大的灵活性.该库可以使用.NET Remoting连接回您的应用程序并公开一些数据.

不幸的是,这两个选项可能是您目前唯一能做的事情.

编辑 我以为我已经在某处(也许是在电子邮件中)回答了这个问题,但是
找不到它!感谢Mauricio发现完全重复(即使我的重复答案...... Doh!)