F # sale de la caja con un REPL interactivo. C # no tiene nada de eso y, de hecho, es un poco difícil de jugar sin configurar un proyecto completo (aunque LINQpad funciona y también es posible hacerlo a través de powershell).
¿Hay algo fundamentalmente diferente en los lenguajes que permite que F # tenga la consola interactiva pero que dificulta su implementación para C #?
Como muchos años después la gente todavía está llegando a esta pregunta, debo señalar que ahora hay muchas opciones. Puede usar powershell (preinstalado en todas las máquinas modernas de Windows) para jugar con el marco .Net. O puede usar LINQpad para crear un prototipo de código arbitrario de C # . O puede usar ScriptCs o puede usar un entorno de tipo jsfiddle en línea como Complify.net o Jsil . Muchas opciones
Respuestas:
Sí.
F # es un descendiente del lenguaje de programación ML, que a su vez estuvo fuertemente influenciado por lenguajes como Lisp y Scheme. Esos idiomas fueron diseñados desde el primer día para tener tres propiedades agradables.
Primero, esos lenguajes realmente no tienen declaraciones de la forma en que piensas en C #. Por el contrario, casi todo es una expresión que tiene un valor , por lo que un mecanismo de evaluar y luego imprimir el valor tiene sentido en casi todas las situaciones.
En segundo lugar, esos lenguajes desalientan la programación con efectos secundarios, por lo que puede hacer evaluaciones sin preocuparse de que vaya a estar arruinando el estado global.
En tercer lugar, la mayor parte del trabajo que realiza en esos idiomas es "en el nivel superior"; normalmente no hay una "clase" o un "espacio de nombres" encerrados u otro contexto.
Por el contrario, C # enfatiza el flujo de control de programación con declaraciones que producen efectos secundarios, y esas declaraciones siempre están en múltiples contenedores anidados: un espacio de nombres, una clase, un método, etc.
Así que estas son todas las cosas que hacen que sea más difícil para C # para tener un REPL, pero ciertamente no es imposible . Solo tendríamos que averiguar cuál es la semántica de las declaraciones y expresiones que aparecen fuera del contexto habitual, y cuál es la semántica de las mutaciones que cambian los enlaces de nombres, y así sucesivamente.
Porque el equipo F # decidió que tener un ciclo REPL era un escenario de prioridad uno para ellos. El equipo de C # históricamente no lo ha hecho. Las características no se implementan a menos que sean las características de mayor prioridad que se ajustan al presupuesto; hasta ahora, un C # REPL no ha estado en la parte superior de nuestra lista.
El proyecto Roslyn tiene un C # REPL (y eventualmente también tendrá un VB REPL, pero aún no está listo). Puede descargar una versión preliminar para ver cómo le gusta en
http://www.microsoft.com/en-us/download/details.aspx?id=27746
fuente
Mono tiene una respuesta C #: http://www.mono-project.com/CsharpRepl
Incluso tiene una versión GUI que le permite manipular directamente objetos gráficos o crear widgets Gtk #:
fuente
Creo que es sobre todo una cosa histórica. Los entornos REPL siempre se han asociado con lenguajes funcionales, incluidos los lenguajes familiares ML, y F # se mantiene fiel a esa tradición. Tenga en cuenta que el entorno interactivo es algo que los usuarios que provienen de antecedentes funcionales dan por sentado, la falta de dicha característica pondría a VS y, por extensión, a F #, en desventaja.
Por otro lado, tal característica no ha sido común en la comunidad OOP.
Sin embargo, hay REPL disponibles para muchos lenguajes no funcionales, incluidos C, Java o C #. Además, si bien está muy lejos de un REPL completo, la función Autos en VS muestra que ciertamente es factible con C #.
fuente
Creo que C # está principalmente orientado a objetos. Para escribir incluso el código más simple, debe dividirlo en varias clases. Para usar REPL, necesitaría escribir mucho código.
F #, que es principalmente funcional, no tiene este problema y puede escribir fácilmente incluso código complejo en fasshion directo y convertirlo en objeto / s más tarde.
Es más fácil escribir una sola línea de función que escribir una clase, que abarca muchas líneas.
fuente