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