A linguaxe de programación Dart 2.15 e o framework Flutter 2.8 dispoñibles

Google publicou o lanzamento da linguaxe de programación Dart 2.15, que continúa o desenvolvemento dunha rama radicalmente redeseñada de Dart 2, que se diferencia da versión orixinal da linguaxe Dart polo uso dunha forte dixitación estática (os tipos pódense inferir automaticamente, polo que non é necesario especificar tipos, pero xa non se utiliza a dixitación dinámica e inicialmente calcúlase o tipo asígnase á variable e aplícase posteriormente unha estrita comprobación de tipos).

Características da linguaxe Dart:

  • Sintaxe familiar e fácil de aprender, natural para programadores de JavaScript, C e Java.
  • Asegurando un lanzamento rápido e un alto rendemento para todos os navegadores web modernos e varios tipos de ambientes, desde dispositivos portátiles ata servidores potentes.
  • A capacidade de definir clases e interfaces que permitan encapsular e reutilizar métodos e datos existentes.
  • Especificar tipos facilita a depuración e identificación de erros, fai que o código sexa máis claro e lexible e simplifica a súa modificación e análise por parte de desenvolvedores terceiros.
  • Os tipos admitidos inclúen: varios tipos de hash, matrices e listas, colas, tipos numéricos e de cadea, tipos para determinar a data e a hora, expresións regulares (RegExp). É posible crear os seus propios tipos.
  • Para organizar a execución paralela, proponse utilizar clases co atributo isolate, cuxo código se executa enteiramente nun espazo illado nunha área de memoria separada, interactuando co proceso principal mediante o envío de mensaxes.
  • Soporte para o uso de bibliotecas que simplifican o soporte e a depuración de grandes proxectos web. As implementacións de funcións de terceiros pódense incluír en forma de bibliotecas compartidas. As aplicacións pódense dividir en partes e confiar o desenvolvemento de cada parte a un equipo separado de programadores.
  • Un conxunto de ferramentas preparadas para apoiar o desenvolvemento na linguaxe Dart, incluíndo a implementación de ferramentas de desenvolvemento dinámico e depuración con corrección de código sobre a marcha ("edit-and-continue").
  • Para simplificar o desenvolvemento na linguaxe Dart, inclúe un SDK, un pub xestor de paquetes, un analizador de código estático dart_analyzer, un conxunto de bibliotecas, un ambiente de desenvolvemento integrado DartPad e complementos habilitados para Dart para IntelliJ IDEA, WebStorm, Emacs, Sublime Text. 2 e Vim.
  • Paquetes adicionais con bibliotecas e utilidades distribúense a través do repositorio pub, que ten uns 22 mil paquetes.

Principais cambios na versión de Dart 2.15:

  • Ofrece ferramentas para a rápida execución paralela de tarefas con illamento dos manejadores. Nos sistemas multinúcleo, o tempo de execución de Dart executa de forma predeterminada o código de aplicación nun núcleo da CPU e usa outros núcleos para realizar tarefas do sistema como E/S asíncronas, escribir en ficheiros ou realizar chamadas de rede. Para as aplicacións que precisan executar os seus controladores en paralelo, por exemplo, para renderizar animación na interface, é posible lanzar bloques de código separados (illar), illados entre si e executados noutros núcleos de CPU simultaneamente co fío principal da aplicación. . Para protexerse contra os erros que se producen cando a execución simultánea de código traballa co mesmo conxunto de datos, prohíbese compartir obxectos mutables en diferentes bloques illados e úsase un modelo de paso de mensaxes para a interacción entre controladores.

    Dart 2.15 introduce un novo concepto: grupos de bloques illados (grupos illados), que lle permite organizar o acceso compartido a varias estruturas de datos internas en bloques illados que forman parte do mesmo grupo, o que pode reducir significativamente a sobrecarga ao interactuar entre os controladores dun grupo. . Por exemplo, lanzar un bloque illado adicional nun grupo existente é 100 veces máis rápido e require de 10 a 100 veces menos memoria que lanzar un bloque illado separado, debido á eliminación da necesidade de inicializar as estruturas de datos do programa.

    A pesar de que os bloques illados dun grupo aínda prohiben o acceso compartido a obxectos mutables, os grupos usan unha memoria de pila compartida, o que pode acelerar significativamente a transferencia de obxectos dun bloque a outro sen necesidade de realizar operacións de copia intensivas en recursos. A nova versión tamén permite pasar o resultado do manejador ao chamar Isolate.exit() para transferir datos ao bloque illado principal sen copiar operacións. Ademais, o mecanismo de transmisión de mensaxes optimizouse: agora as mensaxes pequenas e medianas procesan aproximadamente 8 veces máis rápido. Os obxectos que se poden pasar entre illados mediante a chamada SendPort.send() inclúen algúns tipos de funcións, peches e trazos de pila.

  • Nas ferramentas para crear punteiros a funcións individuais noutros obxectos (arrancar), elimináronse as restricións á creación de punteiros similares no código de construtor, o que pode ser útil cando se crean interfaces baseadas na biblioteca Flutter. Por exemplo, para crear un widget Columna que inclúa varios widgets de texto, pode chamar ".map()" e pasar punteiros ao construtor Text.new do obxecto Text: class FruitWidget extends StatessWidget { @override Widget build(BuildContext context) { return Columna( fillos: ['Apple', 'Laranxa'].map(Text.new).toList()); } }
  • Ampliáronse as posibilidades asociadas ao uso de punteiros de función. Engadiuse a capacidade de usar métodos xenéricos e punteiros de función para crear un método e un punteiro non xenéricos: T id (valor T) => valor; var intId = id ; // permitido na versión 2.15 en lugar de "int Function(int) intId = id;" const fo = id; // punteiro á identificación da función. const c1 = fo ;
  • A biblioteca dart:core mellorou a compatibilidade con enumeracións, por exemplo, agora pode emitir un valor de cadea de cada valor de enumeración mediante o método ".name", seleccionar valores polo nome ou combinar pares de valores: enum MyEnum { one , dous, tres } void main() { print(MyEnum.one.name); // "Un" será impreso. print(O meuEnum.valores.byName('dous') == O meuEnum.dous); // Imprimirase "true". mapa final = MyEnum.values.asNameMap(); imprimir(mapa['tres'] == O meuEnum.tres); // "verdadeiro". }
  • Implementouse unha técnica de compresión de punteiros que permite o uso dunha representación máis compacta de punteiros en contornos de 64 bits se un espazo de enderezos de 32 bits é suficiente para o direccionamento (non se emprega máis de 4 GB de memoria). As probas demostraron que esta optimización permite reducir o tamaño do montón aproximadamente un 10%. No Flutter SDK, o novo modo xa está activado para Android de forma predeterminada e está previsto que se active para iOS nunha versión futura.
  • O SDK de Dart inclúe ferramentas para a depuración e análise de rendemento (DevTools), que anteriormente se fornecían nun paquete separado.
  • Engadíronse ferramentas ao comando "dart pub" e aos repositorios de paquetes pub.dev para rastrexar a publicación accidental de información confidencial, por exemplo, deixando credenciais para sistemas de integración continua e ambientes de nube dentro do paquete. Se se detectan tales fugas, a execución do comando "dart pub publish" interromperase cunha mensaxe de erro. Se houbo un falso positivo, é posible ignorar a comprobación a través dunha lista branca.
  • A capacidade de revogar unha versión xa publicada dun paquete engadiuse ao repositorio pub.dev, por exemplo, se se descobren erros perigosos ou vulnerabilidades. Anteriormente, para tales correccións, a práctica consistía en publicar unha versión correctora, pero nalgunhas situacións é necesario cancelar a versión existente e deter con urxencia a súa posterior distribución (por exemplo, se a corrección aínda non está lista ou se se fixo unha versión completa). publicado por erro en lugar dunha versión de proba). Despois da revogación, o paquete xa non se identifica nos comandos "pub get" e "pub upgrade", e nos sistemas que xa o instalaron, emítese un aviso especial a próxima vez que se execute "pub get".
  • Engadiuse protección contra unha vulnerabilidade (CVE-2021-22567) causada polo uso de caracteres Unicode no código que cambian a orde de visualización.
  • Corrixiuse unha vulnerabilidade (CVE-2021-22568) que che permitía suplantar a identidade doutro usuario de pub.dev ao publicar paquetes nun servidor de terceiros que acepta tokens de acceso pub.dev oauth2. Por exemplo, a vulnerabilidade podería usarse para atacar servidores de paquetes internos e corporativos. Os desenvolvedores que só aloxan paquetes en pub.dev non se ven afectados por este problema.

Ao mesmo tempo, presentouse unha importante versión do framework de interface de usuario Flutter 2.8, que se considera unha alternativa a React Native e que permite, baseándose nunha única base de código, lanzar aplicacións para iOS, Android, Windows, macOS e plataformas Linux, así como crear aplicacións para executar en navegadores. Un shell personalizado para o sistema operativo microkernel Fuchsia desenvolvido por Google está construído sobre a base de Flutter. Nótase que durante os últimos seis meses, o número de aplicacións Flutter 2 na Google Play Store aumentou de 200 mil a 375 mil, é dicir. case dúas veces.

A parte principal do código Flutter está implementada na linguaxe Dart e o motor de execución para executar aplicacións está escrito en C++. Ao desenvolver aplicacións, ademais da linguaxe Dart nativa de Flutter, pode usar a interface da función externa de Dart para chamar código C/C++. Conséguese un alto rendemento de execución compilando aplicacións en código nativo para plataformas de destino. Neste caso, non é necesario recompilar o programa despois de cada cambio - Dart ofrece un modo de recarga en quente que lle permite facer cambios nunha aplicación en execución e avaliar inmediatamente o resultado.

Entre os cambios na nova versión de Flutter, destaca a optimización da velocidade de lanzamento e do consumo de memoria nos dispositivos móbiles. É máis doado conectar aplicacións a servizos de backend como Firebase e Google Cloud. Estabilizáronse as ferramentas para a integración con Google Ads. Mellorouse significativamente a compatibilidade con cámaras e complementos web. Propuxéronse novas ferramentas para simplificar o desenvolvemento, por exemplo, engadiuse un widget para a autenticación mediante Firebase. Actualizouse o motor Flame, deseñado para desenvolver xogos en 2D usando Flutter.

Fonte: opennet.ru

Engadir un comentario