2013-12-09 37 views
4

我如何將fsi REPL包含在我的腳本應用程序中?F#交互式應用程序是否爲開源代碼?

F# PowerPack似乎沒有任何東西。

+2

是的,這是。它的來源是在GitHub上:https://github.com/fsharp/fsharp/tree/master/src/fsharp/fsi –

+0

不知道爲什麼這會被擱置,我還會問這個問題? – AwkwardCoder

+2

Ramon給出的鏈接的另一種替代方法是[FSharp.Compiler.Service](https://github.com/fsharp/FSharp.Compiler.Service),該方法公開了類似於您的場景中所需的額外功能。 –

回答

4

一個辦法是學習FSI的來源可以從問題的評論中提到的幾個存儲庫中獲得,然後以某種方式將其功能暴露給您的應用程序通過修改來源(改變能見度等)。這種方式顯然是陡峭而痛苦的。

幸運的是,這方面的一些工作已經按照FSharp.Compiler.Service的方法完成了,所以另一種方式可能是將FSI作爲標準化服務嵌入到您的應用程序中。以下presentation由Don Syme和Tomas Petricek在NYC 2013 SkillMatters日期間提供了有關嵌入FSI作爲服務的詳細信息。

呈現提供了一個鏈接Microsoft.FSharp.Compiler.Interactive.Shell命名空間內(實驗)實施FSI服務,這樣的嵌入可以是如在下面的代碼段一樣簡單:

open Microsoft.FSharp.Compiler.Interactive.Shell 
..... 
let fsi = FsiEvaluationSession([| "fsi.exe"; "--noninteractive"|], inStream, outStream, errStream) 
..... 
match fsi.EvalExpression(codeLines) with 
    | Some value -> value.ReflectionValue 
    | None -> raise (System.ArgumentException("fsi cannot evaluate expression")) 
+0

此代碼尚未將其添加到FSharp.Compiler.Service(AFAIK),但它在我的本地分支中可用:https://github.com/tpetricek/fsharp/tree/fs-extend。請參閱InteractiveService示例:https://github.com/tpetricek/fsharp/tree/fs-extend/samples/InteractiveService –

相關問題