Esta questão surge da questão /software/25569/is-haskell-worth-learning
Geralmente, algumas declarações repetidas são feitas, sobre como o Haskell aprimora suas habilidades de codificação em outros idiomas e, além disso, isso ocorre porque o Haskell é apátrida e isso é uma coisa boa.
Por quê?
Vi alguém comparar isso apenas digitando com a mão esquerda, ou talvez fechando os olhos por um dia e apenas confiando no toque. Certamente há mais do que isso?
Está relacionado ao acesso à memória de hardware ou a outra coisa que representa um grande ganho de desempenho?
Respostas:
há pelo menos três grandes vantagens em cima da minha cabeça:
torna os programas mais próximos das expressões matemáticas. Em matemática,
x
não muda, você só não sabe o que é até resolver a equação.No final, não é mudança de estado (afinal de contas, é assim que o computador funciona em nível baixo); mas está confinado pelo idioma a lugares específicos. isso permite ao compilador grandes oportunidades de mover o código para otimizá-lo, pois sabe que não altera nada do qual outro código dependa.
O código simultâneo não precisa ser sincronizado para acessar dados não alteráveis; portanto, a simultaneidade é aprimorada, tanto nos sistemas de memória compartilhada SMP (todos os sistemas com vários núcleos de hoje) quanto em clusters frouxos.
fonte
Aqui está outra vantagem: acoplamento reduzido. Se você tiver um código como:
e em outro lugar você tem:
então as duas funções dependem implicitamente . Não há uma maneira fácil de dizer que a chamada
doStuff
é afetada pela chamadadoOtherStuff
. Sem estado mutável, você teria que tornar a conexão explícita.Obviamente, esse não é um problema com todos os estados mutáveis - o problema é com o estado mutável generalizado. A solução real é ter a imutabilidade por padrão e alguma maneira de "marcar" e restringir o estado mutável para exatamente onde você precisar.
fonte
Uma resposta simplificada é: quando você vê um nome em uma linguagem puramente funcional, sabe qual é o valor associado com uma simples pesquisa de sua definição. Se você tiver variáveis mutáveis, poderá saber apenas por qual das várias atribuições foi executada por último, para analisar também o fluxo de controle, que por sua vez pode ser condicional, deixando-o com várias possibilidades. Para obter uma explosão exponencial, você só precisa considerar que o RHS das atribuições é dependente de variáveis; portanto, é necessário analisá-las recursivamente também.
O ponto principal da análise acima é que é insustentável sem comentários explicando a intenção, os invariantes e a semântica: pode ser difícil de interpretar e pode ser difícil verificar se a semântica é respeitada no código real.
Essa resposta é basicamente uma expansão do ponto 1 de @ Javier.
Penso que é também uma explicação da popularidade do regime fraudulento de OO: com OO, o estado mutável é encapsulado, o que facilita muito a análise, localizando as mutações em certa medida e permitindo uma expressão muito mais robusta e verificação da semântica.
Tendo observado isso, a programação funcional não é a resposta. A resposta certa é um sistema que suporta programação indutiva (funcional) e coindutiva (processual), para que as ferramentas certas possam lidar com programação sem estado e com estado. Só que a teoria construtiva (funcional) está bem estabelecida, enquanto a teoria da gestão do estado ainda está em sua infância.
fonte
Como autor do Siege , um SGBD escrito em Haskell, alguns podem chamar minha opinião de estado mutável em conflito. Espero mostrar o contrário.
O objetivo do estado mutável é descrever o estado atual em que um sistema está. Digamos que você tenha um blog e seja back-end por um banco de dados, o banco de dados descreve as postagens que você possui em seu blog no momento em que você consulta isto. Quantas postagens existem agora?
Compare isso com o estado imutável que é usado para transmitir fatos. Quantas postagens havia no dia 12 de agosto?
Os fatos são fáceis de raciocinar, o estado mutável não é. No entanto, o estado mutável não é algum efeito impuro do mal que deve ser banido do alcance de nossas mentes; muitas vezes precisamos que coexista no mundo mutável em que vivemos, só precisamos usá-lo com mais moderação.
fonte