O F # sai da caixa com um REPL interativo. O C # não tem nada desse tipo e é de fato meio difícil de brincar sem a configuração de um projeto completo (embora o LINQpad funcione e também seja possível através do PowerShell).
Existe algo fundamentalmente diferente nas linguagens que permite ao F # ter o console interativo, mas dificulta sua implementação no C #?
Desde muitos anos depois, as pessoas ainda estão chegando a essa pergunta, devo observar que agora existem muitas opções. Você pode usar o PowerShell (pré-instalado em todas as máquinas modernas do Windows) para jogar com a estrutura .Net. Ou você pode usar o LINQpad para criar um protótipo de código c # arbitrário . Ou você pode usar ScriptCs ou um ambiente on-line do tipo jsfiddle, como Complify.net ou Jsil . Muitas opções.
Respostas:
Sim.
O F # é um descendente da linguagem de programação ML, que por sua vez foi fortemente influenciada por linguagens como Lisp e Scheme. Esses idiomas foram projetados desde o primeiro dia para ter três boas propriedades.
Primeiro, esses idiomas não têm realmente instruções do jeito que você as pensa em C #. Em vez disso, quase tudo é uma expressão que tem um valor ; portanto, um mecanismo de avaliar e imprimir o valor faz sentido em quase todas as situações.
Segundo, esses idiomas desencorajam a programação com efeitos colaterais, para que você possa fazer avaliações sem se preocupar com a bagunça do estado global.
Terceiro, a maior parte do trabalho que você faz nessas línguas é "de nível superior"; normalmente não há "classe" ou "espaço para nome" ou outro contexto.
Por outro lado, o C # enfatiza o fluxo de controle de programação com instruções que produzem efeitos colaterais, e essas instruções estão sempre em vários contêineres aninhados - um espaço para nome, uma classe, um método e assim por diante.
Portanto, essas são todas as coisas que tornam mais difícil para o C # ter um REPL, mas certamente não é impossível . Apenas precisamos descobrir quais são as semânticas para declarações e expressões que aparecem fora do contexto usual e quais são as semânticas de mutações que alteram as ligações de nomes, e assim por diante.
Porque a equipe do F # decidiu que ter um loop REPL era um cenário prioritário para eles. A equipe de C # historicamente não tem. Os recursos não são implementados, a menos que sejam os recursos de maior prioridade que se encaixam no orçamento; até agora, um C # REPL não estava no topo da nossa lista.
O projeto Roslyn possui um C # REPL (e eventualmente também terá um VB REPL, mas ainda não está pronto.) Você pode fazer o download de uma versão prévia para ver como você gosta em
http://www.microsoft.com/en-us/download/details.aspx?id=27746
fonte
Mono tem uma repl C #: http://www.mono-project.com/CsharpRepl
Ele ainda possui uma versão GUI que permite manipular diretamente objetos gráficos ou criar widgets Gtk #:
fonte
Eu acredito que é principalmente uma coisa histórica. Os ambientes REPL sempre foram associados a linguagens funcionais, incluindo as linguagens da família ML e o F # permanece fiel a essa tradição. Lembre-se de que o ambiente interativo é algo que os usuários provenientes de background funcional consideram um dado adquirido; a falta desse recurso pode colocar o VS e, por extensão, o F # em desvantagem.
Por outro lado, esse recurso não é comum na comunidade OOP.
No entanto, existem REPLs disponíveis para muitas linguagens não funcionais, incluindo C, Java ou C #. Além disso, embora esteja muito longe de um REPL completo, o recurso Autos no VS mostra que é certamente possível com o C #.
fonte
Eu acredito que o C # é principalmente orientado a objetos. Para escrever um código ainda mais simples, você deve dividi-lo em várias classes. Para usar o REPL, você precisará escrever muito código.
O fato de o F # ser principalmente funcional não tem esse problema e você pode escrever facilmente códigos complexos mesmo em uma classe simples e convertê-los em objetos posteriormente.
É mais fácil escrever uma única linha de função do que escrever classe, que abrange muitas linhas.
fonte