6

長年の読者、非常に最初の質問。fsi.exeは.NET実行可能ファイルであるため、fsiがF#スクリプトを実行するために使用するすべてのおいしいメソッドとその他を備えた独自のアセンブリが含まれています。

.NET Reflectorでアセンブリを見ると(クラスを選択しますが、Shellが最良の例です)、装飾されたC ++関数(たとえば、Dependency Walkerから)のように見える一連のガベージ*名がわかります。ちなみに、少しポイントを外すと、F#アセンブリはほとんど同じようにコンパイルされ、多くのガベージ*名が使用されます。これにより、fsi.exeはおそらく使いやすさの証明としてF#で記述されていると思います。

とにかく、ここに私の質問があります:誰かがfsi.exeを掘り下げて、それを.NETアプリケーションに埋め込む方法を理解しましたか?スクリプト言語としてF#を使用したいのですが、プログラムは(サプライズ)プログラムにコンパイルされ、スクリプトはfsi.exeで実行する必要があります。これは、私のドメインでは受け入れられません(永続的なVMが必要です)。fsi.exeの使用に関するハウツーガイドは期待していませんが、誰かがfsi.exeを使ったことがあるかどうか知りたいのですが、もしそうなら、それがどのように機能するかについて何を発見しましたか?

御時間ありがとうございます。

*一目でゴミ。明らかに、それらはボンネットの下にある特定の理由のためにこの特定の方法でフォーマットされています。

4

2 に答える 2

6

私の知る限りfsi.exe、アプリケーションに埋め込むために使用できる API は公開されていません (スクリプトの実装など)。基本的に次の 2 つのオプションがあると思います。

  • 既存のものを直接使用したい場合は、.NETクラスをfsi.exe使用して起動し、何らかの方法で通信するしかありません。Processこれは実行可能です。標準入力を使用してコマンドをプロセスに送信できます。出力を読み戻すには、標準出力を使用できますが、これでは限られた情報しか得られません。おそらく、.NET Remoting を使用fsi.exeしてアプリケーションとの間で通信することができます (たとえば、FSI のスクリプト コンテキストにロードされたオブジェクトは、Remoting を介してアプリケーションに情報を送信します)。

  • もう 1 つの方法は、F#のオープン ソース リリースfsi.exeを使用し、必要なすべての情報を API として公開するように変更することです。これには、どのように機能するかを理解するためにより多くの努力が必要fsi.exeですが、実行可能なはずです。おそらく、それほど多くの追加は必要ありません。FSI によって維持される状態には、グローバル変数のようなものが含まれています。

ライセンスについて - おそらくfsi.exeVisual Studio で配布されたものを使用することはできません。fsi.exeそれが CTP リリースに付属しているかどうかはわかりません。ソース (ここから入手可能) からコンパイルすることは間違いなく問題ありません (オープンソース リリースがあるため)。

于 2011-01-09T09:21:44.500 に答える
1

ここにいくつかの作業コードがあります:

http://www.codeproject.com/Articles/241577/Embedded-scripting-using-Fsharp

于 2012-09-20T23:11:00.897 に答える