What does Haskell have to do with C++?

1 view
Skip to first unread message

Alex Queiroz

unread,
Oct 23, 2009, 7:04:22 AM10/23/09
to ccppb...@googlegroups.com

Eric Chiesse

unread,
Oct 23, 2009, 8:31:53 AM10/23/09
to ccppb...@googlegroups.com
Muito legal !!

Abraços.

Eric.

2009/10/23 Alex Queiroz <asan...@gmail.com>

Thiago Adams

unread,
Oct 23, 2009, 12:52:50 PM10/23/09
to ccppbrasil

Não sei exatamente para onde as novas linguagens estão nos levando.
Existem muitos desejos sobre o que uma linguagem de programação deve
ser e fazer.
Um destes desejos é tornar a linguagem de programação mais
declarativa. É dizer o que deve ser feito sem precisar dizer como
fazer. Um exemplo é o SQL, onde se diz qual a consulta se deseja, mas
não é necessário dizer como fazer a consulta.
Isto faz parte do dia-a-dia do programador em vários níveis
diferentes. Por exemplo, quando usamos um vector estamos dizendo que
precisamos de uma lista, sem precisarmos dizer como será feita a
alocação e deslocação dos itens. No entanto, ainda temos o “como
fazer” em mente, pois afinal por que escolhemos um vector ao invés de
um list?
Quanto maior e mais completo o framework que se usa mais declarativo
se torna o programa. No C++ vivemos entre estes dois mundos, e
declarativo e o imperativo aonde dizemos as operações e trocas de
estado das variáveis. São níveis de abstrações sobrepostos.
Algumas pessoas têm grande dificuldade de criar esta camada
declarativa e acabam criando um código que é um aglomerado de
operações. A manutenção deste software é uma engenharia reversa, pois
a lógica do que deve ser feito é perdida.
O C++ evolui de uma forma que a parte imperativa é importante, pois é
uma linguagem aonde se tem pleno controle do código gerado. E a parte
das abstrações é o desafio de tornar o código mais declarativo sem
prejuízo no desempenho. Existe ajuda de todos os lados. Acho que as
linguagens vão progredir na forma declarativa toda vez que for
descoberto uma maneira de gerar o código eficiente para tal declaração
e seja um problema genérico. O LINQ do C# é um exemplo.

Me parece que o Haskell e outras linguagem como F# se encaminham para
criar outras formas de declarações. Este artigo do link foi
interessante por mostrar esta ligação dos conceitos com vários
exemplos no C++.

Apenas como exemplo, recentemente coloquei aqui um link para um
exemplo na minha página (http://www.thradams.com/codeblog/pattern.htm)
aonde é feito um expressão regular de forma declarativa e o código é
gerado automaticamente. Não é a solução ideal de implementação pois
não minimiza estados etc..
Acho que a metaprogramaçào pode evoluir ( e esta evoluindo) de forma
que consigamos fazer o compilador programar por nós.
Mas existe um ponto também em que eu acho que vale mais a pena criar
uma representação separada e fazer um gerador de código. Por exemplo,
acho melhor pegar uma gramática EBNF e gerar um parser do que tentar
fazer isso com metaprogramaçao.

Hermann Rodrigues

unread,
Oct 23, 2009, 4:59:35 PM10/23/09
to ccppbrasil
Olá,

Só uma nota: eu não colocaria Haskell como uma linguagem nova. Ela
existe desde o início dos anos 80 e é uma adaptação de linguagens que
já existiam bem antes disso. Nesse aspecto, ela é tão antiga quando o
próprio C++. O que está acontecendo atualmente é que os programadores
tem voltado os olhos cada vez mais para linguagens funcionais como uma
possível solução para os novos desafios programação do hardware
paralelo atual.

Parte dessa popularização se deve inclusive a caras como Tim Sweeney,
fundador da Epic Games (e o cara por trás de Unreal1/2/3), que tem
sempre defendido o uso de linguagem com um jeitão funcional e cita
Haskell em várias de suas palestras.

F# é apenas mais uma implementação de uma linguagem funcional, assim
como Scala e outras. O ponto interessante aqui é que F# é da Microsoft
e a própria Microsoft financia o desenvolvimento de Haskell, inclusive
de compiladores. E isso já é feito a muitos anos mesmo.

Abraço,

On 23 out, 14:52, Thiago Adams <thiago.ad...@gmail.com> wrote:
> Não sei exatamente para onde as novas linguagens estão nos levando.
> Existem muitos desejos sobre o que uma linguagem de programação deve
> ser e fazer.
>
Reply all
Reply to author
Forward
0 new messages