2011-02-15 11 views
7

Me gustaría agregar un F # REPL a mi aplicación para depuración en vivo. Estoy mirando el código fuente para fsi.exe (F # Interactive) y hay un montón de cosas sucediendo que parece que hurga con el compilador F # interno. No puedo obtener este mismo código para compilar en el contexto de nuestra aplicación debido a esto.¿Cómo implemento un bucle de lectura Eval de F # (REPL)?

¿Hay algún buen ejemplo simple de implementar un F # REPL en alguna parte? Hubiera esperado que esto fuera bastante fácil.

+3

duplicado: http://stackoverflow.com/questions/1563024/embedding-f-interactive http://stackoverflow.com/questions/4637181/fsi-exe-assembly-anyone-know-how-to-embed- eso –

Respuesta

5

La respuesta corta es que F # (desafortunadamente) actualmente no proporciona ninguna API para alojar F # Interactive en sus aplicaciones. Hay muchas personas que preguntan por esto; ver, por ejemplo, este SO question.

Fundamentalmente, hay dos cosas que podría hacer al respecto:

  • se puede modificar el open-source release y compilar fsi.exe como algunos librería DLL que proporcionaría la API que necesita. Esta no es una tarea simple: F # Interactive está estrechamente vinculado con el compilador (compila el código que ingresa sobre la marcha), pero debería ser posible encapsular los tipos que implementan REPL en algún tipo que pueda llamar (Pero no puede simplemente tomar algunos archívelo, necesita compilar F # completo para que funcione).

  • Puede ejecutar fsi.exe como un proceso separado como lo hace Visual Studio y enviarle comandos utilizando la entrada/salida estándar. Puede obtener más flexibilidad cargando su biblioteca cuando comience fsi.exe. La biblioteca podría usar .NET Remoting para conectarse nuevamente a su aplicación y exponer algunos datos.

Desafortunadamente, estas dos opciones son probablemente las únicas cosas que puede hacer por el momento.

EDITAREstaba pensando que ya he respondido a esta pregunta en alguna parte (tal vez en el correo electrónico), pero no
pude encontrarlo! Gracias a Mauricio que encontró el exact duplicate (incluso con mi respuesta duplicada ... Doh!)

1

He escrito una serie de publicaciones en el blog sobre el uso del ejecutable interactivo de código abierto F # dentro y la aplicación WPF.

La base de código está disponible en GitHub - https://github.com/oriches/Simple.Wpf.FSharp.Repl

La serie de publicaciones en el blog son:

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

El puesto final es de los diferentes eventos .