[Esta nota foi melhorada e enriquecida pela equipe editorial do InfoQ Brasil]
Lars Bak, criador do V8, o engine JavaScript do Google Chrome, e Gilad Bracha anunciaram durante seu keynote na GotoCon na Dinamarca, a nova linguagem Dart.
A linguagem, proposta pelo Google como uma alternativa ao JavaScript, foi apresentada como um preview de tecnologia, e ainda não está disponível no Chrome. Tem sintaxe familiar para os desenvolvedores Java e JavaScript e suporte a concorrência no estilo Erlang/Actor.
A nova linguagem oferece herança simples baseada em classes e traz suporte a interfaces. Outras características são tipos estáticos opcionais e tipos genéricos reificados, além de escopo léxico real e threads simples. São suportadas também a sobrecarga de operadores e a interpolação de strings ("Hello ${texto}"), além da sintaxe Lambda: (x) => x.
O exemplo abaixo, adaptado da documentação, demonstra um pouco da sintaxe da linguagem.
interface Forma {
num perimetro();
}
class Retangulo implements Forma {
final num altura, largura;
Retangulo(num this.altura, num this.largura); // Sintaxe compacta de constrututor num perimetro() => 2*altura + 2*largura; // Sintaxe curta para funções
}
class Quadrado extends Retangulo {
Quadrado(num tamanho) : super(tamanho, tamanho);
}
Em Dart, mesmo se os argumentos ou variáveis forem definidos com tipos incorretos, o código poderá ser executado; entretanto as ferramentas irão avisar sobre inconsistências.
As interfaces em Dart suportam implementação através de factories; por exemplo, a interface Pessoa teria uma factory PessoaFactory. Interfaces têm construtores; chamadas ao construtor são direcionadas à factory definida na interface.
A concorrência em Dart é implementada com Isolates. Cada Isolate é um processo conceitual, no estilo da linguagem Erlang. Não há compartilhamento e a comunicação ocorre via passagem de mensagens. Isolates têm uma ou mais "portas" e podem ser executados em paralelo.
A distribuição do Dart inclui um conjunto de APIs básicas para estruturas de dados e operações, mostradas na figura abaixo (extraída da documentação técnica do Google).
O compilador DartC é capaz de compilar o código para JavaScript comum; ou o código em Dart pode ser executado em uma VM dedicada. Uma terceira opção é utilizar ferramentas que acompanham a Dart para criar uma imagem do heap de uma aplicação e empacotá-la em um formato otimizado, que pode ser carregado quase que instantaneamente, de forma similar ao sistema de imagens do Smalltalk.
Entre as ferramentas oferecidas estão plugins para Eclipse, com auto-complementação de código e outras facilidades.
É possível baixar uma versão preview da linguagem no site oficial ou no Google Code do projeto. Os interessados nos detalhes de implementação da linguagem podem examinar a especificação da linguagem (pdf).