Há dez anos (e alguns meses), Michel Schinz anunciou a primeira implementação da linguagem de programação Scala. Quando anunciada, foi descrita como "uma linguagem que integra facilmente programação orientada a objetos e funcional" e que "é projetada para expressar padrões de programação comuns de uma forma concisa, elegante e com segurança de tipos".
O anúncio original dizia:
Nós gostaríamos de anunciar que está disponível a primeira implementação da linguagem de programação Scala. Scala integra facilmente a programação orientada a objetos e a funcional. É projetada para expressar padrões comuns de programação de uma forma concisa, elegante e com segurança de tipos. Scala apresenta várias construções de linguagem inovadoras. Por exemplo:
- Tipos abstratos e composição mixin unificam ideias de sistemas de objetos e de módulos.
- A correspondência de padrões sobre hierarquias de classe unifica acesso a dados funcionais e orientados a objetos. Isso simplifica muito o processamento de árvores XML.
- Uma sintaxe flexível e um sistema de tipos que permitem a construção de bibliotecas avançadas e de novas linguagens específicas de domínio (DSLs).
Ao mesmo tempo, Scala é compatível com Java. Bibliotecas e frameworks Java podem ser utilizados sem a necessidade de código adaptativo ou de declarações adicionais.
A implementação atual de Scala roda na JVM. Requer o JDK 1.4 e pode rodar em Windows, MacOS, Linux, Solaris e na maioria dos outros sistemas operacionais. A versão .NET do Scala está atualmente em desenvolvimento.
Embora a versão .NET não esteja mais está sendo mantida, o objetivo era prover uma linguagem comum que rodaria em ambas máquinas virtuais e permitisse a portabilidade entre sistemas operacionais. No entanto, avanços no compilador just-in-time (JIT) da JVM e uma dependência cada vez maior do bytecode Java contribuíram para que a versão .NET fosse interrompida quando o Scala 2.10 foi lançado.
Scala popularizou a programação funcional às linguagens da JVM e estimulou diretamente a inclusão de lambdas (frequentemente chamadas indevidamente de closures) na versão Java 8 que estava por vir, além de métodos default para interfaces. Ambos têm estado disponíveis em Scala desde o princípio através de funções e traits, e a aceitação desses recursos proveu novas formas de programação de maneira mais concisa e testável.
Com o sucesso da Scala veio a sua complexidade, já que as características da linguagem podem ser usadas tanto para excelente quanto má legibilidade. Ao permitir que quaisquer identificadores Unicode sejam usados como nomes de métodos e funções (inclusive símbolos), a biblioteca padrão Scala tem crescido para incluir funções como =:=, :+ e :\ entre outros. O dilema do Scala é melhorar a capacidade de escrita ao custo potencial de sua legibilidade.
Por fim, Scala ainda se vê como uma linguagem de pesquisa, experimentando novos recursos e tornando obsoletas as funcionalidades mais antigas (como o pacote original Actors, que lhe trouxe fama semelhante às co-rotinas da linguagem Go). O bytecode gerado varia de versão para versão, o que significa que há limitados projetos de código aberto compilados para todas elas, com exceção da versão atual do Scala, e apesar de a versão 2.10 já estar disponível há mais de um ano, a transição entre os maiores releases de Scala geralmente passa por um processo penoso.
Com o lançamento do Java 8 neste ano, trazendo um subconjunto de características que o Scala já possuía para a JVM, será interessante ver o que será acrescentado ao Scala daqui pra frente. Compatibilidade binária traria estabilidade à linguagem, mas parece distante demais no momento, como parecia há quase uma década; mas o tempo dirá. Resta aguardar o que Scala trará de inovações nos próximos 10 anos.