Haverá uma linguagem funcional que faz para a comunidade Java que F # faz para a comunidade .NET?

StackOverflow https://stackoverflow.com/questions/169812

  •  05-07-2019
  •  | 
  •  

Pergunta

Haverá uma linguagem funcional que faz para a comunidade Java que F # faz para a comunidade .NET?

O que linguagens de programação funcionais estão disponíveis ou em desenvolvimento, para a JVM?

Foi útil?

Solução

Clojure . Não é digitado estaticamente, mas tem mais de uma ênfase na imutabilidade e simultaneidade de F #. No entanto, como F # (e ao contrário de Common Lisp), que se destina a ser uma linguagem basicamente funcional que é bom para consumir bibliotecas OO da plataforma subjacente.

Outras dicas

Scala seria o idioma.

Apesar de não ser estritamente funcional (que é uma mistura de funcional e orientada a objetos) e não é estritamente para Java (há uma . versão NET de Scala ), que seria o analógico mais próximo a F # na JVM.

A primeira coisa que veio a minha mente era Scala mas realmente Ocaml-Java se aproxima como F # é uma variante do Ocaml. Consulte este post que compara Ocaml-Java para Scala :

programadores OCaml são tipicamente mais de 10 vezes tão produtivo como Java ou C ++ programadores para uma ampla gama de tarefas práticas. Apesar de ser baseado em um fundamentalmente plataforma OOP, F # vai um longo caminho para capturar o produtividade- impulsionar benefícios de OCaml (e toda a família ML). Em contraste, Scala não consegue captar muitos dos benefícios, incluindo alguns realmente básicos e, consequentemente, escrever código correto é muito mais difícil no Scala do que em qualquer verdadeiro ML.

Além disso, a família ML de línguas são projetados para ser sucinto, mas Scala é desnecessariamente detalhado para tudo, desde "Olá, mundo!" para cima. A família ML de linguagens fornecem tipo extenso de inferência (OCaml mais do que a maioria), mas Scala tem apenas inferência rudimentar em comparação. OCaml tem um invulgarmente sistema de tipo expressivo, mas Scala pouco acrescenta ao OOP que é de prático importância.

Por enquanto eu diria Scala. Mas para o futuro, eu teria uma olhada em Fortaleza. A primeira implementação da especificação foi lançado em 1 de abril de 2008. E não, isso não é uma piada. featues chave são:

  • tipagem estática, mas um monte de tipo de inferência para a desordem evitar
  • Unicode e renderização 2D de funções matemáticas
  • Projetado para execução paralela (para cada padrão é isso)
  • O suporte forte para bibliotecas personalizadas (influência de Guy Steele)
  • Operador de sobrecarga, incluindo o operador justaposição

Mais informações no website do Projeto Comunidade Fortaleza eo Wikipedia Fortaleza página .

Provavelmente nenhum, porque a JVM carece de chamadas cauda e eles são obrigados a fazer quase todo o código funcional robusta em relação ao consumo de pilha.

A coisa mais próxima para implementações de linguagem funcional sobre a JVM são Clojure , Scala eo OCaml em Java projeto. Embora existam soluções alternativas para a falta de chamadas de cauda (por exemplo trampolining), nenhuma dessas implementações de linguagem fazer isso porque as soluções alternativas apresentar problemas ainda mais graves, por exemplo, minando o desempenho e ofuscando completamente depuração.

Sun têm falado sobre chamadas cauda durante anos e, mais recentemente, têm indicado que pretendem implementá-los em breve. Assim que isso for feito, estou certo de que veremos muito mais diversidade linguística na JVM e, em particular, alguns com qualidade de produção implementações de linguagem funcional. Até então, eu considero todas estas línguas como brinquedos.

Cheers, Jon Harrop.

Há uma boa lista de linguagens de programação para JVM, incluindo paradigma de programação funcional e outras línguas de paradigma em:

  • en.wikipedia.org/wiki/List_of_JVM_languages ??

A minha primeira escolha é Scala (multi-paradigma; OO & FP), passei 5+ meses estudando Scala em 2009, e criou uma folha de referência rápida: bchiprog.blogspot.com/2009/05/scala-cheat- sheet.html

notei há outros paradigmas de programação que são interessantes, outros focos de processamento paralelo como o X10, Fortaleza, e Capela. X10 é implementado em cima do Scala - http: // www. scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf

É realmente baseado no que problema que você precisa resolver em seguida, escolher a língua que melhor pode resolvê-lo. Eu acho que desejo É desenvolvedores que há uma linguagem que pode resolver qualquer tipo de problema facilmente e fazê-lo de forma simples.

@ Marc Gravell - linguagens funcionais são cada vez mais utilizados nas vísceras de sistemas financeiros nível empresarial. Usamos muitos funcional (puro ou "semi-pura") no trabalho bancário I para ...

Enquanto isso, há Frege , um funcional linguagem pura, não-estrita no espírito de Haskell que compila para Java, que então é compilado ainda mais com javac ou o compilador eclipse, dependendo do ambiente (linha de comando ou eclipse).

Na verdade, eu poderia estar errado, mas eu não espero F # para ser tão mainstream como as outras linguagens .NET; útil em alguns círculos (acadêmico, compiladores, alguns outros cenários) - no entanto, não se esqueça que C # ofertas uso FP - e torna-se cada vez melhor: C # 1.2 tem delegados; C # 2.0 tem métodos anónimos e captura / fechos; C # 3.0 tem lambdas para simplicidade, e Expressão de captação. Tipos anônimos (C # 3.0) compartilham alguns semelhança com tuplas (em termos de conveniência), mas, obviamente, são muito diferentes animais, por isso definitivamente não é um like-for-like comparação.

Talvez não tão otimizado como F #, mas para a maioria das FP casos de uso do dia-a-dia, mais do que suficiente.

É também bastante claro que um melhor suporte para imutabilidade (especialmente para rosqueamento) é muito sobre as mentes da equipe C # idioma para futura consideração.

Meu dinheiro está em C # ficando melhor a FP, e sendo a oferta .NET FP para a maioria dos propósitos do dia-a-dia. Claro, haverá algum # uso F -. Mas (puramente subjetiva) Eu simplesmente não vejo que haja uma enorme migração

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top