C # Dev - Eu tentei o Lisps, mas eu não entendi [fechado]

37

Depois de alguns meses de aprendizado e de brincar com Lisp, CL e Clojure, ainda não vejo um motivo convincente para escrever qualquer coisa nele em vez de C #.

Eu realmente gostaria de algumas razões convincentes, ou para alguém apontar que estou perdendo algo realmente grande .

As forças de Lisp (por minha pesquisa):

  • Notação compacta e expressiva - Mais do que C #, sim ... mas parece que também consigo expressar essas ideias em C #.
  • Suporte implícito para programação funcional - C # com métodos de extensão LINQ:
    • mapcar = .Selecione (lambda)
    • mapcan = .Selecione (lambda) .Agregue ((a, b) = > a.União (b))
    • car / first = .Primeiro ()
    • cdr / rest = .Skip (1) .... etc.
  • Lambda e suporte à função de ordem superior - o C # tem isso, e a sintaxe é razoavelmente mais simples:
    • "(lambda (x) (corpo))" versus "x = > (corpo)"
    • "# (" com "%", "% 1", "% 2" é legal no Clojure
  • Método de envio separado dos objetos - C # tem isso através de métodos de extensão
  • Despacho de multimetodos - C # não tem isso nativamente, mas eu poderia implementá-lo como uma chamada de função em algumas horas
  • Código é Data (e Macros) - Talvez eu não tenha "obtido" macros, mas não vi um único exemplo em que a ideia de uma macro não pudesse ser implementada como uma função; isso não muda a "linguagem", mas eu não tenho certeza se isso é uma força
  • DSLs - Só pode fazê-lo através da composição de funções ... mas funciona
  • Programação "exploratória" não tipada - para structs / classes, as autoproperties e "object" do C # funcionam muito bem, e você pode facilmente escalar para uma digitação mais strong à medida que avança
  • É executado em hardware não Windows - Sim, então? Fora da faculdade, eu só conheço uma pessoa que não roda o Windows em casa, ou pelo menos uma VM do Windows no * nix / Mac. (Então, novamente, talvez isso seja mais importante do que eu pensava e acabei de sofrer lavagem cerebral ...)
  • O REPL para o projeto de baixo para cima - Ok, eu admito que isso é realmente muito bom, e eu sinto falta em C #.

Coisas que estou perdendo no Lisp (devido a uma mistura de C #, .NET, Visual Studio, Resharper):

  • Espaços para nome. Mesmo com métodos estáticos, eu gosto de amarrá-los em uma "classe" para categorizar seu contexto (o Clojure parece ter isso, CL não parece).
  • Grande suporte a compilação e tempo de design
    • o sistema de tipos me permite determinar a "correção" das estruturas de dados que passo por
    • qualquer erro ortográfico é realçado em tempo real; Eu não tenho que esperar até o tempo de execução para saber
    • melhorias de código (como usar uma abordagem FP em vez de uma imperativa) são de sugestão automática
  • Ferramentas de desenvolvimento de GUIs: WinForms e WPF (Eu sei que o Clojure tem acesso às bibliotecas GUI do Java, mas elas são inteiramente estranhas para mim.)
  • Ferramentas de depuração da GUI: pontos de interrupção, step-in, step-over, inspetores de valor (texto, xml, personalizado), relógios, depuração por thread, pontos de interrupção condicionais, janela de pilha de chamadas com a capacidade de saltar para o código em qualquer nível na pilha
    • (Para ser justo, minha tarefa com o Emacs + Slime pareceu fornecer algumas dessas coisas, mas eu sou parcial com relação à abordagem orientada por o VS da GUI)

Eu realmente gosto do hype em torno de Lisp e dei uma chance.

Mas há algo que eu possa fazer no Lisp que eu não possa fazer tão bem em C #? Pode ser um pouco mais detalhado em C #, mas também tenho autocomplete.

O que estou perdendo? Por que devo usar o Clojure / CL?

    
por talonx 20.02.2011 / 17:05
fonte

0 respostas

Tags