Como posso usar a programação funcional no mundo real? [fechadas]

103

As linguagens funcionais são boas porque evitam bugs ao eliminar o estado, mas também porque podem ser facilmente paralelizadas automaticamente para você, sem que você precise se preocupar com a contagem de threads.

Porém, como um desenvolvedor Win32, posso usar Haskell para algumas dlls do meu aplicativo? E se eu fizer isso, há uma vantagem real que seria tirada automaticamente para mim? Se sim, o que me dá essa vantagem, o compilador?

O F # paraleliza funções que você escreve em vários núcleos e CPU's automaticamente para você? Você veria a contagem de threads no gerenciador de tarefas aumentar?

Basicamente, minha pergunta é: como posso começar a usar Haskell de maneira prática, e realmente verei alguns benefícios se o fizer?

Brian R. Bondy
fonte
2
Pessoalmente, gostaria de pesquisar erlang - mas sou eu.
Jason Bunting
2
Para esclarecer um pouco, já tenho experiência com algumas linguagens de programação funcionais diferentes e sei como funcionam e quais são suas diferenças. Mas esta questão é especificamente: como faço para colocá-lo em um uso no mundo real.
Brian R. Bondy
1
possível duplicata de Por que linguagens funcionais?

Respostas:

41

Parece que o livro Real World Haskell é exatamente o que você está procurando. Você pode lê-lo gratuitamente online:

http://book.realworldhaskell.org/

Apocalisp
fonte
Estou esperando para ser impresso. Parece que será um dos melhores livros que existe. Aposto que servirá às pessoas interessadas em Haskell melhor do que Practical Ocaml em Ocaml
Friedrich
25

F # não contém nenhum pó mágico que passará funções para diferentes CPUs ou máquinas. O que F # / Haskell e outras linguagens de programação funcionais fazem é tornar mais fácil para você escrever funções que podem ser processadas independentemente do thread ou CPU em que foram criadas.

Não me sinto bem postar aqui um link de um podcast do qual participo, parece um pouco estranho, mas no episódio Herding Code onde conversamos com Matt Podwysocki fizemos a mesma pergunta e ele deu algumas respostas interessantes. Também há muitos links bons relacionados à programação funcional nesse episódio. Encontrei um link intitulado " Por que a programação funcional é importante " que pode fornecer algumas respostas para você.

ScottKoon
fonte
21
Então postarei para você: herdingcode.com/?p=45 :)
Brian R. Bondy
14

Isso também pode ser interessante: " Programação funcional do mundo real "

Os exemplos estão em F # e C #, mas a teoria é bastante genérica. Pelo que li (pré-lançamento) é definitivamente interessante, mas até agora acho que está me fazendo querer ficar cada vez mais com C #, usando bibliotecas como extensões paralelas.

Marc Gravell
fonte
Você ainda sente que "quer ficar cada vez mais com o C #"? F # oferece alguns recursos interessantes. O maior impulso que recebi é menos digitação (o que significa menos atrito no processo de expressar soluções em código).
Daniel de
1
@Daniel em alguns aspectos, ainda mais; p As ferramentas em que trabalho podem ser atípicas.
Marc Gravell
8

Você não mencionou, mas presumo que esteja usando C ++. Uma maneira potencialmente fácil de entrar no funcional é via C ++ / CLI para F #. C ++ contém "pó mágico de pixie" (chamado IJW: It Just Works) para permitir que você chame dentro e fora do código gerenciado. Com isso, chamar o código F # é quase tão simples quanto a partir do C #.

Eu usei isso em um programa (FreeSWITCH), que é escrito inteiramente em C / C ++. Com um único C ++ / CLI gerenciado (use a opção / clr), ele faz a transição mágica para o código gerenciado e, a partir daí, posso carregar meus plug-ins F # e executá-los. Para tornar as coisas ainda mais fáceis para a implantação, o F # pode vincular estaticamente todas as suas dependências, portanto, você não precisa implantar os arquivos de tempo de execução do F #. Outra coisa que torna o código CLR atraente é que você pode passar código gerenciado (delegados) para código C, e o tempo de execução automaticamente faz uma conversão para você.

Se você decidir seguir o caminho de Haskell, o recurso que procurará é FFI: Interface de Função Estrangeira. No entanto, não acho que isso lhe dará o mesmo nível de integração que C ++ / CLI com F #.

MichaelGG
fonte
6

No momento estou aprendendo Haskell sozinho, quando você começa a aprender, não parece muito intrigante porque a experiência de aprendizagem não é NADA como aprender uma linguagem como C #, é um mundo totalmente novo, mas percebi que poderia escrever muito, muito complexo expressões em apenas algumas linhas de código, quando olhei de volta para o código, ele era muito mais conciso, era pequeno e compacto. Estou absolutamente adorando! Você pode realmente escrever programas do mundo real que serão menores, mais fáceis de manter e muito mais complexos do que a maioria das outras linguagens permite. Eu voto para que você aprenda !!

Boa sorte.

Rayne
fonte
4

Já que você mencionou Win32 e DLLs, presumo que esteja trabalhando com código não gerenciado. Nesse caso, o GHC funcionará muito bem para você. No final do ano passado, escrevi um servidor DDE no Windows usando FFI para conversar com as bibliotecas MS DDE e, surpreendentemente, foi uma experiência extremamente agradável (especialmente porque sou um cara do Unix). O FFI de Haskell é poderoso (até mesmo suporta, por exemplo, callbacks em funções Haskell de C ou outras bibliotecas), e ter a verificação de tipo de Haskell ao escrever código de nível C é como um sonho que se tornou realidade.

Esse último ponto é uma das maiores vantagens do Haskell: o sistema de tipos é incrível. Dito isso, é como qualquer ferramenta poderosa; é preciso tempo e esforço para fazer bom uso dele.

Então, sim, é possível começar escrevendo pequenos pedaços de código em Haskell que se vinculam ao resto do seu código (embora você possa achar mais fácil começar com pequenos programas Haskell que se vinculam a seu outro código), e vale a pena gastar uma boa quantidade de tempo aprendendo sobre isso e usando-o sempre que puder. Você pode acabar como eu, planejando um projeto razoavelmente grande, totalmente integrado ao código do Windows (no meu caso, um suplemento sofisticado do Excel) em Haskell.

cjs
fonte