我想在我的应用程序中添加一个 F# REPL 以进行实时调试。我正在查看fsi.exe
(F# Interactive) 的源代码,并且有很多东西看起来像是在使用 F# 编译器内部。因此,我无法在我们的应用程序上下文中编译相同的代码。
是否有一个很好的简单示例在某处实现 F# REPL?我希望这相当容易。
我想在我的应用程序中添加一个 F# REPL 以进行实时调试。我正在查看fsi.exe
(F# Interactive) 的源代码,并且有很多东西看起来像是在使用 F# 编译器内部。因此,我无法在我们的应用程序上下文中编译相同的代码。
是否有一个很好的简单示例在某处实现 F# REPL?我希望这相当容易。
简短的回答是 F#(不幸的是)目前不提供任何 API 来在您的应用程序中托管 F# Interactive。有很多人要求这个 - 例如看这个SO question。
基本上你可以做两件事:
您可以修改开源版本并编译fsi.exe
为一些 DLL 库,以提供您需要的 API。这不是一个简单的任务 - F# Interactive 与编译器紧密绑定(它编译您即时输入的代码),但是将实现 REPL 的类型封装成您可以调用的某种类型应该是可行的(但您不能只取一些从中提取文件 - 您需要编译整个 F# 才能使其正常工作)。
您可以fsi.exe
像 Visual Studio 那样作为单独的进程运行,并使用标准输入/输出向它发送命令。fsi.exe
您可以通过在启动时加载库来获得更多灵活性。该库可以使用 .NET Remoting 连接回您的应用程序并公开一些数据。
不幸的是,这两个选项可能是您目前唯一可以做的事情。
编辑 我在想我已经在某个地方(可能在电子邮件中)回答了这个问题,但
找不到它!感谢 Mauricio,他找到了完全相同的副本(即使我的答案是重复的……Doh!)
我写了一系列关于在内部使用开源 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
最后的帖子很快就会跟进。