F # sort de la boîte avec un REPL interactif. C # n'a rien de tel et est en fait un peu difficile à jouer sans mettre en place un projet complet (bien que LINQpad fonctionne et qu'il soit également possible de le faire via PowerShell).
Y a-t-il quelque chose de fondamentalement différent dans les langages qui permet à F # d'avoir la console interactive mais qui rend difficile son implémentation pour C #?
Étant donné que de nombreuses années plus tard, les gens se posent encore cette question, je dois noter qu'il existe désormais de nombreuses options. Vous pouvez utiliser powershell (pré-installé sur toutes les machines Windows modernes) pour jouer avec le framework .Net. Ou vous pouvez utiliser LINQpad pour prototyper du code c # arbitraire . Ou vous pouvez utiliser ScriptCs ou vous pouvez utiliser un environnement en ligne de type jsfiddle comme Complify.net ou Jsil . Beaucoup d'options.
Réponses:
Oui.
F # est un descendant du langage de programmation ML, qui à son tour a été fortement influencé par des langages comme Lisp et Scheme. Ces langues ont été conçues dès le premier jour pour avoir trois belles propriétés.
Tout d'abord, ces langages n'ont pas vraiment de déclarations comme vous les voyez en C #. Au contraire, presque tout est une expression qui a une valeur , donc un mécanisme d'évaluation et d'impression de la valeur a du sens dans presque toutes les situations.
Deuxièmement, ces langages découragent la programmation avec des effets secondaires, vous pouvez donc faire des évaluations sans vous soucier de gâcher l'état global.
Troisièmement, la plupart du travail que vous effectuez dans ces langues est «au plus haut niveau»; il n'y a généralement pas de «classe» ou «espace de noms» ou autre contexte.
En revanche, C # met l'accent sur le flux de contrôle de programmation avec des instructions qui produisent des effets secondaires, et ces instructions sont toujours dans plusieurs conteneurs imbriqués - un espace de noms, une classe, une méthode, etc.
Ce sont donc toutes des choses qui rendent plus difficile pour C # d'avoir un REPL, mais certainement pas impossible . Nous aurions juste besoin de comprendre quelle est la sémantique pour les instructions et les expressions qui apparaissent en dehors du contexte habituel, et quelles sont les sémantiques des mutations qui changent les liaisons de noms, etc.
Parce que l'équipe F # a décidé qu'avoir une boucle REPL était un scénario prioritaire pour eux. Historiquement, l'équipe C # ne l'a pas fait. Les fonctionnalités ne sont pas implémentées à moins que ce ne soient les fonctionnalités les plus prioritaires qui correspondent au budget; jusqu'à présent, un C # REPL n'a pas été en haut de notre liste.
Le projet Roslyn a un REPL C # (et aura éventuellement un REPL VB aussi, mais il n'est pas encore prêt.) Vous pouvez télécharger un aperçu de celui-ci pour voir comment vous l'aimez sur
http://www.microsoft.com/en-us/download/details.aspx?id=27746
la source
Mono a une réplique C #: http://www.mono-project.com/CsharpRepl
Il a même une version GUI qui vous permet de manipuler directement des objets graphiques ou de créer des widgets Gtk #:
la source
Je pense que c'est surtout une chose historique. Les environnements REPL ont toujours été associés aux langages fonctionnels, y compris les langages de la famille ML, et F # reste fidèle à cette tradition. Gardez à l'esprit que l'environnement interactif est quelque chose que les utilisateurs issus de l'arrière-plan fonctionnel tiennent pour acquis, le manque d'une telle fonctionnalité serait désavantagé VS et - par extension - F #.
D'un autre côté, aucune caractéristique de ce type n'est courante dans la communauté OOP.
Il existe cependant des REPL disponibles pour de nombreux langages non fonctionnels, notamment C, Java ou C #. De plus, bien que ce soit loin d'un REPL à part entière, la fonction Autos de VS montre que c'est certainement faisable avec C #.
la source
Je crois que C # est principalement orienté objet. Pour écrire du code encore plus simple, vous devez le diviser en plusieurs classes. Pour utiliser REPL, vous devez écrire beaucoup de code.
F # étant principalement fonctionnel, il n'y a pas ce problème et vous pouvez facilement écrire du code même complexe en un mot simple et le convertir en objet (s) plus tard.
Il est plus facile d'écrire une seule ligne de fonction que d'écrire une classe, qui s'étend sur plusieurs lignes.
la source