Para que é utilizado o Haskell no mundo real? [fechadas]

475

Existe muito hype em torno do Haskell, no entanto, é difícil obter informações sobre como ele é usado nos aplicativos do mundo real. Quais são os projetos / usos mais populares da Haskell e por que ela se destaca na solução desses problemas?

Sergio Tapia
fonte
56
Não, não vou, porque é uma resposta clara. Não há espaço para opiniões e coisas do tipo. Eu só quero saber para que o idioma foi criado.
Sergio Tapia
12
@ Papuccino1, espere, você quer saber para que serve ou para que foi criado ? O primeiro é que a questão está pedindo, e não há muito espaço para a opinião lá ...
bdonlan
3
@ Papuccino1 - Qual o benefício que as palavras extras em seu título trazem para a pergunta? Além disso, acho que você está entendendo mal o uso do termo "funcional" nesse contexto, mas é difícil dizer.
22711 Chris Lutz
2
De acordo com o seu próprio site, muitas empresas o usam para diferentes tipos de finalidades ... haskell.org/haskellwiki/Haskell_in_industry
Julian

Respostas:

309

Quais são alguns usos comuns para esse idioma?

Desenvolvimento de Aplicação Rápida.

Se você quiser saber "por que Haskell?", Precisará considerar as vantagens das linguagens de programação funcional (extraídas de https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgramming ):

  • Os programas funcionais tendem a ser muito mais concisos do que os equivalentes do ImperativeLanguage. Muitas vezes, isso leva a uma maior produtividade do programador

  • O FP incentiva a prototipagem rápida. Como tal, acho que é o melhor paradigma de design de software para ExtremeProgrammers ... mas o que eu sei?

  • O FP é modular na dimensão da funcionalidade, onde o ObjectOrientedProgramming é modular na dimensão dos diferentes componentes.

  • A capacidade de ter o seu bolo e comê-lo. Imagine que você tem um sistema OO complexo processando mensagens - cada componente pode fazer alterações de estado dependendo da mensagem e encaminhá-la para alguns objetos aos quais tem links. Não seria muito legal poder reverter facilmente todas as alterações se algum objeto na hierarquia de chamadas decidir que a mensagem é falha? Que tal ter uma história de diferentes estados?

  • Muitas tarefas de limpeza feitas para você: desconstruindo estruturas de dados (PatternMatching), armazenando ligações variáveis ​​(LexicalScope com fechamentos), digitação forte (TypeInference), GarbageCollection, alocação de armazenamento, se deseja usar em caixa (ponteiro para valor) ou não em caixa (valor diretamente ) representação ...

  • Multithreading seguro! As estruturas de dados imutáveis ​​não estão sujeitas às condições de corrida de dados e, consequentemente, não precisam ser protegidas por bloqueios. Se você está sempre alocando novos objetos, em vez de manipular destrutivamente os existentes, o bloqueio pode ser oculto no sistema de alocação e GarbageCollection.

Além disso, Haskell tem suas próprias vantagens, como:

  • Sintaxe clara e intuitiva, inspirada em notação matemática.
  • Compreensões de lista para criar uma lista com base em listas existentes.
  • Expressões lambda: crie funções sem fornecer nomes explícitos. Portanto, é mais fácil lidar com grandes fórmulas.
  • Haskell é completamente referencialmente transparente . Qualquer código que usa E / S deve ser marcado como tal. Dessa forma, incentiva você a separar o código com efeitos colaterais (por exemplo, colocar texto na tela) do código sem (cálculos).
  • A avaliação preguiçosa é um recurso muito bom:
    • Mesmo que algo possa causar um erro, ainda funcionará desde que você não use o resultado. Por exemplo, você pode colocar 1 / 0como o primeiro item de uma lista e ainda funcionará se você tiver usado apenas o segundo item.
    • É mais fácil escrever programas de pesquisa como este solucionador de sudoku, porque ele não carrega todas as combinações de uma só vez - apenas as gera à medida que avança. Você pode fazer isso em outros idiomas, mas apenas o Haskell faz isso por padrão .

Você pode conferir os seguintes links:

Xinus
fonte
20
O seguinte pensamento geralmente me passa pela cabeça: em uma linguagem pura, uma função sempre retorna o mesmo resultado quando passa pelos mesmos parâmetros. Isto é uma garantia. Linguagens imperativas, por outro lado, constroem tudo sobre "declarações". Uma declaração não possui nenhum tipo de garantia (exceto que sua execução consome tempo e produz calor). Portanto, a fundação já está instável e tudo o que estiver em cima dela permanecerá instável. Para mim, essa foi uma das razões para aprender haskell.
Martin Drautzburg 27/10/2014
8
Faz 6 anos desde que essa pergunta foi feita e desde que a linguagem de programação Go foi lançada. Apesar de ter um sistema do tipo mais fraco e geralmente ser "objetivamente inferior" (de acordo com os fãs funcionais / ML), ele conseguiu enviar mais (e mais importante) software nesses 6 anos do que Haskell em seus 26 anos. Quero dizer isso como um estudo de caso; existem claramente coisas que retêm linguagens funcionais e nem todas podem ser atribuídas ao hype.
weberc2
3
Você esqueceu um ponto - a codificação em haskell é uma explosão absoluta;) Eu me diverti muito tentando resolver alguns problemas em haskell.
23816 J Atkin
8
@MartinDrautzburg É claro que as declarações vêm com garantias. Que tipo de linguagem útil teria declarações sem garantias? Por exemplo, em C x = 5;garante que, após a execução, xcontenha o valor 5.
user253751
5
@ E4z9 Sim, mas em C ++ garante que operator =é chamado. E garante o que acontece se você não definir umoperator =
user253751
234

Acho que as pessoas neste post estão perdendo o ponto mais importante para quem nunca usou uma linguagem de programação funcional: expandir sua mente. Se você é novo na programação funcional, o Haskell fará com que você pense de maneiras que nunca pensou antes. Como resultado, sua programação em outras áreas e outros idiomas será aprimorada. Quanto? Difícil de quantificar.

wheaties
fonte
2
Estou usando um iPhone, Mac. Onde o Haskell é usado? Quero dizer, para os aplicativos que usei, eles são escritos em Objective-C ou Swift +, algo para bancos de dados e servidores. Swift também pode ser funcional. Então mais uma vez eu estou confuso quanto ao local onde ele é usado
Mel
2
O Facebook faz a detecção de SPAM com ele: code.facebook.com/posts/745068642270222/…
Alex
25
Essa resposta, escrito em um tom diferente, diz que Haskell é um ótimo exercício para um programador, que IMO não faz uma grande linguagem de propósito geral
Passer por
5
No Keera Studios, escrevemos jogos e aplicativos para iOS e Android usando Haskell.
Ivan Perez
1
Concordo completamente com isto. Escrevi muito código ao longo de décadas em linguagens imperativas. Eu tenho explorado Haskell há alguns meses e isso me abriu a mente para coisas que eu nunca tinha pensado antes.
Adahus 03/03/19
87

Há uma boa resposta para o que uma linguagem de propósito geral como Haskell é boa: escrever programas em geral.

Para o que é usado na prática, tenho três abordagens para estabelecer isso:

Indica que é bom para gráficos, redes, programação de sistemas, estruturas de dados, bancos de dados, desenvolvimento, processamento de texto ...

E, finalmente, minha opinião sobre o que é realmente forte em:

Espero que isso lhe dê uma idéia de quão ampla é a sua pergunta, para que seja respondida com alguma especificidade.

Don Stewart
fonte
15
Tag cloud está quebrado
Elliot Cameron
a nuvem de tags foi gerada usando o wordcloud ?
Janus Troelsen
29

Um exemplo de Haskell em ação é o xmonad , um "gerenciador de janelas com menos de 1200 linhas de código".

unutbu
fonte
18

Do Wiki Haskell :

Haskell tem uma gama diversificada de uso comercial, desde aeroespacial e de defesa, a finanças, a startups da Web, empresas de design de hardware e fabricantes de cortadores de grama. Esta página coleta recursos sobre o uso industrial de Haskell.

Segundo a Wikipedia, a linguagem Haskell foi criada a partir da necessidade de consolidar as linguagens funcionais existentes em uma linguagem comum que poderia ser usada para futuras pesquisas em design de linguagem funcional.

É aparente, com base nas informações disponíveis, que superou seu objetivo original e é usado para muito mais que pesquisas. Agora é considerada uma linguagem de programação funcional de uso geral.

Se você ainda está se perguntando: "Por que devo usá-lo?", Então leia o Por que usá-lo? seção da Introdução ao Haskell Wiki.

Robert Groves
fonte
13

Haskell é uma linguagem de programação de uso geral. Pode ser usado para qualquer coisa que você use em qualquer outro idioma. Você não está limitado por nada além de sua própria imaginação. Quanto ao que é adequado? Bem, praticamente tudo. Existem poucas tarefas nas quais uma linguagem funcional não se destaca.

E sim, eu sou o Rayne do Dreamincode. :)

Também gostaria de mencionar que, caso você não tenha lido a página da Wikipedia, a programação funcional é um paradigma, como a programação orientada a objetos é um paradigma. Apenas no caso de você não saber. Haskell também é funcional no sentido em que funciona; funciona muito bem nisso.

Só porque um idioma não é um idioma orientado a objetos não significa que o idioma seja limitado por qualquer coisa. Haskell é uma linguagem de programação de uso geral e é tão genérica quanto Java.

Rayne
fonte
9

Eu sou legal, o facebook criou uma ferramenta automatizada para reescrever o código PHP. Eles analisam a fonte em uma árvore de sintaxe abstrata, fazem algumas transformações:

if ($f == false) -> if (false == $f)

Não sei por que, mas esse parece ser o estilo particular deles e eles o imprimem bastante.

https://github.com/facebook/lex-pass

Usamos o haskell para criar pequenos idiomas específicos de domínio. Enormes quantidades de processamento de dados. Desenvolvimento web. Aranhas da Web. Testando aplicativos. Escrevendo scripts de administração do sistema. Scripts de back-end, que se comunicam com outras partes. Scripts de monitoramento (temos uma DSL que funciona muito bem com munin, facilita muito a gravação do código de monitor correto para seus aplicativos.)

Todo tipo de coisa, na verdade. É apenas uma linguagem de uso geral todos os dias, com alguns recursos muito poderosos e úteis, se você tiver alguma inclinação matemática.

Edgar Klerks
fonte
6
Re: o estilo FB, colocando o falso antes das == meios se você esquecer e só escrever uma única = então o comportamento resultante será mais obviamente errado em vez de executar silenciosamente uma operação de atribuição não intencional e continuando normalmente
Magnus
A que é inteligente, sua força que particularmente erro a ser conhecida compila o tempo então.
Edgar Klerks
@ EdgarKlerks, PHP não tem tempo de compilação. Isso força a exceção a ser levantada onde estava o erro, em vez de levar a comportamentos bizarros ou erros no código distante.
Dfeuer
Embora eu veja o benefício de escrever falseà esquerda, não vejo o objetivo de usar uma ferramenta para fazê-lo automaticamente: se você já ==possui um operador, já sabe que não tem o bug que faz parte dessa parte. O lex-pass deve ser usado, e se você tiver um, =não há como saber se é ou não assim deliberadamente.
Lista Jeremy
1
@ JeremyList Talvez eles sejam realmente rigorosos no estilo de codificação. Percebo que o código formatado ordenadamente convida a escrever um código formatado de maneira mais ordenada. Apenas um palpite.
Edgar Klerks
6

De Haskell :

Haskell é uma linguagem de programação puramente funcional de uso geral padronizada, com semântica não estrita e tipagem estática forte. É nomeado após o lógico Haskell Curry.

Basicamente, o Haskell pode ser usado para criar praticamente qualquer coisa que você criaria normalmente usando outras linguagens de uso geral (por exemplo, C #, Java, C, C ++, etc.).

Andrew Hare
fonte
5

Por exemplo, para desenvolver aplicativos da Web HTML5 interativos e em tempo real. Veja Elm , cujo compilador é implementado no Haskell e cuja sintaxe empresta muito do Haskell.

thSoft
fonte
3

Esta é uma boa fonte de informações sobre o Haskell e seus usos:

Lançamentos e crescimento de código aberto Haskell

Robert Harvey
fonte
Respostas somente de link não são ideais. Dito isto, como essa pergunta está encerrada, pode ser melhor editar do que excluir.
Dfeuer
3
Parece que este recurso não foi atualizado desde 2009.
Robert Harvey