Ngôn ngữ lập trình Dart 2.15 và khung Flutter 2.8 có sẵn

Google đã xuất bản bản phát hành ngôn ngữ lập trình Dart 2.15, ngôn ngữ này tiếp tục phát triển một nhánh được thiết kế lại hoàn toàn của Dart 2, khác với phiên bản gốc của ngôn ngữ Dart ở chỗ sử dụng kiểu gõ tĩnh mạnh (các loại có thể được suy ra tự động, vì vậy việc chỉ định loại là không cần thiết, nhưng kiểu gõ động không còn được sử dụng và tính toán ban đầu loại được gán cho biến và việc kiểm tra loại nghiêm ngặt sau đó được áp dụng).

Các tính năng của ngôn ngữ Dart:

  • Cú pháp quen thuộc và dễ học, tự nhiên dành cho lập trình viên JavaScript, C và Java.
  • Đảm bảo khởi chạy nhanh và hiệu suất cao cho tất cả các trình duyệt web hiện đại và nhiều loại môi trường khác nhau, từ thiết bị di động đến máy chủ mạnh mẽ.
  • Khả năng xác định các lớp và giao diện cho phép đóng gói và tái sử dụng các phương thức và dữ liệu hiện có.
  • Việc chỉ định loại giúp gỡ lỗi và xác định lỗi dễ dàng hơn, làm cho mã rõ ràng và dễ đọc hơn, đồng thời đơn giản hóa việc sửa đổi và phân tích của các nhà phát triển bên thứ ba.
  • Các loại được hỗ trợ bao gồm: các loại băm, mảng và danh sách, hàng đợi, loại số và chuỗi, loại để xác định ngày và giờ, biểu thức chính quy (RegExp). Có thể tạo các loại của riêng bạn.
  • Để tổ chức thực thi song song, đề xuất sử dụng các lớp có thuộc tính cô lập, mã của thuộc tính này được thực thi hoàn toàn trong không gian biệt lập trong một vùng bộ nhớ riêng, tương tác với quy trình chính bằng cách gửi tin nhắn.
  • Hỗ trợ sử dụng các thư viện giúp đơn giản hóa việc hỗ trợ và gỡ lỗi các dự án web lớn. Việc triển khai các chức năng của bên thứ ba có thể được đưa vào dưới dạng thư viện dùng chung. Các ứng dụng có thể được chia thành nhiều phần và giao phó việc phát triển từng phần cho một nhóm lập trình viên riêng biệt.
  • Một bộ công cụ được tạo sẵn để hỗ trợ phát triển bằng ngôn ngữ Dart, bao gồm việc triển khai các công cụ gỡ lỗi và phát triển động với tính năng sửa mã nhanh chóng (“chỉnh sửa và tiếp tục”).
  • Để đơn giản hóa việc phát triển bằng ngôn ngữ Dart, nó đi kèm với SDK, trình quản lý gói, trình phân tích mã tĩnh Dart_analyzer, một bộ thư viện, môi trường phát triển tích hợp DartPad và các plugin hỗ trợ Dart cho IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 và Vim.
  • Дополнительные пакеты с библиотеками и утилитами распространяются через репозиторий pub, который насчитывает около 22 тысяч пакетов.

Những thay đổi lớn trong bản phát hành Dart 2.15:

  • Предоставлены средства для быстрого параллельного выполнения задач с изоляцией обработчиков. На многоядерных системах Dart runtime по умолчанию выполняет код приложения на одном ядре CPU, а другие ядра привлекает для выполнения системных задач, таких как асинхронный ввод/вывод, запись в файлы или совершение сетевых вызовов. Для приложений, которым необходимо параллельно выполнять свои обработчики, например, для отрисовки анимации в интерфейсе, предусмотрена возможность запуска отдельных блоков кода (isolate), изолированных друг от друга и выполняемых на других ядрах CPU одновременно с основным потоком приложения. Для защиты от ошибок, возникающих при одновременном выполнении кода, работающего с одним набором данных, в разных в isolate-блоках запрещено совместное использование изменяемых объектов, а для взаимодействия между обработчиками применяется модель на основе передачи сообщений.

    В Dart 2.15 предложена новая концепция — группы изолированных блоков (isolate groups), позволяющая организовать совместный доступ к различным внутренним структурам данных в isolate-блоках, входящих в одну группу, что позволяет значительного снизить накладные расходы при взаимодействии обработчиков в группе. Например, запуск дополнительного isolate-блока в существующей группе выполняется в 100 раз быстрее и требует в 10-100 раз меньше памяти, чем запуск обособленного isolate-блока, за счёт исключения необходимости инициализации структур данных программы.

    Несмотря на то, что в isolate-блоках в группе по-прежнему запрещён совместный доступ к изменяемым объектам, в группах используется общая heap-память, что позволяет значительно ускорить передачу объектов из одного блока в другой без необходимости выполнения ресурсоёмких операций копирования. В новой версии также разрешено передавать результат работы обработчика при вызове Isolate.exit() для передачи данных в родительский isolate-блок без операций копирования. Кроме того проведена оптимизация механизма передачи сообщений — небольшие и средние сообщения теперь обрабатываются приблизительно в 8 раз быстрее. В число объектов, которые можно передавать между isolate-блоками при помощи вызова SendPort.send(), включены некоторые типы функций, замыкания и трассировки стека.

  • В средствах для создания указателей на отдельные функции в других объектах (tear-off) сняты ограничения по созданию подобных указателей в коде конструкторов, что может быть полезным при построении интерфейсов на базе библиотеки Flutter. Например, для создания виджета Column, включающего несколько виджетов Text, можно вызвать «.map()» и передать указатели в конструктор Text.new объекта Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
  • Расширены возможности, связанные с использованием указателей на функции. Добавлена возможность применять обобщённые (generic) методы и указатели функций для создания не-generic метода и указателя: T id<T>(T value) => value; var intId = id<int>; // разрешено в версии 2.15 вместо «int Function(int) intId = id;» const fo = id; // указатель на функцию id. const c1 = fo<int>;
  • В библиотеке dart:core улучшена поддержка перечислений (enum), например, теперь можно выводить строковое значение из каждого значения enum при помощи метода «.name», осуществлять выборку значений по имени или выполнять сопоставление пар значений: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // будет выведено «one». print(MyEnum.values.byName(‘two’) == MyEnum.two); // будет выведено «true». final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // «true». }
  • Реализована техника сжатия указателей, позволяющая использовать более компактное представление указателей в 64-разрядных окружениях, если для адресации достаточно 32-разрядного адресного пространства (используется не более 4 ГБ памяти). Тесты показали, что подобная оптимизация даёт возможность сократить размер кучи приблизительно на 10%. Во Flutter SDK по умолчанию новый режим уже активирован для Android, а в будущем выпуске запланирован для включения для iOS.
  • В состав Dart SDK включены инструменты для отладки и анализа производительности (DevTools), которые раньше поставлялись в отдельном пакете.
  • В команду «dart pub» и репозитории пакетов pub.dev добавлены средства для отслеживания случайной публикации конфиденциальной информации, например, оставление внутри пакета учётных данных для систем непрерывной интеграции и облачных окружений. В случае выявление подобных утечек выполнение команды «dart pub publish» будет прервано с сообщением об ошибке. В случае если имело место ложное срабатывание предоставлена возможность обхода проверки через белый список.
  • В репозиторий pub.dev добавлена возможность отзыва уже опубликованной версии пакета, например, в случае выявления опасных ошибок или уязвимостей. Ранее для подобных исправлений практиковалась публикация следом корректирующей версии, но в некоторых ситуациях требуется именно отменить состоявшийся выпуск и экстренно остановить его дальнейшее распространение (например, если исправления ещё не готово или если по ошибке вместо тестовой версии был опубликован полноценный выпуск). После отзыва пакет перестаёт определяться в командах «pub get» и «pub upgrade», а на уже установивших его системах при очередном выполнении «pub get» выдаётся специальное предупреждение.
  • Добавлена защита от уязвимости (CVE-2021-22567), вызванной применением в коде unicode-символов, меняющих порядок отображения.
  • Устранена уязвимость (CVE-2021-22568), позволяющая выдать себя за другого пользователя pub.dev при публикации пакетов на сторонний сервер, принимающий oauth2-токены доступа pub.dev. Например, уязвимость может применяться для атаки на внутренние и корпоративные серверы пакетов. Разработчиков, размещающих пакеты только на pub.dev, проблема не затрагивает.

Одновременно представлен значительный релиз фреймворка построения интерфейса пользователя Flutter 2.8, который рассматривается как альтернатива React Native и позволяет на основе одной кодовой базы выпускать приложения для платформ iOS, Android, Windows, macOS и Linux, а также создавать приложения для запуска в браузерах. На основе Flutter построена пользовательская оболочка развиваемой в Google микроядерной операционной системы Fuchsia. Отмечается, что за последние шесть месяцев число приложений на Flutter 2 в Google Play Store увеличилось с 200 тысяч до 375 тысяч, т.е. почти в два раза.

Phần chính của mã Flutter được triển khai bằng ngôn ngữ Dart và công cụ thời gian chạy để thực thi các ứng dụng được viết bằng C++. Khi phát triển ứng dụng, ngoài ngôn ngữ Dart gốc của Flutter, bạn có thể sử dụng giao diện Dart Foreign Function để gọi mã C/C++. Hiệu suất thực thi cao đạt được bằng cách biên dịch ứng dụng thành mã gốc cho nền tảng đích. Trong trường hợp này, chương trình không cần phải biên dịch lại sau mỗi thay đổi - Dart cung cấp chế độ tải lại nóng cho phép bạn thực hiện các thay đổi đối với ứng dụng đang chạy và đánh giá ngay kết quả.

Из изменений в новом выпуске Flutter отмечается проведение оптимизации скорости запуска и потребления памяти на мобильных устройствах. Упрощено подключение приложений к бэкенд-сервисам, таким как Firebase и Google Cloud. Стабилизированы инструменты для интеграции с Google Ads. Значительно улучшена поддержка камер и web-плагинов. Предложены новые средства для упрощения разработки, например, добавлен виджет для аутентификации с использованием Firebase. Обновлён движок Flame, предназначенный на разработки 2D-игр с использованием Flutter.

Nguồn: opennet.ru

Thêm một lời nhận xét