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

时间:2011-02-15 16:58:44

标签: f# read-eval-print-loop

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

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

2 个答案:

答案 0 :(得分:5)

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

基本上你可以做两件事:

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

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

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

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

答案 1 :(得分:1)

我写了一系列关于在内部使用开源F#交互式可执行文件和WPF应用程序的博客文章。

代码库可在github上找到 - https://github.com/oriches/Simple.Wpf.FSharp.Repl

一系列博客文章是:

http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-1.html

http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-2.html

http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-3.html

最后的帖子即将推出。