F # wychodzi z pudełka z interaktywnym REPL. C # nie ma nic w tym rodzaju i w rzeczywistości jest trochę trudny do zabawy bez przygotowania pełnego projektu (chociaż LINQpad działa i można to również zrobić za pomocą PowerShell).
Czy jest coś zupełnie innego w językach, które pozwalają F # mieć interaktywną konsolę, ale utrudniają jej implementację w C #?
Ponieważ wiele lat później ludzie wciąż przychodzą na to pytanie, powinienem zauważyć, że teraz jest wiele opcji. Za pomocą programu PowerShell (wstępnie zainstalowanego na każdym nowoczesnym komputerze z systemem Windows) można grać w środowisku .Net. Lub możesz użyć LINQpad do prototypowania dowolnego kodu c # . Możesz też użyć ScriptCs lub internetowego środowiska typu jsfiddle, takiego jak Complify.net lub Jsil . Wiele opcji.
Odpowiedzi:
Tak.
F # jest potomkiem języka programowania ML, który z kolei był pod silnym wpływem języków takich jak Lisp i Scheme. Te języki zostały zaprojektowane od pierwszego dnia, aby miały trzy ładne właściwości.
Po pierwsze, w tych językach tak naprawdę nie ma wyrażeń tak, jak myślisz o nich w języku C #. Raczej prawie wszystko jest wyrażeniem, które ma wartość , więc mechanizm oceny i wydrukowania wartości ma sens w prawie każdej sytuacji.
Po drugie, te języki zniechęcają do programowania z efektami ubocznymi, więc możesz dokonywać ocen bez obawy, że popsuniesz globalny stan.
Po trzecie, większość pracy wykonywanej w tych językach odbywa się „na najwyższym poziomie”; zazwyczaj nie ma obejmującej „klasy”, „przestrzeni nazw” lub innego kontekstu.
Natomiast C # kładzie nacisk na programowanie przepływu sterowania za pomocą instrukcji, które wywołują skutki uboczne, a te instrukcje są zawsze w wielu zagnieżdżonych kontenerach - przestrzeni nazw, klasie, metodzie i tak dalej.
Są to więc wszystko, co utrudnia CPL posiadanie REPL, ale z pewnością nie jest niemożliwe . Musimy tylko dowiedzieć się, co to jest semantyka dla wyrażeń i wyrażeń, które pojawiają się poza zwykłym kontekstem, i co to jest semantyka mutacji, które zmieniają powiązania nazw itp.
Ponieważ zespół F # zdecydował, że posiadanie pętli REPL jest dla nich scenariuszem priorytetowym. Zespół C # historycznie nie. Funkcje nie zostaną wdrożone, chyba że są funkcjami o najwyższym priorytecie, które mieszczą się w budżecie; do tej pory CPL REPL nie było na szczycie naszej listy.
Projekt Roslyn ma CPL REPL (i ostatecznie będzie miał również VB REPL, ale nie jest jeszcze gotowy.) Możesz pobrać jego wersję zapoznawczą, aby zobaczyć, jak ci się podoba
http://www.microsoft.com/en-us/download/details.aspx?id=27746
źródło
Mono ma replikę C #: http://www.mono-project.com/CsharpRepl
Ma nawet wersję GUI, która pozwala bezpośrednio manipulować obiektami graficznymi lub tworzyć widżety Gtk #:
źródło
Wierzę, że to głównie historyczna rzecz. Środowiska REPL zawsze były kojarzone z językami funkcjonalnymi, w tym językami rodziny ML, a F # pozostaje wierny tej tradycji. Należy pamiętać, że środowisko interaktywne jest czymś, co użytkownicy pochodzący z tła funkcjonalnego uważają za coś oczywistego, brak takiej funkcji oznaczałby VS i - w związku z tym - F #, w niekorzystnej sytuacji.
Z drugiej strony żadna taka funkcja nie była powszechna w społeczności OOP.
Dostępne są jednak REPL dla wielu języków niefunkcjonalnych, w tym C, Java lub C #. Chociaż jest to dalekie od pełnego REPL, funkcja Autos w VS pokazuje, że z pewnością można to zrobić za pomocą C #.
źródło
Uważam, że C # jest przede wszystkim zorientowany obiektowo. Aby napisać nawet najprostszy kod, należy podzielić go na wiele klas. Aby użyć REPL, musisz napisać dużo kodu.
F # jest przede wszystkim funkcjonalny, nie ma tego problemu i możesz łatwo napisać nawet skomplikowany kod w prostym stylu i przekonwertować go na obiekt / y później.
Łatwiej jest napisać pojedynczy wiersz funkcji niż napisać klasę, która obejmuje wiele wierszy.
źródło