Ensamblaje fsi.exe: ¿Alguien sabe cómo incrustarlo?

Lector de mucho tiempo, primera pregunta. fsi.exe es un ejecutable .NET y, por lo tanto, contiene su propio ensamblado completo con todos los métodos deliciosos y todo lo que fsi usa para ejecutar scripts F #.

Mirando el ensamblado en .NET Reflector (elija su clase, pero Shell es el mejor ejemplo) revela un montón de nombres basura * que parecen funciones C ++ decoradas (por ejemplo, de Dependency Walker). Incidentalmente y un poco fuera de lugar, los ensamblados de F # se compilan de la misma manera, con muchos nombres basura *, lo que me lleva a pensar que fsi.exe se escribió en F #, ¿quizás como una prueba de usabilidad?

De todos modos, aquí está mi pregunta: ¿alguien ha profundizado en fsi.exe y ha descubierto cómo incrustarlo en una aplicación .NET? Porque me gustaría usar F # como lenguaje de secuencias de comandos, pero los programas se compilan en programas (sorpresa) y las secuencias de comandos deben ser ejecutadas por fsi.exe, lo cual es inaceptable en mi dominio (necesito una VM persistente). No espero una guía práctica sobre el uso de fsi.exe, pero tengo curiosidad por saber si alguien ha jugado con él y, de ser así, ¿qué ha descubierto sobre cómo funciona?

Gracias por su tiempo.

* Basura de un vistazo casual. Obviamente, están formateados de esta manera en particular por una razón particular que está debajo del capó.

preguntado el 09 de enero de 11 a las 01:01

Entonces, básicamente, quieres eval? -

Me pregunto, ¿la licencia de F # permite incrustar fsi en primer lugar? -

@Juliet: ¿Por qué sería un problema de licencia? -

Ya no, es de código abierto no con una licencia de Apache. Cuál es la solución, puede usar la fuente para incrustarla. -

@Martinho: No, quiero un motor de secuencias de comandos. -

2 Respuestas

Por lo que sé, fsi.exe no expone ninguna API que pueda utilizar para incrustarla en su aplicación (por ejemplo, para implementar secuencias de comandos). Creo que hay esencialmente dos opciones:

  • Si desea utilizar los existentes fsi.exe directamente, la única forma es iniciarlo usando .NET Process clase y comunicarse con él de alguna manera. Esto debería ser factible: puede enviar comandos al proceso utilizando la entrada estándar. Para volver a leer la salida, puede usar la salida estándar, pero esto le brinda solo información limitada. Probablemente sería posible utilizar .NET Remoting para comunicarse entre fsi.exe y su aplicación (por ejemplo, sus objetos cargados en el contexto del script en FSI enviarían información a su aplicación a través de Remoting).

  • Otra alternativa es utilizar el lanzamiento de código abierto de F # y modificar fsi.exe para exponer toda la información que necesita como API. Esto requiere más esfuerzo para comprender cómo fsi.exe funciona, pero debería ser factible. Probablemente no necesite tantas adiciones: el estado mantenido por FSI contiene cosas como variables globales.

Con respecto a la licencia, probablemente no pueda usar fsi.exe distribuido con Visual Studio. No estoy seguro de fsi.exe que viene con la versión CTP. Compilarlo de la fuente (disponible Aquí) definitivamente estará bien (porque tiene una versión de código abierto).

Respondido el 09 de enero de 11 a las 12:01

Gracias por la entrada, Tomas. Después de mirar el paquete de energía de F #, de hecho veo que estaba escrito en F #, lo cual es deliciosamente irónico. Estoy en el proceso de estudiar detenidamente la fuente. Probablemente esto sea demasiado avanzado para que me adapte, pero de todos modos es interesante. Me encantaría calificarlo por la respuesta completa, pero no tengo el representante para ello. - tom

¿Es posible incrustarlo de alguna manera en otro AppDomain? De esa manera, no tendrá la sobrecarga de otro proceso .net y tal vez sea más fácil de administrar arquitectónicamente. - Ashley Aberneithy

@ashley - Desafortunadamente no, por el momento debe iniciarse como un proceso separado. - Tomas Petricek

Gracias Tomas, ¿sabes si hay planes para hacer este cambio? Eso me ahorrará hacer un cambio en la fuente de FSI y volver a compilar - Ashley Aberneithy

¿Alguna actualización sobre el estado de una evaluación en F #? ¿Alguna nueva posibilidad además de ejecutar en un proceso separado? - Doug Blank

Respondido el 21 de Septiembre de 12 a las 03:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.