Lenguaje de programación Dart 2.15 y framework Flutter 2.8 disponibles

Google ha publicado el lanzamiento del lenguaje de programación Dart 2.15, que continúa el desarrollo de una rama radicalmente rediseñada de Dart 2, que se diferencia de la versión original del lenguaje Dart por el uso de escritura estática fuerte (los tipos se pueden inferir automáticamente, por lo que No es necesario especificar tipos, pero ya no se utiliza la tipificación dinámica y, inicialmente, el tipo calculado se asigna a la variable y posteriormente se aplica una verificación estricta de tipos).

Características del lenguaje Dart:

  • Sintaxis familiar y fácil de aprender, natural para programadores de JavaScript, C y Java.
  • Garantizar un inicio rápido y un alto rendimiento para todos los navegadores web modernos y varios tipos de entornos, desde dispositivos portátiles hasta servidores potentes.
  • La capacidad de definir clases e interfaces que permitan la encapsulación y reutilización de métodos y datos existentes.
  • La especificación de tipos facilita la depuración e identificación de errores, hace que el código sea más claro y legible y simplifica su modificación y análisis por parte de desarrolladores externos.
  • Los tipos admitidos incluyen: varios tipos de hashes, matrices y listas, colas, tipos numéricos y de cadenas, tipos para determinar la fecha y la hora, expresiones regulares (RegExp). Es posible crear tus propios tipos.
  • Para organizar la ejecución paralela, se propone utilizar clases con el atributo de aislamiento, cuyo código se ejecuta íntegramente en un espacio aislado en un área de memoria separada, interactuando con el proceso principal mediante el envío de mensajes.
  • Soporte para el uso de bibliotecas que simplifican el soporte y la depuración de grandes proyectos web. Las implementaciones de funciones de terceros se pueden incluir en forma de bibliotecas compartidas. Las aplicaciones se pueden dividir en partes y confiar el desarrollo de cada parte a un equipo independiente de programadores.
  • Un conjunto de herramientas listas para usar para respaldar el desarrollo en el lenguaje Dart, incluida la implementación de herramientas dinámicas de desarrollo y depuración con corrección de código sobre la marcha (“editar y continuar”).
  • Para simplificar el desarrollo en el lenguaje Dart, viene con un SDK, un administrador de paquetes, un analizador de código estático dart_analyzer, un conjunto de bibliotecas, un entorno de desarrollo integrado DartPad y complementos habilitados para Dart para IntelliJ IDEA, WebStorm, Emacs, Sublime Text. 2 y Vim.
  • Los paquetes adicionales con bibliotecas y utilidades se distribuyen a través del repositorio pub, que tiene alrededor de 22 mil paquetes.

Cambios importantes en la versión Dart 2.15:

  • Proporciona herramientas para la ejecución paralela rápida de tareas con aislamiento de controladores. En sistemas multinúcleo, el tiempo de ejecución de Dart ejecuta de forma predeterminada el código de la aplicación en un núcleo de CPU y utiliza otros núcleos para realizar tareas del sistema como E/S asincrónicas, escribir en archivos o realizar llamadas de red. Para aplicaciones que necesitan ejecutar sus controladores en paralelo, por ejemplo, para representar animaciones en la interfaz, es posible ejecutar bloques de código separados (aislados), aislados entre sí y ejecutados en otros núcleos de CPU simultáneamente con el hilo principal de la aplicación. . Para protegerse contra errores que surgen cuando la ejecución simultánea de código que trabaja con el mismo conjunto de datos, está prohibido compartir objetos mutables en diferentes bloques aislados y se utiliza un modelo de paso de mensajes para la interacción entre controladores.

    Dart 2.15 introduce un nuevo concepto: grupos de bloques aislados (grupos aislados), que le permite organizar el acceso compartido a varias estructuras de datos internas en bloques aislados que forman parte del mismo grupo, lo que puede reducir significativamente la sobrecarga al interactuar entre controladores en un grupo. . Por ejemplo, lanzar un bloque aislado adicional en un grupo existente es 100 veces más rápido y requiere entre 10 y 100 veces menos memoria que lanzar un bloque aislado separado, debido a la eliminación de la necesidad de inicializar las estructuras de datos del programa.

    A pesar de que los bloques aislados en un grupo todavía prohíben el acceso compartido a objetos mutables, los grupos utilizan una memoria dinámica compartida, que puede acelerar significativamente la transferencia de objetos de un bloque a otro sin la necesidad de realizar operaciones de copia que consumen muchos recursos. La nueva versión también le permite pasar el resultado del controlador al llamar a Isolate.exit() para transferir datos al bloque aislado principal sin operaciones de copia. Además, se ha optimizado el mecanismo de transmisión de mensajes: los mensajes pequeños y medianos ahora se procesan aproximadamente 8 veces más rápido. Los objetos que se pueden pasar entre aislados mediante la llamada SendPort.send() incluyen algunos tipos de funciones, cierres y seguimientos de pila.

  • En las herramientas para crear punteros a funciones individuales en otros objetos (tear-off), se han eliminado las restricciones para crear punteros similares en el código del constructor, lo que puede resultar útil al crear interfaces basadas en la biblioteca Flutter. Por ejemplo, para crear un widget de columna que incluya varios widgets de texto, puede llamar a ".map()" y pasar punteros al constructor Text.new del objeto de texto: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( niños: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Se han ampliado las posibilidades asociadas con el uso de punteros de función. Se agregó la capacidad de usar métodos genéricos y punteros de función para crear un método y un puntero no genéricos: T id (valor T) => valor; var intId = identificación ; // permitido en la versión 2.15 en lugar de "int Function(int) intId = id;" constante fo = identificación; // puntero a la función id. constante c1 = fo ;
  • La biblioteca dart:core ha mejorado el soporte para enumeraciones, por ejemplo, ahora puede generar un valor de cadena de cada valor de enumeración usando el método ".name", seleccionar valores por nombre o hacer coincidir pares de valores: enum MyEnum { one , dos, tres } void main() { print(MyEnum.one.name); // Se imprimirá "uno". print(MyEnum.values.byName('dos') == MyEnum.two); // Se imprimirá "verdadero". mapa final = MyEnum.values.asNameMap(); print(mapa['tres'] == MyEnum.tres); // "verdadero". }
  • Se ha implementado una técnica de compresión de punteros que permite el uso de una representación más compacta de punteros en entornos de 64 bits si un espacio de direcciones de 32 bits es suficiente para el direccionamiento (no se utilizan más de 4 GB de memoria). Las pruebas han demostrado que dicha optimización permite reducir el tamaño del montón en aproximadamente un 10%. En el SDK de Flutter, el nuevo modo ya está habilitado para Android de forma predeterminada y se planea habilitarlo para iOS en una versión futura.
  • El SDK de Dart incluye herramientas para depuración y análisis de rendimiento (DevTools), que anteriormente se suministraban en un paquete separado.
  • Se han agregado herramientas al comando “dart pub” y a los repositorios del paquete pub.dev para rastrear la publicación accidental de información confidencial, por ejemplo, dejando credenciales para sistemas de integración continua y entornos de nube dentro del paquete. Si se detectan tales fugas, la ejecución del comando "dart pub Publish" se interrumpirá con un mensaje de error. Si hubo un falso positivo, es posible omitir la verificación a través de una lista blanca.
  • Se ha agregado al repositorio pub.dev la capacidad de revocar una versión ya publicada de un paquete, por ejemplo, si se descubren errores o vulnerabilidades peligrosas. Anteriormente, para tales correcciones, la práctica era publicar una versión correctiva, pero en algunas situaciones es necesario cancelar la versión existente y detener urgentemente su distribución posterior (por ejemplo, si la corrección aún no está lista o si se ha publicado una versión completa). publicado por error en lugar de una versión de prueba). Después de la revocación, el paquete ya no se identifica en los comandos “pub get” y “pub update”, y en los sistemas que ya lo han instalado, se emite una advertencia especial la próxima vez que se ejecuta “pub get”.
  • Se agregó protección contra una vulnerabilidad (CVE-2021-22567) causada por el uso de caracteres Unicode en el código que cambian el orden de visualización.
  • Se corrigió una vulnerabilidad (CVE-2021-22568) que le permite hacerse pasar por otro usuario de pub.dev al publicar paquetes en un servidor de terceros que acepta tokens de acceso oauth2 de pub.dev. Por ejemplo, la vulnerabilidad podría usarse para atacar servidores de paquetes internos y corporativos. Los desarrolladores que solo alojan paquetes en pub.dev no se ven afectados por este problema.

Al mismo tiempo, se presentó un importante lanzamiento del framework de interfaz de usuario Flutter 2.8, que se considera una alternativa a React Native y permite, basándose en una única base de código, lanzar aplicaciones para iOS, Android, Windows, macOS y Plataformas Linux, así como crear aplicaciones para ejecutar en navegadores. Sobre la base de Flutter se construye un shell personalizado para el sistema operativo microkernel Fuchsia desarrollado por Google. Cabe señalar que en los últimos seis meses, el número de aplicaciones Flutter 2 en Google Play Store ha aumentado de 200 mil a 375 mil, es decir. casi el doble.

La parte principal del código Flutter está implementada en el lenguaje Dart y el motor de ejecución para ejecutar aplicaciones está escrito en C++. Al desarrollar aplicaciones, además del lenguaje Dart nativo de Flutter, puede usar la interfaz de función externa de Dart para llamar al código C/C++. Se logra un alto rendimiento de ejecución compilando aplicaciones en código nativo para las plataformas de destino. En este caso, no es necesario volver a compilar el programa después de cada cambio: Dart proporciona un modo de recarga en caliente que le permite realizar cambios en una aplicación en ejecución y evaluar inmediatamente el resultado.

Entre los cambios en la nueva versión de Flutter se destaca la optimización de la velocidad de inicio y el consumo de memoria en dispositivos móviles. Es más fácil conectar aplicaciones a servicios backend como Firebase y Google Cloud. Se han estabilizado las herramientas de integración con Google Ads. Se ha mejorado significativamente la compatibilidad con cámaras y complementos web. Se han propuesto nuevas herramientas para simplificar el desarrollo, por ejemplo, se ha agregado un widget para la autenticación mediante Firebase. Se ha actualizado el motor Flame, diseñado para desarrollar juegos 2D usando Flutter.

Fuente: opennet.ru

Añadir un comentario