Даступныя мова Dart 2.14 і фрэймворк Flutter 2.5

Кампанія Google апублікавала рэліз мовы праграмавання Dart 2.14, які працягнуў развіццё кардынальна перапрацаванай галінкі Dart 2, якая адрозніваецца ад першапачатковага варыянту мовы Dart ужываннем моцнай статычнай тыпізацыі (тыпы могуць выводзіцца аўтаматычна, таму ўказанне тыпаў не з'яўляецца абавязковым, але дынамічная тыпізацыя больш не выкарыстоўваецца і вылічаны першапачаткова тып замацоўваецца за зменнай і ў далейшым прымяняецца строгая праверка тыпу).

Асаблівасці мовы Dart:

  • Звыклы і просты для вывучэння сінтаксіс, натуральны для праграмістаў на JavaScript, Сі і Java.
  • Забеспячэнне хуткага запуску і высокай прадукцыйнасці для ўсіх сучасных вэб-браўзэраў і розных тыпаў акружэнняў, ад партатыўных прылад да магутных сервераў.
  • Магчымасць вызначэння класаў і інтэрфейсаў, якія дазваляюць выкарыстоўваць інкапсуляцыі і паўторна выкарыстоўваць існуючыя метады і дадзеныя.
  • Указанне тыпаў дазваляе спрасціць адладку і выяўленне памылак, робіць код больш ясным і чытэльным, спрашчае яго дапрацоўку і аналіз іншымі распрацоўнікамі.
  • Сярод падтрымліваемых тыпаў: розныя віды хэшаў, масіваў і спісаў, чэргі, лікавыя і радковыя тыпы, тыпы для вызначэння даты і часу, рэгулярныя выразы (RegExp). Ёсць магчымасць стварэння сваіх тыпаў.
  • Для арганізацыі раўналежнага выканання прапануецца выкарыстоўваць класы з атрыбутам isolate, код якіх выконваецца цалкам у ізаляванай прасторы ў асобнай вобласці памяці, узаемадзейнічаючы з асноўным працэсам праз адпраўку паведамленняў.
  • Падтрымка выкарыстання бібліятэк, якія спрашчаюць падтрымку і адладку вялікіх вэб-праектаў. Іншыя рэалізацыі функцый могуць падлучацца ў выглядзе падзяляемых бібліятэк. Прыкладанні можна разбіць на часткі і даручыць распрацоўку кожнай з частак асобнай камандзе праграмістаў.
  • Набор гатовых прылад для падтрымкі распрацоўкі на мове Dart, у тым ліку рэалізацыю сродкаў дынамічнай распрацоўкі і адладкі з выпраўленнем кода на лета («edit-and-continue»).
  • Для спрашчэння распрацоўкі на мове Dart пастаўляецца SDK, пакетны мэнэджар pub, статычны аналізатар кода dart_analyzer, набор бібліятэк, інтэграванае асяроддзе распрацоўкі DartPad і плагіны з падтрымкай Dart для IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 і Vim.
  • Дадатковыя пакеты з бібліятэкамі і ўтылітамі распаўсюджваюцца праз рэпазітар pub, які налічвае больш за 20 тысяч пакетаў.

Асноўныя змены ў выпуску Dart 2.14:

  • Дададзены новы аператар патройнага зруху (>>>), які ў адрозненне ад аператара «>>» выконвае не арыфметычны, а лагічны зрух, які працуе без уліку знакавага біта (зрух здзяйсняецца без падзелу на дадатныя і адмоўныя лікі).
  • Знята абмежаванне на аргументы тыпу, якія не дазвалялі выкарыстоўваць агульныя тыпы функцый у якасці аргументу з тыпам. Напрыклад, зараз можна ўказваць: late List (T)> idFunctions; var callback = [ (T value) => value]; late S Function (T)>(S) f;
  • Дазволена ўказанне аргументаў з тыпамі ў анатацыях, такіх як @Deprecated. Напрыклад, зараз можна паказваць: @TypeHelper (42, "The meaning")
  • У стандартную бібліятэку (core) у клас Object дададзены статычныя метады hash, hashAll і hashAllUnordered. У класе DateTime палепшана апрацоўка лакальнага часу пры перакладзе гадзін паміж летнім і зімовым часам не кратным адной гадзіне (напрыклад, у Аўстраліі выкарыстоўваецца зрушэнне на 30 хвілін). У пакет ffi дададзеная падтрымка механізму вылучэння памяці arena, аўтаматычна які вызваляе рэсурсы. У пакет ffigen дададзена магчымасць генерацыі typedef-вызначэнняў тыпаў Dart з мовы C.
  • 250 самых папулярных пакетаў з рэпазітара pub.dev і 94% з top-1000 перакладзены на ўжыванне рэжыму бяспечнага выкарыстання значэння «Null» (null safety), які дазволяць пазбегнуць крахаў, выкліканых спробамі выкарыстання зменных, значэнне якіх не вызначана і выстаўлена ў «Null ». Рэжым разумее, што зменныя не могуць мець нявызначаныя значэнні, калі ім відавочна не прысвойваецца значэнне null. У рэжыме строга ўлічваюцца тыпы зменных, што дазваляе кампілятару прымяняць дадатковыя аптымізацыі. Адпаведнасць тыпаў правяраецца на этапе кампіляцыі, напрыклад, у выпадку спробы прысваення значэння "Null" зменнай з тыпам, не які разумее нявызначаны стан, такім як "int", будзе выведзена памылка.
  • Прапанаваны ўніфікаваныя наборы правіл для аналізатара кода (linter), якія забяспечваюць адначасовую падтрымку праверкі прытрымлівання рэкамендацый па стылі афармлення кода для Dart і фрэймворка Flutter. Па гістарычных прычынах правілы афармлення кода для Flutter і Dart адрозніваліся, акрамя таго для Dart ва ўжытку знаходзілася два набору правілаў - педантычныя ад Google і правілы ад супольнасці распрацоўшчыкаў Dart. У Dart 2.14 прадстаўлены новы агульны набор правіл для linter, які вырашана ўжываць па змаўчанні ў новых праектах Dart і ва Flutter SDK. Набор уключае ў сябе базавыя правілы (пакет lints/core.yaml), рэкамендаваныя дадатковыя правілы (lints/recommended.yaml) і спецыфічныя для Flutter рэкамендацыі (flutter_lints/flutter.yaml). Карыстачам педантычных правілаў рэкамендавана перайсці на выкарыстанне новага стылю кадавання, заснаванага на рэкамендацыях з дакументацыі Dart.
  • У formatter унесены аптымізацыі ў фарматаванне каскадных блокаў кода, якія дазваляюць прыкметна падвысіць прадукцыйнасць фарматавання і пазбегнуць неадназначнай трактоўкі прыналежнасці элементаў выраза. Напрыклад, выклік "..doIt" у выразе "var result = errorState ? foo : bad..doIt()» дакранаецца не ўмоўнай часткі блока «bad» а ўсяго выраза, таму пры фарматаванні зараз падзяляецца: var result = errorState ? foo : bad ..doIt();
  • У SDK дададзеная падтрымка працэсараў Apple M1 (Silicon), якая разумее як ​​магчымасць запуску Dart VM, утыліт і кампанентаў SDK на сістэмах з працэсарам Apple Silicon, так і падтрымку кампіляцыі выкананых файлаў для паказаных чыпаў.
  • У каманду "dart pub" дададзена падтрымка новага службовага файла ".pubignore", які дазваляе вызначыць спіс файлаў, якія будуць прапушчаныя пры публікацыі пакета ў рэпазітары pub.dev. Паказаныя налады не перасякаюцца са спісам ігнаравання ".gitignore" (у некаторых сітуацыях у pub.dev патрабуецца не перадаваць файлы, якія патрэбныя ў Git, напрыклад, унутраныя скрыпты, якія ўжываюцца пры распрацоўцы).
  • Праведзена праца па падвышэнні прадукцыйнасці каманды dart test, якая зараз не патрабуе паўторнай кампіляцыі тэстаў пасля змены pubspec, калі нумар версіі не памяняўся.
  • Спынена падтрымка кампіляцыі ў рэжыме сумяшчальнасці з ECMAScript 5 (змена прывядзе да страты сумяшчальнасці з браўзэрам IE11).
  • Абвешчаныя састарэлымі асобныя ўтыліты stagehand, dartfmt і dart2native, на змену якім дашлі ўбудаваныя каманды, выкліканыя праз утыліту dart.
  • Пераведзены ў разрад састарэлых механізм VM Native Extensions. Для выкліку натыўнага кода з кода на мове Dart рэкамендавана выкарыстоўваць новы інтэрфейс Dart FFI (Foreign Function Interface).

Адначасова прадстаўлены значны рэліз фрэймворка пабудовы інтэрфейсу карыстача Flutter 2.5, які разглядаецца як альтэрнатыва React Native і дазваляе на аснове адной кодавай базы выпускаць прыкладанні для платформаў iOS, Android, Windows, macOS і Linux, а таксама ствараць прыкладанні для запуску ў браўзэрах. На аснове Flutter пабудавана карыстацкая абалонка якая развіваецца ў Google мікраядзернай аперацыйнай сістэмы Fuchsia.

Асноўная частка кода Flutter рэалізаваная на мове Dart, а runtime-рухавічок для выканання прыкладанняў напісаны на C++. Пры распрацоўцы прыкладанняў, апроч роднай для Flutter мовы Dart, можна выкарыстоўваць інтэрфейс Dart Foreign Function для выкліку кода на C/C++. Высокая прадукцыйнасць выканання дасягаецца дзякуючы кампіляцыі прыкладанняў у машынны код для мэтавых платформ. Пры гэтым праграму не трэба перакампіляваць пасля кожнай змены — Dart дае рэжым гарачай перазагрузкі, які дазваляе ўносіць змены ў працуючае прыкладанне і адразу ацэньваць вынік.

Асноўныя змены ва Flutter 2.5:

  • Унесены значныя аптымізацыі прадукцыйнасці. На платформах iOS і macOS рэалізавана перадкампіляцыя шэйдараў для графічнага API Metal. Павышана эфектыўнасць апрацоўкі асінхронных падзей. Вырашаная праблема з затрымкамі падчас вызвалення зборшчыкам смецця памяці ад невыкарыстоўваных малюнкаў (напрыклад, падчас прайгравання 20-секунднага аніміраванага GIF колькасць аперацый зборкі смецця зніжана з 400 да 4. Да 50% зніжаны затрымкі пры перадачы паведамленняў паміж Dart і Objective-C (iOS) або Java/Kotlin (Android) Дададзена падтрымка роднай зборкі для сістэм на базе чыпа Apple Silicon.
    Даступныя мова Dart 2.14 і фрэймворк Flutter 2.5
  • Для платформы Android наладжана падтрымка працы прыкладанняў у поўнаэкранным рэжыме. Прадоўжана рэалізацыя канцэпцыі афармлення "Material You", якая падносіцца як варыянт Material Design наступнага пакалення. Дададзена новы стан MaterialState.scrolledUnder, рэалізавана дынамічнае адлюстраванне палос пракруткі пры змене памеру і прапанаваны новы інтэрфейс для адлюстравання банэраў з апавяшчэннямі.
  • Значна пашыраны магчымасці плагіна для працы з камерай, у якім з'явіліся сродкі для кіравання аўтафокусам, экспазіцыяй, выбліскам, павелічэннем, прыгнечаннем шумоў і дазволам.
  • Палепшаны інструменты для распрацоўшчыкаў (DevTools), у якіх з'явіўся абноўлены рэжым інспектавання віджэтаў, а таксама прадастаўлены сродкі для выяўлення затрымак пры адмалёўцы і адсочванні кампіляцыі шэйдараў.
    Даступныя мова Dart 2.14 і фрэймворк Flutter 2.5
  • Палепшаны плагіны для Visual Studio Code і IntelliJ / Android Studio.

Крыніца: opennet.ru

Дадаць каментар