Estão disponíveis a linguagem de programação Dart 2.15 e o framework Flutter 2.8

A empresa Google lançou a versão 2.15 da linguagem de programação Dart, continuando o desenvolvimento da ramificação radicalmente reformulada do Dart 2, que se distingue da versão original da linguagem Dart pelo uso de uma 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 é associado à variável, sendo aplicada uma verificação de tipo rigorosa posteriormente).

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 conta com cerca de 22 mil pacotes.

Principais alterações na versão Dart 2.15:

  • Foram fornecidos recursos para a execução rápida e paralela de tarefas com isolamento de manipuladores. Em sistemas multicore, o runtime do Dart, por padrão, executa o código do aplicativo em um núcleo da CPU, enquanto outros núcleos são utilizados para executar tarefas do sistema, como I/O assíncrono, gravação de arquivos ou chamadas de rede. Para aplicativos que precisam executar seus manipuladores em paralelo, como na renderização de animações na interface, há a possibilidade de iniciar blocos de código separados (isolado), isolados entre si e executados em outros núcleos da CPU simultaneamente com o fluxo principal do aplicativo. Para evitar erros que podem ocorrer ao executar código que trabalha com um conjunto de dados compartilhado em diferentes blocos isolados, o compartilhamento de objetos mutáveis entre os blocos é proibido, e é empregada um modelo de interação baseado na transmissão de mensagens.

    Na versão Dart 2.15, foi proposta uma nova concepção — grupos de blocos isolados (isolate groups), permitindo o acesso compartilhado a várias estruturas de dados internas em blocos isolados que pertencem a um mesmo grupo, o que reduz significativamente a sobrecarga na interação entre manipuladores dentro do 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.

    Embora o compartilhamento de objetos mutáveis ainda seja proibido entre isolate-blocks, os grupos utilizam memória heap compartilhada, o que acelera significativamente a transferência de objetos de um bloco para outro sem a necessidade de executar operações de cópia exigentes em recursos. Na nova versão, também é permitido passar o resultado do manipulador ao chamar Isolate.exit() para transmitir dados ao bloco pai do isolate sem operações de cópia. Além disso, foi otimizado o mecanismo de transferência de mensagens — mensagens pequenas e médias agora são processadas aproximadamente 8 vezes mais rápido. Os objetos que podem ser transmitidos entre isolate-blocks usando a chamada SendPort.send() incluem certos tipos de funções, closures e rastreamento de pilha.

  • As restrições para a criação de ponteiros para funções específicas em outros objetos (tear-off) foram removidas no código dos construtores, o que pode ser útil para construir interfaces usando a biblioteca Flutter. Por exemplo, para criar um widget Column que inclui vários widgets Text, pode-se chamar '.map()' e passar os ponteiros para o construtor Text.new do objeto Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Ampliadas as capacidades relacionadas ao uso de ponteiros para funções. Agora é possível aplicar métodos genéricos (generic) e ponteiros de funções para criar um método não genérico e ponteiro: T id(T value) => value; 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;
  • Na biblioteca dart:core, melhorou-se o suporte a enums, por exemplo, agora é possível imprimir o valor em string de cada valor de enum usando o método '.name', fazer seleções de valores pelo nome ou executar correspondências de pares de valores: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // irá imprimir 'one'. print(MyEnum.values.byName('two') == MyEnum.two); // irá imprimir 'true'. final map = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // 'true'. }
  • Foi implementada uma técnica de compressão de ponteiros que permite uma representação mais compacta dos ponteiros em ambientes de 64 bits, caso um espaço de endereço de 32 bits seja suficiente para endereçar (usando não mais que 4 GB de memória). Os testes mostraram que tal otimização pode reduzir o tamanho do heap em aproximadamente 10%. No Flutter SDK, esse novo modo já está ativado por padrão para Android, e está planejado para ser incluído na próxima versão para iOS.
  • O Dart SDK inclui ferramentas para depuração e análise de desempenho (DevTools), que antes eram fornecidas em um pacote separado.
  • A equipe do "dart pub" e os repositórios de pacotes pub.dev adicionaram ferramentas para rastrear a publicação acidental de informações confidenciais, como a inclusão de credenciais para sistemas de integração contínua e ambientes de nuvem dentro do pacote. Caso vazamentos desse tipo sejam detectados, a execução do comando "dart pub publish" será interrompida com uma mensagem de erro. Se ocorrer um falso positivo, há uma opção de ignorar a verificação através de uma lista branca.
  • Foi adicionada ao repositório pub.dev a capacidade de revogar uma versão já publicada de um pacote, por exemplo, em caso de detecção de erros perigosos ou vulnerabilidades. Anteriormente, para tais correções, era prática publicar uma versão corretiva subsequente, mas em algumas situações, é necessário cancelar a versão lançada e interromper sua disseminação imediata (por exemplo, se a correção ainda não estiver pronta ou se uma versão estável foi publicada por engano em vez de uma versão de teste). Após a revogação, o pacote deixa de ser identificado nos comandos "pub get" e "pub upgrade", e nas máquinas onde já foi instalado, será emitido um aviso especial na próxima execução de "pub get".
  • Foi adicionada uma proteção contra a vulnerabilidade (CVE-2021-22567), causada pelo uso de símbolos unicode no código que alteram a ordem de exibição.
  • Foi corrigida a vulnerabilidade (CVE-2021-22568), que permitia que um usuário se passasse por outro ao publicar pacotes em um servidor externo aceitando tokens de acesso oauth2 do pub.dev. Por exemplo, a vulnerabilidade poderia ser utilizada para atacar servidores internos e corporativos de pacotes. O problema não afeta desenvolvedores que publicam pacotes apenas no pub.dev.

Foi apresentado simultaneamente um lançamento significativo do framework de construção de interfaces de usuário Flutter 2.8, que é considerado uma alternativa ao React Native e permite a partir de uma única base de código lançar aplicativos para as plataformas iOS, Android, Windows, macOS e Linux, além de criar aplicativos para execução em navegadores. Com base no Flutter, é construída a interface do sistema operacional microkernel Fuchsia, desenvolvido pelo Google. Observa-se que, nos últimos seis meses, o número de aplicativos no Flutter 2 na Google Play Store aumentou de 200 mil para 375 mil, ou seja, quase dobrou.

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.

As mudanças na nova versão do Flutter incluem otimizações na velocidade de inicialização e no consumo de memória em dispositivos móveis. A conexão de aplicativos a serviços de backend, como Firebase e Google Cloud, foi simplificada. Ferramentas para integração com Google Ads foram estabilizadas. O suporte a câmeras e plugins web foi significativamente melhorado. Novos recursos foram oferecidos para facilitar o desenvolvimento, como um widget para autenticação utilizando Firebase. O motor Flame, destinado ao desenvolvimento de jogos 2D com Flutter, foi atualizado.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster