Linguagem de programação Dart 2.15 e estrutura Flutter 2.8 disponíveis

O Google publicou o lançamento da linguagem de programação Dart 2.15, que continua o desenvolvimento de um ramo Dart 2 radicalmente redesenhado, que difere da versão original da linguagem Dart no uso de digitação estática forte (os tipos podem ser inferidos automaticamente, especificando assim tipos não são necessários, mas a digitação dinâmica não é mais usada e no cálculo inicial o tipo é atribuído à variável e a verificação estrita de tipo é aplicada posteriormente).

Recursos da linguagem Dart:

  • Sintaxe familiar e fácil de aprender, natural para programadores JavaScript, C e Java.
  • Garantindo inicialização rápida e alto desempenho para todos os navegadores modernos e vários tipos de ambientes, desde dispositivos portáteis até servidores poderosos.
  • A capacidade de definir classes e interfaces que permitem o encapsulamento e a reutilização de 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 e simplifica sua modificação e análise por desenvolvedores terceiros.
  • Os tipos suportados incluem: vários tipos de hashes, matrizes e listas, filas, tipos numéricos e de string, tipos para determinar data e hora, expressões regulares (RegExp). É possível criar seus próprios tipos.
  • Para organizar a execução paralela, propõe-se a utilização de classes com o atributo isolado, cujo código é executado inteiramente em espaço isolado em uma área de memória separada, interagindo com o processo principal por meio do envio de mensagens.
  • Suporte para uso de bibliotecas que simplificam o suporte e depuração de grandes projetos web. Implementações de funções de terceiros podem ser incluídas na forma de bibliotecas compartilhadas. Os aplicativos podem ser divididos em partes e confiar o desenvolvimento de cada parte a uma equipe separada de programadores.
  • Um conjunto de ferramentas prontas para apoiar o desenvolvimento na linguagem Dart, incluindo a implementação de desenvolvimento dinâmico e ferramentas de depuração com correção de código em tempo real (“editar e continuar”).
  • Para simplificar o desenvolvimento na linguagem Dart, ele vem com um SDK, um gerenciador de pacotes pub, um analisador de código estático dart_analyzer, um conjunto de bibliotecas, um ambiente de desenvolvimento integrado DartPad e plug-ins habilitados para 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 cerca de 22 mil pacotes.

Principais mudanças na versão Dart 2.15:

  • Fornece ferramentas para execução paralela rápida de tarefas com isolamento de manipuladores. Em sistemas com vários núcleos, o tempo de execução do Dart, por padrão, executa o código do aplicativo em um núcleo da CPU e usa outros núcleos para executar tarefas do sistema, como E/S assíncrona, gravação em arquivos ou realização de chamadas de rede. Para aplicações que necessitam executar seus manipuladores em paralelo, por exemplo, para renderizar animação na interface, é possível lançar blocos de código separados (isolados), isolados uns dos outros e executados em outros núcleos da CPU simultaneamente com o thread principal da aplicação. . Para se proteger contra erros que surgem durante a execução simultânea de código trabalhando com o mesmo conjunto de dados, é proibido o compartilhamento de objetos mutáveis ​​​​em diferentes blocos isolados e um modelo de passagem de mensagens é usado para interação entre manipuladores.

    O Dart 2.15 introduz um novo conceito - grupos de blocos isolados (grupos isolados), que permite organizar o acesso compartilhado a várias estruturas de dados internas em blocos isolados que fazem parte do mesmo grupo, o que pode reduzir significativamente a sobrecarga ao interagir entre manipuladores em um grupo . Por exemplo, iniciar um bloco isolado adicional em um grupo existente é 100 vezes mais rápido e requer de 10 a 100 vezes menos memória do que iniciar um bloco isolado separado, devido à eliminação da necessidade de inicializar estruturas de dados do programa.

    Apesar de blocos isolados em um grupo ainda proibirem o acesso compartilhado a objetos mutáveis, os grupos usam memória heap compartilhada, o que pode acelerar significativamente a transferência de objetos de um bloco para outro sem a necessidade de realizar operações de cópia que consomem muitos recursos. A nova versão também permite que você passe o resultado do manipulador ao chamar Isolate.exit() para transferir dados para o bloco isolado pai sem copiar operações. Além disso, o mecanismo de transmissão de mensagens foi otimizado – mensagens pequenas e médias agora são processadas aproximadamente 8 vezes mais rápido. Os objetos que podem ser passados ​​entre isolados usando a chamada SendPort.send() incluem alguns tipos de funções, encerramentos e rastreamentos de pilha.

  • Nas ferramentas de criação de ponteiros para funções individuais em outros objetos (tear-off), foram removidas as restrições à criação de ponteiros semelhantes no código construtor, o que pode ser útil na construção de interfaces baseadas na biblioteca Flutter. Por exemplo, para criar um widget Coluna que inclua vários widgets Texto, você pode chamar ".map()" e passar ponteiros para o construtor Text.new do objeto Texto: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column(filhos: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • As possibilidades associadas ao uso de ponteiros de função foram ampliadas. Adicionada a capacidade de usar métodos genéricos e ponteiros de função para criar um método e um ponteiro não genérico: T id (valor T) => valor; var intId=id ; // permitido na versão 2.15 em vez de "int Function(int) intId = id;" const fo = id; // ponteiro para a função id. const c1 = fo ;
  • A biblioteca dart:core melhorou o suporte para enums, por exemplo, agora você pode gerar um valor de string de cada valor enum usando o método ".name", selecionar valores por nome ou combinar pares de valores: enum MyEnum { one , dois, três } void main() { print(MyEnum.one.name); // "um" será impresso. print(MyEnum.values.byName('dois') == MyEnum.two); // "true" será impresso. mapa final = MyEnum.values.asNameMap(); print(mapa['três'] == MyEnum.três); // "verdadeiro". }
  • Foi implementada uma técnica de compactação de ponteiros que permite o uso de uma representação mais compacta de ponteiros em ambientes de 64 bits se um espaço de endereço de 32 bits for suficiente para endereçamento (não mais que 4 GB de memória são usados). Os testes mostraram que tal otimização permite reduzir o tamanho do heap em aproximadamente 10%. No Flutter SDK, o novo modo já está habilitado para Android por padrão e está planejado para ser habilitado para iOS em uma versão futura.
  • O Dart SDK inclui ferramentas para depuração e análise de desempenho (DevTools), que eram fornecidas anteriormente em um pacote separado.
  • Foram adicionadas ferramentas ao comando “dart pub” e aos repositórios do pacote pub.dev para rastrear a publicação acidental de informações confidenciais, por exemplo, deixando credenciais para sistemas de integração contínua e ambientes de nuvem dentro do pacote. Caso tais vazamentos sejam detectados, a execução do comando “dart pub subscribe” será interrompida com uma mensagem de erro. Se houve um falso positivo, é possível contornar a verificação através de uma lista branca.
  • A capacidade de revogar uma versão já publicada de um pacote foi adicionada ao repositório pub.dev, por exemplo, se erros perigosos ou vulnerabilidades forem descobertos. Anteriormente, para tais correções, a prática era publicar uma versão corretiva, mas em algumas situações é necessário cancelar a versão existente e interromper urgentemente sua distribuição posterior (por exemplo, se a correção ainda não estiver pronta ou se uma versão completa foi publicado por engano em vez de uma versão de teste). Após a revogação, o pacote não é mais identificado nos comandos “pub get” e “pub upgrade”, e em sistemas que já o possuem instalado, um aviso especial é emitido na próxima vez que “pub get” for executado.
  • Adicionada proteção contra uma vulnerabilidade (CVE-2021-22567) causada pelo uso de caracteres Unicode no código que alteram a ordem de exibição.
  • Corrigida uma vulnerabilidade (CVE-2021-22568) que permite personificar outro usuário pub.dev ao publicar pacotes em um servidor de terceiros que aceita tokens de acesso pub.dev oauth2. Por exemplo, a vulnerabilidade poderia ser usada para atacar servidores de pacotes internos e corporativos. Os desenvolvedores que hospedam pacotes apenas em pub.dev não são afetados por esse problema.

Paralelamente, foi apresentado um lançamento significativo do framework de interface de usuário Flutter 2.8, que é considerado uma alternativa ao React Native e permite, com base em uma única base de código, lançar aplicativos para iOS, Android, Windows, macOS e Plataformas Linux, bem como criar aplicativos para rodar em navegadores. Um shell personalizado para o sistema operacional microkernel Fuchsia desenvolvido pelo Google é construído com base no Flutter. Note-se que nos últimos seis meses, o número de aplicações Flutter 2 na Google Play Store aumentou de 200 mil para 375 mil, ou seja, quase duas vezes.

A parte principal do código Flutter é implementada na linguagem Dart, e o mecanismo de tempo de execução para execução de aplicativos é escrito em C++. Ao desenvolver aplicativos, além da linguagem Dart nativa do Flutter, você pode usar a interface Dart Foreign Function para chamar código C/C++. O alto desempenho de execução é obtido compilando aplicativos em código nativo para plataformas de destino. Nesse caso, o programa não precisa ser recompilado após cada alteração - o Dart fornece um modo de recarga a quente que permite fazer alterações em um aplicativo em execução e avaliar imediatamente o resultado.

Entre as mudanças na nova versão do Flutter, destaca-se a otimização da velocidade de inicialização e do consumo de memória em dispositivos móveis. É mais fácil conectar aplicativos a serviços de back-end, como Firebase e Google Cloud. As ferramentas de integração com Google Ads foram estabilizadas. O suporte para câmeras e plug-ins da web foi significativamente melhorado. Novas ferramentas foram propostas para simplificar o desenvolvimento, por exemplo, um widget foi adicionado para autenticação usando Firebase. O motor Flame, projetado para desenvolver jogos 2D usando Flutter, foi atualizado.

Fonte: opennet.ru

Adicionar um comentário