A empresa Google lançou a versão 2.14 da linguagem de programação Dart, que continua o desenvolvimento de uma ramificação completamente reformulada do Dart 2, diferenciando-se da versão original da linguagem Dart pela utilização de tipagem estática forte (os tipos podem ser inferidos automaticamente, portanto, a especificação de tipos não é obrigatória, mas a tipagem dinâmica não é mais utilizada, e o tipo inicialmente inferido é fixado à variável e, a partir de então, é aplicada uma verificação de tipo rigorosa).
Características da linguagem Dart:
- Sintaxe familiar e fácil de aprender, natural para programadores que vêm do JavaScript, C e Java.
- Proporciona inicialização rápida e alta performance para todos os navegadores web modernos e diferentes tipos de ambientes, desde dispositivos portáteis até potentes. servidores.
- Possibilidade de definir classes e interfaces, permitindo utilizar encapsulamento e reutilizar métodos e dados existentes.
- A especificação de tipos facilita a depuração e a identificação de erros, torna o código mais claro e legível, simplificando sua manutenção e análise por desenvolvedores externos.
- Entre os tipos suportados estão: vários tipos de hashes, arrays e listas, filas, tipos numéricos e de string, tipos para definir data e hora, expressões regulares (RegExp). Existe a possibilidade de criar seus próprios tipos.
- Para organizar a execução paralela, recomenda-se usar classes com o atributo isolate, cujo código é executado completamente em um espaço isolado em uma área de memória separada, interagindo com o processo principal através do envio de mensagens.
- Suporte para bibliotecas que facilitam a manutenção e a depuração de grandes projetos web. Implementações de funções de terceiros podem ser conectadas como bibliotecas compartilhadas. Os aplicativos podem ser divididos em partes e a responsabilidade por cada parte pode ser dada a uma equipe de programadores diferente.
- Conjunto de ferramentas prontas para suportar o desenvolvimento na linguagem Dart, incluindo a implementação de ferramentas de desenvolvimento dinâmico e depuração com correção de código em tempo real ('edit-and-continue').
- Para simplificar o desenvolvimento na linguagem Dart, é fornecido o SDK, um gerenciador de pacotes pub, o analisador de código estático dart_analyzer, um conjunto de bibliotecas, o ambiente de desenvolvimento integrado DartPad e plugins que suportam Dart para IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 e Vim.
- Pacotes adicionais com bibliotecas e utilitários são distribuídos através do repositório pub, que possui mais de 20 mil pacotes.
Principais mudanças na versão Dart 2.14:
- Adicionado um novo operador de deslocamento triplo (>>>) que, ao contrário do operador «>>», realiza um deslocamento lógico e não aritmético, funcionando sem considerar o bit de sinal (o deslocamento é feito sem separar números positivos e negativos).
- Removida a limitação em argumentos de tipo, que não permitia usar tipos genéricos de funções como argumento de tipo. Por exemplo, agora é possível especificar: late List<T Function(T)> idFunctions; var callback = [(T value) => value]; late S Function<S extends T Function(T)>(S) f;
- Permitido especificar argumentos com tipos em anotações, como @Deprecated. Por exemplo, agora é possível indicar: @TypeHelper(42, "O significado")
- Na biblioteca padrão (core), a classe Object ganhou métodos estáticos hash, hashAll e hashAllUnordered. Na classe DateTime, melhorada a manipulação do horário local ao converter horas entre horário de verão e horário padrão que não são mútiplo de uma hora (por exemplo, na Austrália, um deslocamento de 30 minutos é utilizado). No pacote ffi, adicionada a suporte ao mecanismo de alocação de memória arena, que libera recursos automaticamente. No pacote ffigen, adicionada a possibilidade de gerar definições de tipo typedef Dart a partir da linguagem C.
- Os 250 pacotes mais populares do repositório pub.dev e 94% dos top-1000 foram traduzidos para aplicar o modo seguro de uso de valores "Null" (null safety), que evita falhas causadas por tentativas de uso de variáveis cujo valor não está definido e é definido como "Null". O modo implica que variáveis não podem ter valores indefinidos, a menos que um valor null seja atribuído explicitamente. No modo estrito, os tipos de variáveis são rigorosamente considerados, permitindo que o compilador aplique otimizações adicionais. A conformidade dos tipos é verificada em tempo de compilação, por exemplo, se houver tentativa de atribuir um valor "Null" a uma variável cujo tipo não permite estado indefinido, como "int", um erro será gerado.
- Conjuntos unificados de regras para o analisador de código (linter) foram propostos, garantindo suporte simultâneo para verificação de conformidade com as recomendações de estilo de código para Dart e o framework Flutter. Histórica e tradicionalmente, as regras de estilo de código para Flutter e Dart eram diferentes; além disso, para Dart, existiam dois conjuntos de regras em uso — o detalhado do Google e as regras da comunidade de desenvolvedores Dart. Com o Dart 2.14, um novo conjunto comum de regras para linter foi introduzido, que será aplicado por padrão em novos projetos Dart e no Flutter SDK. Este conjunto inclui regras básicas (pacote lints/core.yaml), regras adicionais recomendadas (lints/recommended.yaml) e recomendações específicas para Flutter (flutter_lints/flutter.yaml). Aos usuários das regras detalhadas, recomenda-se a transição para o novo estilo de codificação, baseado nas diretrizes da documentação do Dart.
- O formatter recebeu otimizações no formato de blocos de código em cascata, permitindo aumentar significativamente o desempenho da formatação e evitar a interpretação ambígua da pertença dos elementos da expressão. Por exemplo, a chamada «..doIt» na expressão «var result = errorState ? foo : bad..doIt()» refere-se não à parte condicional do bloco «bad», mas à expressão inteira, portanto, a formatação agora é feita da seguinte forma: var result = errorState ? foo : bad ..doIt();
- O SDK agora suporta processadores Apple M1 (Silicon), incluindo a capacidade de executar Dart VM, utilitários e componentes do SDK em sistemas com processador Apple Silicon, além do suporte à compilação de arquivos executáveis para esses chips.
- O comando «dart pub» agora inclui suporte para um novo arquivo auxiliar «.pubignore», que permite definir uma lista de arquivos que serão ignorados ao publicar um pacote no repositório pub.dev. As configurações especificadas não se sobrepõem à lista de ignorados «.gitignore» (em algumas situações, é necessário não enviar arquivos para o pub.dev que são úteis no Git, por exemplo, scripts internos utilizados durante o desenvolvimento).
- Foi realizado um trabalho para melhorar o desempenho do comando «dart test», que agora não requer recompilação dos testes após a alteração do pubspec, desde que o número da versão não tenha mudado.
- O suporte à compilação no modo de compatibilidade com ECMAScript 5 foi descontinuado (essa mudança resultará na perda de compatibilidade com o navegador IE11).
- Algumas utilidades, como stagehand, dartfmt e dart2native, foram declaradas obsoletas, substituídas por comandos embutidos que podem ser invocados através da ferramenta dart.
- O mecanismo VM Native Extensions foi classificado como obsoleto. Para invocar código nativo a partir do código escrito em Dart, recomenda-se usar a nova interface Dart FFI (Foreign Function Interface).
Foi lançada uma versão significativa do framework Flutter 2.5, que é considerada uma alternativa ao React Native e permite, a partir de uma única base de código, criar aplicativos para as plataformas iOS, Android, Windows, macOS e Linux, assim como desenvolver aplicativos que funcionem em navegadores. O Flutter é a base para a interface personalizada do sistema operacional microkernel Fuchsia, em desenvolvimento no Google.
A maior parte do código do Flutter é implementada na linguagem Dart, enquanto o motor runtime para a execução das aplicações é escrito em C++. Ao desenvolver aplicações, além da linguagem nativa do Flutter, Dart, é possível usar a interface Dart Foreign Function para chamar código C/C++. A alta performance é alcançada pela compilação das aplicações em código de máquina para as plataformas-alvo. Não é necessário recompilar o programa após cada alteração — Dart oferece um modo de hot reload, permitindo fazer mudanças em uma aplicação em execução e avaliar o resultado imediatamente.
Principais mudanças no Flutter 2.5:
- Foram realizadas otimizações significativas de desempenho. No iOS e macOS, foi implementada a pré-compilação de shaders para a API gráfica Metal. A eficiência no processamento de eventos assíncronos foi aumentada. O problema de atrasos durante a liberação de memória pelo coletor de lixo de imagens não utilizadas foi resolvido (por exemplo, durante a reprodução de um GIF animado de 20 segundos, o número de operações de coleta de lixo foi reduzido de 400 para 4). Os atrasos na transmissão de mensagens entre Dart e Objective-C/Swift (iOS) ou Java/Kotlin (Android) foram reduzidos em até 50%. Foi adicionada suporte para compilação nativa em sistemas com chip Apple Silicon.

- Para a plataforma Android, foi estabelecido suporte para aplicativos em modo de tela cheia. A implementação do conceito de design "Material You" foi avançada, apresentado como uma versão da próxima geração do Material Design. Adicionada um novo estado MaterialState.scrolledUnder, implementada a exibição dinâmica das barras de rolagem com base no redimensionamento e oferecido uma nova interface para exibição de banners de notificações.
- As capacidades do plugin para trabalho com câmeras foram bastante expandidas, incluindo recursos para controle de foco automático, exposição, flash, zoom, supressão de ruídos e resolução.
- As ferramentas para desenvolvedores (DevTools) foram aprimoradas, com um modo de inspeção de widgets atualizado, além de ferramentas para identificar atrasos na renderização e monitorar a compilação de shaders.

- Os plugins para Visual Studio Code e IntelliJ/Android Studio foram melhorados.
Fonte: opennet.ru


