Есть ли в языках что-то принципиально иное, что позволяет F # иметь интерактивную консоль, но затрудняет ее реализацию на C #?
Да.
F # является потомком языка программирования ML, который, в свою очередь, находился под сильным влиянием таких языков, как Lisp и Scheme. Эти языки были разработаны с первого дня, чтобы иметь три приятных свойства.
Во-первых, эти языки на самом деле не имеют операторов, как вы думаете о них в C #. Скорее, почти все является выражением, которое имеет значение , поэтому механизм оценки и затем печати значения имеет смысл практически в любой ситуации.
Во-вторых, эти языки препятствуют программированию с побочными эффектами, поэтому вы можете делать оценки, не беспокоясь о том, что вы испортите глобальное состояние.
В-третьих, большая часть работы, которую вы выполняете на этих языках, находится «на высшем уровне»; обычно нет включающего «класса», «пространства имен» или другого контекста.
В отличие от этого, C # подчеркивает поток управления программированием с помощью операторов, которые создают побочные эффекты, и эти операторы всегда находятся в нескольких вложенных контейнерах - пространстве имен, классе, методе и так далее.
Так что это все вещи, которые мешают C # иметь REPL, но, конечно, не невозможно . Нам просто нужно выяснить, что такое семантика для операторов и выражений, которые появляются вне обычного контекста, и какова семантика мутаций, которые изменяют привязки имен и так далее.
Почему F # имеет интерактивный режим, а не C #?
Потому что команда F # решила, что цикл REPL был для них приоритетным сценарием. Команда C # исторически не имеет. Функции не будут реализованы, если они не являются приоритетными функциями, которые вписываются в бюджет; до сих пор C # REPL не был в верхней части нашего списка.
Проект Roslyn имеет C # REPL (и в конечном итоге также будет иметь VB REPL, но он еще не готов.) Вы можете скачать предварительную версию этого, чтобы увидеть, как вам это нравится на
http://www.microsoft.com/en-us/download/details.aspx?id=27746