【发布时间】:2011-02-15 16:58:43
【问题描述】:
我想将 F# REPL 添加到我的应用程序以进行实时调试。我正在查看fsi.exe(F# Interactive)的源代码,其中有很多东西看起来像是在使用 F# 编译器内部结构。因此,我无法在我们的应用程序上下文中编译相同的代码。
是否有一个很好的简单示例在某处实现 F# REPL?我希望这很容易。
【问题讨论】:
我想将 F# REPL 添加到我的应用程序以进行实时调试。我正在查看fsi.exe(F# Interactive)的源代码,其中有很多东西看起来像是在使用 F# 编译器内部结构。因此,我无法在我们的应用程序上下文中编译相同的代码。
是否有一个很好的简单示例在某处实现 F# REPL?我希望这很容易。
【问题讨论】:
简短的回答是,F#(很遗憾)目前不提供任何 API 来在您的应用程序中托管 F# Interactive。很多人都在问这个问题 - 例如,请参阅 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!)
【讨论】:
我写了一系列关于在内部使用开源 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
最后一篇文章即将发布。
【讨论】: