Programação (funcional) moderna.
Faz algum tempo comecei este post, mas não tinha tido a inspiração para terminar. O post anterior, sobre a comparação entre recursos de linguagens "funcionais" modernas e de linguagens orientadas a objeto serviu como estopim para terminar de escrever.
Para quem trabalha com programação usando variantes de ML e/ou Miranda, a fatídica pergunta "que linguagem(ns) você usa?" costuma ser um tiro no escuro. A resposta dificilmente é conhecida, na maioria dos casos: O'Caml e Haskell, mesmo sendo as mais conhecidas, são bem pouco utilizadas fora da academia.
Logo, você se depara com o clássico ponto de interrogação, que aparece no rosto da pessoa. Para esclarecer o que você está falando, a tentação inicial é classificá-las como linguagens funcionais, preferencialmente atribuindo também o adjetivo "modernas" - já mantendo no engatilhadas as respostas para quem diz "sim, sei, que nem LISP". Entretanto, classificar como uma linguagem funcional é muito comum: se você perguntar para qualquer programador de Haskell o que é a linguagem que ele usa, a resposta é essa. Alguns irão se extender um pouco mais, dizendo que é "fortemente tipada", e outros até vão falar em "lazy".
Entretanto, mesmo que o ponto principal de Haskell ou de O'Caml seja o paradigma funcional, o que faz delas linguagens flexíveis ou modulares não é o fato de serem funcionais, e sim a combinação dos recursos que elas oferecem. Tipagem forte e estática, tagged unions, pattern matching, inferência de tipos, type classes (no caso da segunda), funtores (no caso da primeira), tipagem algébrica, e outros tantos features que são igualmente importantes para a modularidade e aplicação real da linguagem.
Faz algum tempo que li um post não diretamente relacionado com o assunto em questão, mas que me levou a pensar sobre a sinergia nestas linguagens de programação, e enxergar as suas grandes vantagens como um resultado direto da combinação dos seus recursos. E no fundo, esta é a grande vantagem delas: a facilidade que o programador possui para se expressar através da combinação dos diversos recursos que elas oferecem.
Talvez esteja na hora de redefinir o adjetivo "moderno" na área das linguagens de programação, ou encontrar um novo para descrever esta gama de linguagens realmente modernas, que está anos-luz à frente das clássicas imperativas-OO.
E é isso.