Qual é a linguagem de produção mais compatível e amplamente utilizada para exportar conhecimento e habilidades adquiridas da Haskell?

14

Eu gosto do Haskell, claro e simples. Enquanto o Haskell é usado em software de produção, ele não é amplamente implementado pelo que eu vi. Qual é a linguagem mais semelhante e ainda amplamente utilizada em relação aos projetos de produção, para que eu possa ter uma chance de bola de neve de usar algo igualmente impressionante na indústria?

Além disso, o mesmo idioma da primeira parte está disponível em um grande número de plataformas? Se não, qual é a melhor alternativa que tem implantação de plataforma ampla? Eu gostaria de uma única língua para colocar na minha lista de tarefas ao invés de um enxame maciço ou família. Evidência difícil seria um plus.

    
por World Engineer 01.09.2011 / 01:55
fonte

5 respostas

21

Haskell é mais estreitamente relacionado à família de línguas ML. Isso inclui coisas como OCaml , é claro, mas também F # na plataforma .NET. Essas linguagens compartilham com Haskell a base do sistema de tipos e como os dados são usados - tipos de dados algébricos, correspondência de padrões, inferência de tipos, etc. Eles podem diferir substancialmente de Haskell em outros pontos, é claro - a maioria dos MLs é estrita e impura , para começar, e a popularidade de Haskell como um veículo para pesquisa em sistemas de tipos e design de linguagem significa que a maioria das linguagens no estilo ML tendem a ter sistemas de tipos menos poderosos (mas potencialmente mais fáceis de entender). Provavelmente, é seguro dizer que, embora você possa perder algumas coisas sobre Haskell, particularmente no início, a maioria dos programadores de Haskell provavelmente se sentiria confortável em casa em um ML muito rapidamente, em um nível básico de fazer as coisas acontecerem. . Se você quer uma linguagem com a mesma estrutura geral como Haskell, uma ML é sua melhor aposta.

O lado funcional do Scala também se baseia na tradição do ML, e também inclui alguns recursos avançados do sistema de tipos familiares do Haskell, bem como um sistema OOP mais padrão integrado com o acima . Enquanto o OO em linguagens no estilo ML tende a ser abordado como mais um "modelo OO com ferramentas funcionais básicas", o Scala vive e respira OO estilo Java. Isso traz benefícios para a interoperabilidade Java, como você pode imaginar, e apresenta um ambiente de trabalho mais familiar para programadores OO. No entanto, vindo de um background de Haskell, é mais provável que você fique incomodado com as maneiras pelas quais misturar as coisas no Scala torna os idiomas funcionais mais desajeitados e descobrir que a maioria das APIs Java é mal projetada e desnecessariamente difícil de usar. Então, se você quiser algo com um sistema de tipos sofisticado que permita traduções diretas de muitas coisas em Haskell (com alguma sobrecarga extra sintática) e não se importe em comprometer o estilo funcional, você pode gostar do Scala.

Finalmente, embora pareça estranho considerar, o Clojure na verdade tem muitas coisas em comum com o Haskell em um nível mais filosófico. A maior parte do que você encontrará na abordagem do Clojure ao estado e valores vs. identidades é muito próximo do que Haskell formaliza através do sistema de tipos. . De forma correspondente, o Clojure enfatiza a interoperabilidade Java em um grau menor e não se preocupa tanto em arrastar na OOP, então, de alguma forma, a abordagem do Clojure para a própria programação funcional pode estar mais próxima do que você já conhece . Acho que está dizendo a esse respeito que, pelo que sei, Clojure é a única linguagem além de Haskell que tem uma implementação de STM isso é simples, eficaz e funciona. Por outro lado, o Clojure vem da tradição Lisp e, portanto, não possui o sistema de tipo estático e a ênfase nos tipos de dados algébricos e na correspondência de padrões encontrados nas linguagens influenciadas por ML. E, claro, é um Lisp, que é em si mesmo negativo para algumas pessoas (embora eu realmente não saiba o porquê).

Falando por mim mesmo, com o aviso de que minha primeira experiência com programação funcional estava em Scheme, eu provavelmente me inclinaria para o Clojure, com o OCaml como uma provável segunda escolha.

    
por 01.09.2011 / 03:12
fonte
4

Eu nunca usei isso sozinho, mas vejo o Scala aparecendo em blogs ou descrições de projetos, às vezes, e acredito que foram necessários conceitos importantes do Haskell. O Scala é compilado para a JVM e pode interoperar com o Java.

    
por 01.09.2011 / 02:01
fonte
3

Uma alternativa funcional é o Erlang . Embora seja uma linguagem muito concorrente, o subconjunto sequencial é uma linguagem funcional pura com muitas das propriedades de linguagens funcionais, por exemplo, closures, dados imutáveis e correspondência de padrões. Ele é executado em muitas plataformas, incluindo Linux, vários unixes, windows e macosx. Existe agora mesmo uma implementação na JVM, erjang . Ele pode se comunicar e coexistir facilmente com outros idiomas, é assim que é usado com frequência.

Confira o site principal .

    
por 01.09.2011 / 14:45
fonte
3

O Clojure é cada vez mais usado, e embora não pareça Haskell em um nível superficial, se você olhar um pouco mais profundamente, é claramente inspirado por Haskell e encoraja um estilo funcional muito semelhante.

Principais recursos do Clojure que os usuários do Haskell podem achar familiares e atraentes:

  • A linguagem principal é puramente funcional - enquanto os efeitos colaterais são possíveis, eles são ocultados em locais específicos (por exemplo, referências STM, funções IO, interoperabilidade Java)
  • Todas as estruturas de dados são imutáveis e persistentes
  • Preguiça - alcançada em grande parte através das onipresentes sequências preguiçosas do Clojure, isso parecerá muito familiar para os usuários do Haskell. Sequências lentas infinitas são boas.
  • Software Transactional Memory - é a principal maneira de lidar com o estado mutável no Clojure. Vale a pena assistir a este excelente vídeo em que Rich Hickey explica a abordagem do Clojure quanto à identidade e ao estado: link

Principais diferenças (podem ser positivas ou negativas dependendo da sua perspectiva):

  • É impura - embora minha observação seja que o estilo idiomático do Clojure é manter funções puras sempre que possível.
  • Dinâmica em vez de tipagem estática (embora dicas de tipo estático possam ser usadas opcionalmente para otimizações de desempenho)
  • É um idioma da JVM com acesso fácil a todo o ecossistema de bibliotecas Java - essa é, na minha opinião, a maior vantagem em termos de aplicabilidade no mundo real
  • Sintaxe de Lisp. Então você obtém todos os benefícios da homoiconicidade , ao custo de ter que aprender a ver através de todos os parênteses: -)

Perspectiva pessoal: Aprendi Haskell antes de Clojure e amei Haskell por sua elegância e pureza matemática. Clojure inspira-se muito e empresta muitas boas características de Haskell, mas é uma linguagem mais pragmática e prática. Especialmente quando você conta o enorme valor de ser capaz de aproveitar o ecossistema de bibliotecas Java, é uma excelente linguagem para "fazer as coisas acontecerem".

    
por 22.11.2011 / 18:32
fonte
1

Se você gosta de Haskell, mas precisa criar um código para a JVM, frege pode ser interessante para você. Ele foi projetado para ser o mais próximo possível do Haskell 2010, mas gera código Java.

Claro, a própria frege não é nada como "linguagem de produção amplamente utilizada" (apenas recentemente publicada), mas Java é certamente.

    
por 01.09.2011 / 10:35
fonte