Fonte [Anúncio do Dart 2.2: Código Nativo Mais Rápido, Suporte para Literais Definidos]Hoje (26 de fevereiro de 2019), anunciamos o lançamento do Dart 2.2 SDK, uma atualização para o Dart 2 que oferece melhor desempenho no código
AOT (antecipadamente) e suporte para literais de conjunto.

Melhorando o desempenho do dardo para o desenvolvimento de vibração
Continuamos nosso trabalho para tornar o
código compilado pela AOT , como aplicativos Flutter, ainda mais rápido. No Dart 2.1,
reduzimos o custo da verificação
de tipo, reduzindo significativamente o custo da verificação de tipo para o código compilado pelo AOT e o código executado em uma máquina virtual com compilação JIT (just-in-time).
No Dart 2.2, nos concentramos no desempenho do código compilado pela AOT, melhorando o desempenho
em 11-16% nas marcas de microbench (aumentando o tamanho do código em ~ 1%). Essa melhoria é resultado do trabalho realizado em vários trimestres, a fim de reduzir os custos de chamadas estáticas. Nosso código AOT otimizado agora pode chamar o objeto solicitado diretamente usando uma chamada de PC (ou seja, usando o
contador de programas ). Antes disso, tivemos que realizar uma pesquisa várias vezes no pool de objetos para determinar o endereço necessário. Essas otimizações são especialmente úteis quando o código contém muitos construtores e chamadas de método estático, como o código da interface do usuário do Flutter, que contém muitos widgets.
Suporte para literais definidos no Dart 2.2
A biblioteca principal do Dart (dart: core) contém várias classes de coleção:
Mapas ,
Listas e
Conjuntos . Mapas são conjuntos de pares de valores-chave. As listas são sequências ordenadas de valores, cada uma das quais pode ser acessada usando o índice e que pode ocorrer várias vezes. Conjuntos são coleções não ordenadas de valores em que cada valor pode ocorrer apenas uma vez e onde pode ser efetivamente verificado para verificar se existe um valor na coleção.
As coleções do Dart geralmente são inicializadas com constantes em tempo de compilação, e o Dart oferece uma sintaxe conveniente para escrever essa inicialização. Na lista Dart, você pode inicializar da seguinte maneira:
const List<String> releases = ['Dart 2.0', 'Dart 2.1', 'Dart 2.2'];
Anteriormente, o Dart suportava apenas a sintaxe literal para List e Map; portanto, a inicialização do Set era complicada, pois precisávamos inicializar através da lista:
Set<String> currencies = Set.of(['EUR', 'USD', 'JPY']);
Este código não é apenas inconveniente e ineficiente; a falta de suporte literal impede a criação de um conjunto imutável em tempo de compilação. Com a adição do suporte literal ao conjunto no Dart 2.2, inicialize o conjunto e torne-o imutável usando uma nova sintaxe conveniente:
const Set<String> currencies = {'EUR', 'USD', 'JPY'};
Exemplos reais do uso de Set literals com o comando Flutter podem ser encontrados
aqui . Para uma visão mais profunda do problema, sugerimos que você se familiarize com o
tour por idioma atualizado do Dart 2.2 .
Inove com o Dart 2 Common Front-End (CFE)
O Dart oferece várias implementações próprias: a Dart VM usada pelo Flutter, o compilador dart2js e o compilador Dart dev (dartdevc), que usam o compilador Common Front-End. O Dart Common Front End, ou CFE, analisa o código do Dart, realiza inferência de tipo e converte o Dart em um idioma intermediário de nível inferior, que os compiladores do back-end aceitam como entrada.
Literais de conjunto são um exemplo de construção de linguagem que conseguimos implementar rapidamente graças ao CFE. O código para analisar literais de conjunto e executar inferência de tipo foi implementado uma vez usando o CFE para todas as implementações. Além disso, criamos uma implementação de transição que pode ser usada pelos compiladores de back-end no estágio inicial. Em uma implementação intermediária, uma versão mutável do Conjunto de literais especificado foi traduzida durante a compilação para a forma equivalente:
Set<String> currencies = Set<String>()..add('EUR')..add('USD')..add('JPY');
Uma implementação intermediária de literais Set constantes difere por não poderem ser montadas gradualmente em partes. Em vez disso, implementamos isso em termos de uma classe Set imutável privada que envolve um Map imutável, em que os elementos Set são chaves do Mapa:
const Set<String> currencies = _UnmodifiableSet<String>({'EUR': null, 'USD': null, 'JPY': null});
A classe imutável Set implementa métodos na interface Set, delegando-os ao mapa interno.
Em geral, fomos capazes de implementar literais de conjunto inicialmente como uma função exclusiva do CFE. O back-end pode usar imediatamente a implementação do CFE e implementar seu próprio suporte posteriormente. Isso permitiu que os compiladores de back-end adiassem seu suporte até que os aspectos de desempenho dessa função fossem melhor compreendidos.
Especificação do dardo 2.2
O Dart 2 foi uma atualização tão significativa para o Dart que demoramos um tempo para atualizar a
especificação oficial do idioma para atender a todas as alterações que fizemos. Finalmente concluímos este trabalho e a especificação foi atualizada para a versão Dart 2.2. Também mudamos a especificação de idioma para o
novo repositório e adicionamos integração contínua para garantir que a especificação seja constantemente atualizada no formato PDF à medida que as versões futuras da linguagem Dart evoluírem. As especificações 2.2 e futuras do Dart 2.x estão disponíveis
na página de especificações do Dart .
Como instalar o Dart 2.2
O Dart SDK 2.2 está disponível na página inicial do Dart a partir de hoje. Se você é um desenvolvedor do Flutter, o Dart 2.2 já está incluído. (Nota: no comando console do flutter doctor, os canais atuais do mestre e do desenvolvedor do Flutter reportarão o Dart 2.2.
A versão estável de hoje do Flutter 1.2 emitirá o Dart 2.1.2; esta versão possui os mesmos recursos do Dart 2.2).
Por enquanto é tudo. Esperamos que você goste do Dart 2.2!
Muito obrigado por sua ajuda na tradução do
PsyHaSTe