Available ang Dart 2.15 programming language at Flutter 2.8 framework

Inilathala ng Google ang paglabas ng Dart 2.15 programming language, na nagpapatuloy sa pagbuo ng isang sangay ng Dart 2 na radikal na muling idisenyo, na naiiba sa orihinal na bersyon ng wikang Dart sa paggamit ng malakas na static na pag-type (maaaring awtomatikong matukoy ang mga uri, kaya tinukoy ang mga uri ay hindi kinakailangan, ngunit ang dynamic na pag-type ay hindi na ginagamit at ang paunang kalkulasyon ang uri ay itinalaga sa variable at ang mahigpit na pagsusuri ng uri ay inilapat pagkatapos).

Mga tampok ng wikang Dart:

  • Pamilyar at madaling matutunan ang syntax, natural para sa JavaScript, C at Java programmer.
  • Tinitiyak ang mabilis na paglulunsad at mataas na pagganap para sa lahat ng modernong web browser at iba't ibang uri ng mga kapaligiran, mula sa mga portable na device hanggang sa makapangyarihang mga server.
  • Ang kakayahang tukuyin ang mga klase at interface na nagbibigay-daan sa encapsulation at muling paggamit ng mga kasalukuyang pamamaraan at data.
  • Ang pagtukoy ng mga uri ay nagpapadali sa pag-debug at pagtukoy ng mga error, ginagawang mas malinaw at mas nababasa ang code, at pinapasimple ang pagbabago at pagsusuri nito ng mga third-party na developer.
  • Kasama sa mga sinusuportahang uri ang: iba't ibang uri ng mga hash, array at listahan, mga pila, numeric at mga uri ng string, mga uri para sa pagtukoy ng petsa at oras, mga regular na expression (RegExp). Posible na lumikha ng iyong sariling mga uri.
  • Upang ayusin ang parallel execution, iminungkahi na gumamit ng mga klase na may ihiwalay na katangian, ang code na kung saan ay ganap na isinasagawa sa nakahiwalay na espasyo sa isang hiwalay na lugar ng memorya, na nakikipag-ugnayan sa pangunahing proseso sa pamamagitan ng pagpapadala ng mga mensahe.
  • Suporta para sa paggamit ng mga aklatan na nagpapasimple sa suporta at pag-debug ng malalaking proyekto sa web. Maaaring isama ang mga third-party na pagpapatupad ng mga function sa anyo ng mga shared library. Maaaring hatiin ang mga aplikasyon sa mga bahagi at ipagkatiwala ang pagbuo ng bawat bahagi sa isang hiwalay na pangkat ng mga programmer.
  • Isang hanay ng mga tool na handa na upang suportahan ang pag-unlad sa wikang Dart, kabilang ang pagpapatupad ng mga dynamic na pag-develop at mga tool sa pag-debug na may mabilis na pagwawasto ng code ("edit-and-continue").
  • Upang pasimplehin ang pag-develop sa wikang Dart, ito ay may kasamang SDK, isang package manager pub, isang static code analyzer dart_analyzer, isang set ng mga library, isang integrated development environment na DartPad at Dart-enabled na mga plugin para sa IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 at Vim.
  • Ang mga karagdagang pakete na may mga aklatan at kagamitan ay ipinamamahagi sa pamamagitan ng pub repository, na mayroong humigit-kumulang 22 libong mga pakete.

Mga pangunahing pagbabago sa paglabas ng Dart 2.15:

  • Nagbibigay ng mga tool para sa mabilis na parallel na pagpapatupad ng mga gawain na may paghihiwalay ng mga humahawak. Sa mga multi-core system, ang Dart runtime bilang default ay nagpapatakbo ng application code sa isang CPU core at gumagamit ng iba pang mga core para magsagawa ng mga gawain ng system gaya ng asynchronous na I/O, pagsusulat sa mga file, o paggawa ng mga tawag sa network. Para sa mga application na kailangang isagawa ang kanilang mga handler nang magkatulad, halimbawa, upang mag-render ng animation sa interface, posibleng maglunsad ng hiwalay na mga bloke ng code (ihiwalay), ihiwalay sa isa't isa at isagawa sa iba pang mga core ng CPU nang sabay-sabay sa pangunahing thread ng application . Upang maprotektahan laban sa mga error na lumitaw kapag ang sabay-sabay na pagpapatupad ng code na gumagana sa parehong hanay ng data, ang pagbabahagi ng mga nababagong bagay sa iba't ibang mga bloke ay ipinagbabawal, at isang modelo ng pagpasa ng mensahe ay ginagamit para sa pakikipag-ugnayan sa pagitan ng mga humahawak.

    Ang Dart 2.15 ay nagpapakilala ng bagong konsepto - mga nakahiwalay na block group (ihiwalay ang mga grupo), na nagbibigay-daan sa iyong ayusin ang nakabahaging pag-access sa iba't ibang internal na istruktura ng data sa mga nakahiwalay na bloke na bahagi ng parehong grupo, na maaaring makabuluhang bawasan ang overhead kapag nakikipag-ugnayan sa pagitan ng mga humahawak sa isang grupo . Halimbawa, ang paglulunsad ng karagdagang isolate block sa isang umiiral na grupo ay 100 beses na mas mabilis at nangangailangan ng 10-100 beses na mas kaunting memory kaysa sa paglulunsad ng isang hiwalay na isolate block, dahil sa pag-aalis ng pangangailangan na simulan ang mga istruktura ng data ng programa.

    Sa kabila ng katotohanang ipinagbabawal pa rin ng mga nakahiwalay na bloke sa isang grupo ang nakabahaging pag-access sa mga nababagong bagay, ang mga grupo ay gumagamit ng shared heap memory, na maaaring makabuluhang mapabilis ang paglipat ng mga bagay mula sa isang bloke patungo sa isa pa nang hindi nangangailangan na magsagawa ng mga operasyon ng pagkopya na masinsinang mapagkukunan. Ang bagong bersyon ay nagbibigay-daan din sa iyo na ipasa ang resulta ng handler kapag tumatawag sa Isolate.exit() upang maglipat ng data sa parent isolate block nang hindi kinokopya ang mga operasyon. Bilang karagdagan, ang mekanismo ng paghahatid ng mensahe ay na-optimize - ang maliliit at katamtamang mga mensahe ay pinoproseso na ngayon nang humigit-kumulang 8 beses na mas mabilis. Ang mga bagay na maaaring ipasa sa pagitan ng mga isolates gamit ang SendPort.send() na tawag ay kinabibilangan ng ilang uri ng mga function, pagsasara, at stack trace.

  • Sa mga tool para sa paglikha ng mga pointer sa mga indibidwal na function sa iba pang mga bagay (tear-off), ang mga paghihigpit sa paggawa ng mga katulad na pointer sa constructor code ay inalis, na maaaring maging kapaki-pakinabang kapag bumubuo ng mga interface batay sa Flutter library. Halimbawa, upang lumikha ng Column widget na may kasamang maraming Text widgets, maaari mong tawagan ang ".map()" at ipasa ang mga pointer sa Text.new constructor ng Text object: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Ang mga posibilidad na nauugnay sa paggamit ng mga function pointer ay pinalawak. Idinagdag ang kakayahang gumamit ng mga generic na pamamaraan at mga function pointer upang lumikha ng isang non-generic na paraan at pointer: T id (T value) => halaga; var intId = id ; // pinapayagan sa bersyon 2.15 sa halip na "int Function(int) intId = id;" const fo = id; // pointer sa function id. const c1 = fo ;
  • Ang dart:core library ay nagpabuti ng suporta para sa mga enum, halimbawa, maaari ka na ngayong mag-output ng string value mula sa bawat enum value gamit ang ".name" method, pumili ng mga value ayon sa pangalan, o tumugma sa mga pares ng value: enum MyEnum { one , dalawa, tatlo } void main() { print(MyEnum.one.name); // "isa" ay ipi-print. print(MyEnum.values.byName('two') == MyEnum.two); // "true" ay ipi-print. huling mapa = MyEnum.values.asNameMap(); print(mapa['tatlo'] == MyEnum.three); // "totoo". }
  • Ang isang pointer compression technique ay ipinatupad na nagbibigay-daan sa paggamit ng isang mas compact na representasyon ng mga pointer sa 64-bit na kapaligiran kung ang isang 32-bit address space ay sapat para sa pag-address (hindi hihigit sa 4 GB ng memorya ang ginagamit). Ipinakita ng mga pagsubok na ginagawang posible ng naturang pag-optimize na bawasan ang laki ng heap ng humigit-kumulang 10%. Sa Flutter SDK, naka-enable na ang bagong mode para sa Android bilang default, at pinlano itong i-enable para sa iOS sa isang release sa hinaharap.
  • Kasama sa Dart SDK ang mga tool para sa pag-debug at pagtatasa ng pagganap (DevTools), na dating ibinigay sa isang hiwalay na pakete.
  • Naidagdag ang mga tool sa command na "dart pub" at sa mga repository ng package ng pub.dev para subaybayan ang aksidenteng paglalathala ng kumpidensyal na impormasyon, halimbawa, nag-iiwan ng mga kredensyal para sa tuluy-tuloy na integration system at cloud environment sa loob ng package. Kung matukoy ang mga naturang pagtagas, ang pagpapatupad ng command na "dart pub publish" ay maaantala ng isang mensahe ng error. Kung mayroong maling positibo, posibleng i-bypass ang tseke sa pamamagitan ng puting listahan.
  • Ang kakayahang bawiin ang isang na-publish na bersyon ng isang package ay idinagdag sa pub.dev repository, halimbawa, kung ang mga mapanganib na error o kahinaan ay natuklasan. Dati, para sa mga naturang pagwawasto, ang pagsasanay ay mag-publish ng isang corrective na bersyon, ngunit sa ilang mga sitwasyon ay kinakailangan upang kanselahin ang umiiral na release at agarang ihinto ang karagdagang pamamahagi nito (halimbawa, kung ang pagwawasto ay hindi pa handa o kung ang isang buong release ay na-publish nang hindi sinasadya sa halip na isang pagsubok na bersyon). Pagkatapos ng pagbawi, hindi na natukoy ang package sa mga command na "pub get" at "pub upgrade", at sa mga system na na-install na ito, isang espesyal na babala ang ibibigay sa susunod na isagawa ang "pub get".
  • Nagdagdag ng proteksyon laban sa isang kahinaan (CVE-2021-22567) na dulot ng paggamit ng mga unicode na character sa code na nagbabago sa pagkakasunud-sunod ng pagpapakita.
  • Inayos ang isang kahinaan (CVE-2021-22568) na nagbibigay-daan sa iyong magpanggap bilang isa pang user ng pub.dev kapag nagpa-publish ng mga package sa isang third-party na server na tumatanggap ng mga token ng access ng pub.dev oauth2. Halimbawa, ang kahinaan ay maaaring gamitin upang atakehin ang mga internal at corporate na mga server ng package. Ang mga developer na nagho-host lang ng mga package sa pub.dev ay hindi apektado ng isyung ito.

Kasabay nito, ipinakita ang isang makabuluhang paglabas ng balangkas ng interface ng gumagamit na Flutter 2.8, na itinuturing na alternatibo sa React Native at nagbibigay-daan, batay sa isang base ng code, na maglabas ng mga application para sa iOS, Android, Windows, macOS at Mga platform ng Linux, pati na rin ang paglikha ng mga application na tatakbo sa mga browser. Ang isang custom na shell para sa Fuchsia microkernel operating system na binuo ng Google ay binuo batay sa Flutter. Napansin na sa nakalipas na anim na buwan, ang bilang ng mga Flutter 2 application sa Google Play Store ay tumaas mula 200 thousand hanggang 375 thousand, i.e. halos dalawang beses.

Ang pangunahing bahagi ng Flutter code ay ipinatupad sa wikang Dart, at ang runtime engine para sa pagpapatupad ng mga application ay nakasulat sa C++. Kapag bumubuo ng mga application, bilang karagdagan sa katutubong wika ng Dart ng Flutter, maaari mong gamitin ang interface ng Dart Foreign Function upang tawagan ang C/C++ code. Ang mataas na pagganap ng pagpapatupad ay nakakamit sa pamamagitan ng pag-compile ng mga application sa native code para sa mga target na platform. Sa kasong ito, ang programa ay hindi kailangang i-recompiled pagkatapos ng bawat pagbabago - Dart ay nagbibigay ng isang mainit na reload mode na nagbibigay-daan sa iyo upang gumawa ng mga pagbabago sa isang tumatakbong application at agad na suriin ang resulta.

Kabilang sa mga pagbabago sa bagong release ng Flutter, nabanggit ang pag-optimize ng bilis ng paglulunsad at pagkonsumo ng memory sa mga mobile device. Mas madaling ikonekta ang mga app sa mga backend na serbisyo gaya ng Firebase at Google Cloud. Ang mga tool para sa pagsasama sa Google Ads ay na-stabilize. Ang suporta para sa mga camera at web plugin ay makabuluhang napabuti. Ang mga bagong tool ay iminungkahi upang pasimplehin ang pag-develop, halimbawa, isang widget ang idinagdag para sa pagpapatunay gamit ang Firebase. Ang Flame engine, na idinisenyo para sa pagbuo ng mga 2D na laro gamit ang Flutter, ay na-update.

Pinagmulan: opennet.ru

Magdagdag ng komento