8

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

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

4

2 回答 2

6

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

基本上你可以做两件事:

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

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

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

编辑 我在想我已经在某个地方(可能在电子邮件中)回答了这个问题,但
找不到它!感谢 Mauricio,他找到了完全相同的副本(即使我的答案是重复的……Doh!)

于 2011-02-15T17:32:57.413 回答
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

最后的帖子很快就会跟进。

于 2014-01-03T17:03:54.860 回答