F # выходит из коробки с интерактивным REPL. C # не имеет ничего подобного, и на самом деле довольно сложно поиграть без настройки полноценного проекта (хотя LINQpad работает и его также можно сделать с помощью powershell).
Есть ли в языках что-то принципиально иное, что позволяет F # иметь интерактивную консоль, но затрудняет ее реализацию на C #?
Поскольку много лет спустя люди все еще приходят к этому вопросу, я должен отметить, что сейчас есть много вариантов. Вы можете использовать powershell (предварительно установленный на каждом современном компьютере с Windows) для работы с .Net framework. Или вы можете использовать LINQpad для создания прототипа произвольного кода на C # . Или вы можете использовать ScriptC или онлайн-среду типа jsfiddle, такую как Complify.net или Jsil . Много вариантов.
Ответы:
Да.
F # является потомком языка программирования ML, который, в свою очередь, находился под сильным влиянием таких языков, как Lisp и Scheme. Эти языки были разработаны с первого дня, чтобы иметь три приятных свойства.
Во-первых, эти языки на самом деле не имеют операторов, как вы думаете о них в C #. Скорее, почти все является выражением, которое имеет значение , поэтому механизм оценки и затем печати значения имеет смысл практически в любой ситуации.
Во-вторых, эти языки препятствуют программированию с побочными эффектами, поэтому вы можете делать оценки, не беспокоясь о том, что вы испортите глобальное состояние.
В-третьих, большая часть работы, которую вы выполняете на этих языках, находится «на высшем уровне»; обычно нет включающего «класса», «пространства имен» или другого контекста.
В отличие от этого, C # подчеркивает поток управления программированием с помощью операторов, которые создают побочные эффекты, и эти операторы всегда находятся в нескольких вложенных контейнерах - пространстве имен, классе, методе и так далее.
Так что это все вещи, которые мешают C # иметь REPL, но, конечно, не невозможно . Нам просто нужно выяснить, что такое семантика для операторов и выражений, которые появляются вне обычного контекста, и какова семантика мутаций, которые изменяют привязки имен и так далее.
Потому что команда F # решила, что цикл REPL был для них приоритетным сценарием. Команда C # исторически не имеет. Функции не будут реализованы, если они не являются приоритетными функциями, которые вписываются в бюджет; до сих пор C # REPL не был в верхней части нашего списка.
Проект Roslyn имеет C # REPL (и в конечном итоге также будет иметь VB REPL, но он еще не готов.) Вы можете скачать предварительную версию этого, чтобы увидеть, как вам это нравится на
http://www.microsoft.com/en-us/download/details.aspx?id=27746
источник
Mono имеет C # repl: http://www.mono-project.com/CsharpRepl
Он даже имеет версию GUI, которая позволяет вам напрямую манипулировать графическими объектами или создавать виджеты Gtk #:
источник
Я считаю, что это в основном историческая вещь. Среды REPL всегда ассоциировались с функциональными языками, включая языки семейства ML, и F # остается верным этой традиции. Имейте в виду, что интерактивная среда - это то, что пользователи, исходя из функционального фона, воспринимают как должное, отсутствие такой функции поставило бы VS и, в свою очередь, F #, в невыгодное положение.
С другой стороны, в сообществе ООП такая особенность не была обычным явлением.
Однако существуют REPL для многих нефункциональных языков, включая C, Java или C #. Кроме того, хотя это далеко от полноценного REPL, функция Autos в VS показывает, что она, безусловно, выполнима с C #.
источник
Я считаю, что C # в первую очередь объектно-ориентированный. Чтобы написать даже самый простой код, вы должны разделить его на несколько классов. Чтобы использовать REPL, вам нужно написать много кода.
F #, будучи в основном функциональным, не имеет этой проблемы, и вы можете легко написать даже сложный код простым способом и позже преобразовать его в объект (ы).
Проще написать одну строку функции, чем написать класс, который занимает много строк.
источник