F # wird mit einem interaktiven REPL ausgeliefert. C # hat nichts dergleichen und ist in der Tat ein bisschen schwierig zu spielen, ohne ein vollständiges Projekt einzurichten (obwohl LINQpad funktioniert und es auch über Powershell möglich ist).
Gibt es etwas grundlegend anderes an den Sprachen, das es F # ermöglicht, die interaktive Konsole zu haben, es aber schwierig macht, sie für C # zu implementieren?
Da sich viele Jahre später immer noch Menschen mit dieser Frage befassen, sollte ich beachten, dass es jetzt viele Möglichkeiten gibt. Sie können Powershell (vorinstalliert auf jedem modernen Windows-Computer) verwenden, um mit dem .Net-Framework zu spielen. Oder Sie können LINQpad verwenden, um beliebigen C # -Code zu prototypisieren . Oder Sie können ScriptCs verwenden oder Sie können eine Online-Umgebung vom Typ jsfiddle wie Complify.net oder Jsil verwenden . Viele Möglichkeiten.
Antworten:
Ja.
F # ist ein Nachkomme der ML-Programmiersprache, die wiederum stark von Sprachen wie Lisp und Scheme beeinflusst wurde. Diese Sprachen wurden vom ersten Tag an so entworfen, dass sie drei schöne Eigenschaften haben.
Erstens haben diese Sprachen keine Aussagen, wie Sie sie in C # sehen. Vielmehr ist fast alles ein Ausdruck , der einen Wert hat , so dass ein Wertevaluierungs- und Druckmechanismus in fast jeder Situation Sinn macht.
Zweitens raten diese Sprachen von der Programmierung mit Nebenwirkungen ab, sodass Sie Auswertungen vornehmen können, ohne befürchten zu müssen, dass Sie den globalen Zustand durcheinander bringen.
Drittens ist die meiste Arbeit, die Sie in diesen Sprachen leisten, „auf höchstem Niveau“. In der Regel gibt es keine einschließenden "Klasse" oder "Namespace" oder anderen Kontext.
Im Gegensatz dazu betont C # den Ablauf der Programmiersteuerung mit Anweisungen, die Nebenwirkungen hervorrufen, und diese Anweisungen befinden sich immer in mehreren verschachtelten Containern - einem Namespace, einer Klasse, einer Methode usw.
Das sind also alles Dinge, die es für C # schwieriger machen , eine REPL zu haben, aber sicherlich nicht unmöglich . Wir müssen nur herausfinden, was die Semantik für Aussagen und Ausdrücke ist, die außerhalb des üblichen Kontexts erscheinen, und was die Semantik für Mutationen ist, die die Namensbindungen ändern, und so weiter.
Weil das F # -Team entschied, dass das Vorhandensein einer REPL-Schleife für sie ein vorrangiges Szenario war. Das C # -Team hat das historisch nicht. Funktionen werden nur implementiert, wenn sie die Funktionen mit der höchsten Priorität sind, die in das Budget passen. Bisher stand ein C # REPL nicht ganz oben auf unserer Liste.
Das Roslyn-Projekt hat eine C # -REPL (und wird eventuell auch eine VB-REPL haben, die jedoch noch nicht fertig ist.) Sie können eine Vorschauversion davon herunterladen, um zu sehen, wie es Ihnen gefällt
http://www.microsoft.com/en-us/download/details.aspx?id=27746
quelle
Mono hat eine C # -Antwort: http://www.mono-project.com/CsharpRepl
Es gibt sogar eine GUI-Version, mit der Sie Grafikobjekte direkt bearbeiten oder Gtk # -Widgets erstellen können:
quelle
Ich glaube, es ist größtenteils eine historische Sache. REPL-Umgebungen wurden immer mit funktionalen Sprachen in Verbindung gebracht, einschließlich der ML-Familiensprachen, und F # bleibt dieser Tradition treu. Beachten Sie, dass eine interaktive Umgebung für Benutzer mit funktionalem Hintergrund eine Selbstverständlichkeit darstellt. Das Fehlen einer solchen Funktion würde VS und - im weiteren Sinne - F # benachteiligen.
Auf der anderen Seite war ein solches Feature in der OOP-Community nicht alltäglich.
Es gibt jedoch REPLs für viele nicht funktionsfähige Sprachen, einschließlich C, Java oder C #. Auch wenn es weit von einer vollwertigen REPL entfernt ist, zeigt die Autos-Funktion in VS, dass es mit C # durchaus machbar ist.
quelle
Ich glaube, C # ist in erster Linie objektorientiert. Um auch einfachsten Code zu schreiben, sollten Sie ihn in mehrere Klassen unterteilen. Um REPL zu verwenden, müssten Sie viel Code schreiben.
F # ist in erster Linie funktional und hat dieses Problem nicht. Sie können problemlos auch komplexen Code in einfacher Weise schreiben und ihn später in Objekte konvertieren.
Es ist einfacher, eine einzelne Funktionszeile zu schreiben, als eine Klasse, die viele Zeilen umfasst.
quelle