Scala: sua próxima linguagem?

Scala: sua próxima linguagem?
rafael.ferreira
rafael.ferreira

Compartilhe

Uma das mudanças mais pronunciadas no cenário da informática é a modificação no  perfil da lei de Moore. Gordon Moore, fundador da Intel, observou que o número de transistores em um microprocessador dobra a cada dois anos. Esse crescimento exponencial, até poucos anos atrás, era refletido em um aumento do clock – a velocidade – dos processadores. Mas agora o clock atingiu um limite, e o adicional de transistores é cada vez mais direcionado para aumentar o número de cores de processadores e, assim, ampliar o nível de concorrência.

O que isso tudo significa é que nós, programadores comums, não podemos mais nos dar ao luxo de ignorar as dificuldades da programação concorrente. E essas dificuldades não são pequenas, como qualquer um que já teve de programar bastante para concorrência em Java, usando as primitivas wait-notify de um monitor, deve saber. O pior: você pode errar quando definir suas regiões críticas, e isso só será descoberto quando um entrelaçamento de threads específico ocorrer, o que pode vir a demorar dias com o sistema em produção, para só então o bug aparecer.

No fundo, os problemas da programação concorrente têm origem na dificuldade em sincronizar mudanças de estado. Mas existe um estilo de programação que procura evitar ao máximo mudanças explícitas de estado: a programação funcional, que tem ganhado muita atenção para desenvolver sistemas web. Scala é uma linguagem de programação moderna – sua primeira versão é de 2003 – e procura vencer as batalhas da concorrência num campo familiar: a JVM. Comprometida com o pragmatismo, Scala não é uma linguagem funcional pura, mas híbrida, procurando unir o que há de mais avançando em orientação a objetos com conceitos funcionais. Foi criada pelo professor Martin Odersky, que tem a distinção de ser o autor do compilador de Java do JDK, e vem sendo desenvolvida pela sua equipe na universidade suíça EPFL.

Embora facilitar a programação concorrente seja uma meta declarada através de imutabilidade e outros recursos, existem motivos para se interessar por Scala mesmo para quem não pretende se aventurar além do código sequencial: Inferência de Tipos permite que se programe de maneira menos burocrática sem perder as garantias de correção, refactoring e auto complete, a que estamos acostumados quando desenvolvemos em Java, Funções Anônimas permitem um estilo de programação altamente produtivo, especialmente ao lidar com coleções, Pattern Matching ajuda a trabalhar com estruturas aninhadas, como ao fazer parsing de XML, e a sintaxe flexível é ótima para DSLs internas. Esses e outros motivos levaram o Twitter a migrar de Ruby para Scala alguns de seus subsistemas.

Código Scala compila para bytecodes java normais, e é trivial invocar código Java de Scala e vice-versa. Tamanha integração com o ambiente Java levou o criador de Groovy, James Strachan, a especular que Scala é o melhor candidato a substituir Java no longo prazo. Não contente com esta polêmica, Strachan ainda afirma que se conhecesse Scala na época, não teria enxergado a necessidade da criação do Groovy. O próprio James Gosling afirmou que escolheria por Scala se tivesse de optar por outra linguagem.

Não é de hoje que a Caelum acredita em um futuro plural, e no melhor estilo programação poliglota, já desenvolvemos partes importantes de um sistema Java em Scala, onde consideramos que ela era cabível. Para quem quiser saber mais sobre Scala, o tour da linguagem é um bom recurso para matar a curiosidade. Mas é claro que o melhor meio de conhecer uma linguagem é meter a mão na massa, e para isso recomendo o tutorial First Steps to Scala, de autoria do próprio Martin Odersky colaborando com Bill Venners e Lex Spoon. Esse tutorial foi extraído de trechos do livro Programming in Scala, dos mesmos autores.

Três últimas recomendações, agora mais sobre programação concorrente em geral: veja os slides de uma apresentação do Jonas Bonér sobre os diversos paradigmas de programação concorrente e paralela, o vídeo de uma apresentação do Guy Steele, um dos "criadores" do Java, sobre Fortress, sua linguagem de pesquisa para computação científica maciçamente paralela, e um capítulo de livro do Peter van Roy, também sobre paradigmas de programação concorrente e paralela. Pra quem prefere o bom e velho Java, vale o livro Java Concurrency in Practice, que trata o assunto a fundo e chega a detalhes da JVM e do funcionamento do pacote java.util.concurrent.

Veja outros artigos sobre Inovação & Gestão