Dart 2.15 бағдарламалау тілі және Flutter 2.8 фреймворк қол жетімді

Google Dart 2.15 бағдарламалау тілінің шығарылымын жариялады, ол Dart 2-тің түбегейлі қайта жасақталған тармағын дамытуды жалғастырады, ол Dart тілінің бастапқы нұсқасынан күшті статикалық теруді қолданумен ерекшеленеді (түрлер автоматты түрде шығарылуы мүмкін, сондықтан типтерді көрсету қажет емес, бірақ динамикалық теру бұдан былай пайдаланылмайды және бастапқыда түр айнымалыға тағайындалады және кейіннен қатаң типті тексеру қолданылады).

Дарт тілінің ерекшеліктері:

  • Таныс және үйренуге оңай синтаксис, JavaScript, C және Java бағдарламашылары үшін табиғи.
  • Портативті құрылғылардан қуатты серверлерге дейінгі барлық заманауи веб-шолғыштар мен әртүрлі орта түрлері үшін жылдам іске қосуды және жоғары өнімділікті қамтамасыз ету.
  • Бар әдістер мен деректерді инкапсуляциялауға және қайта пайдалануға мүмкіндік беретін сыныптар мен интерфейстерді анықтау мүмкіндігі.
  • Түрлерді көрсету қателерді түзетуді және анықтауды жеңілдетеді, кодты түсінікті және оқылатын етеді және үшінші тарап әзірлеушілерімен оны өзгерту мен талдауды жеңілдетеді.
  • Қолдау көрсетілетін түрлерге мыналар жатады: хэштердің әртүрлі түрлері, массивтер мен тізімдер, кезектер, сандық және жолдық типтер, күн мен уақытты анықтауға арналған типтер, тұрақты өрнектер (RegExp). Өз түрлеріңізді жасауға болады.
  • Параллельді орындауды ұйымдастыру үшін коды толығымен оқшауланған кеңістікте жеке жад аймағында орындалатын, хабарламаларды жіберу арқылы негізгі процесспен әрекеттесетін оқшауланған атрибутты кластарды пайдалану ұсынылады.
  • Үлкен веб-жобаларды қолдауды және жөндеуді жеңілдететін кітапханаларды пайдалануды қолдау. Функциялардың үшінші тарап іске асырулары ортақ кітапханалар түрінде қосылуы мүмкін. Қолданбаларды бөліктерге бөлуге және әрбір бөлікті әзірлеуді бағдарламашылардың жеке тобына тапсыруға болады.
  • Dart тіліндегі әзірлеуді қолдауға арналған дайын құралдар жиынтығы, соның ішінде динамикалық әзірлеуді және кодты жылдам түзетумен түзету құралдарын енгізу («өңдеу-және жалғастыру»).
  • Dart тілінде әзірлеуді жеңілдету үшін ол SDK, пакет менеджері пабы, dart_analyzer статикалық код анализаторы, кітапханалар жинағы, DartPad біріктірілген өңдеу ортасы және IntelliJ IDEA, WebStorm, Emacs, Sublime Text үшін Dart қолдайтын плагиндермен бірге келеді. 2 және Vim.
  • Кітапханалары мен утилиталары бар қосымша пакеттер шамамен 22 мың пакеті бар паб репозиторийі арқылы таратылады.

Dart 2.15 шығарылымындағы негізгі өзгерістер:

  • Өңдеушілерді оқшаулаумен тапсырмаларды жылдам параллель орындауға арналған құралдарды ұсынады. Көп ядролы жүйелерде Dart жұмыс уақыты әдепкі бойынша бір CPU ядросында қолданба кодын іске қосады және асинхронды енгізу/шығару, файлдарға жазу немесе желілік қоңыраулар жасау сияқты жүйелік тапсырмаларды орындау үшін басқа ядроларды пайдаланады. Өз өңдеушілерін параллель орындауды қажет ететін қолданбалар үшін, мысалы, интерфейсте анимацияны көрсету үшін, негізгі қолданбалы ағынмен бір уақытта бір-бірінен оқшауланған және басқа CPU ядроларында орындалатын бөлек код блоктарын (оқшаулау) іске қосуға болады. . Бірдей деректер жиынтығымен жұмыс істейтін кодты бір уақытта орындау кезінде туындайтын қателерден қорғау үшін әртүрлі оқшауланған блоктардағы өзгермелі объектілерді ортақ пайдалануға тыйым салынады және өңдеушілер арасындағы өзара әрекеттесу үшін хабарламаны жіберу моделі қолданылады.

    Dart 2.15 жаңа тұжырымдаманы енгізеді - оқшауланған блок топтары (оқшауланған топтар), ол бір топтың бөлігі болып табылатын оқшауланған блоктардағы әртүрлі ішкі деректер құрылымдарына ортақ қолжетімділікті ұйымдастыруға мүмкіндік береді, бұл топтағы өңдеушілер арасындағы өзара әрекеттесу кезінде үстеме шығындарды айтарлықтай азайтады. . Мысалы, бар топта қосымша оқшаулау блогын іске қосу бағдарлама деректерінің құрылымдарын инициализациялау қажеттілігін жоюға байланысты бөлек оқшаулау блогын іске қосудан 100 есе жылдамырақ және 10-100 есе аз жадты қажет етеді.

    Топтағы оқшаулау блоктары өзгермелі нысандарға ортақ қол жеткізуге әлі де тыйым салатынына қарамастан, топтар ресурстарды көп қажет ететін көшіру операцияларын орындау қажеттілігінсіз нысандарды бір блоктан екіншісіне тасымалдауды айтарлықтай жылдамдатуға мүмкіндік беретін ортақ үйме жадты пайдаланады. Жаңа нұсқа сонымен қатар көшіру операцияларынсыз деректерді негізгі оқшаулау блогына тасымалдау үшін Isolate.exit() шақыру кезінде өңдеуші нәтижесін беруге мүмкіндік береді. Сонымен қатар, хабарламаларды жіберу механизмі оңтайландырылды - шағын және орта хабарламалар қазір шамамен 8 есе жылдам өңделеді. SendPort.send() шақыруы арқылы оқшауланулар арасында өтуге болатын нысандар функциялардың кейбір түрлерін, жабуларды және стек іздерін қамтиды.

  • Басқа нысандардағы жеке функцияларға көрсеткіштерді құру құралдарында (жырту) конструктор кодында ұқсас көрсеткіштерді жасауға шектеулер жойылды, бұл Flutter кітапханасы негізінде интерфейстерді құру кезінде пайдалы болуы мүмкін. Мысалы, бірнеше Мәтін виджеттерін қамтитын Баған виджетін жасау үшін ".map()" деп қоңырау шалуға және Мәтін нысанының Text.new конструкторына көрсеткіштерді жіберуге болады: FruitWidget класы StatelessWidget кеңейтеді { @override Виджет құрастыру(BuildContext мәтінмәні) { return Column( балалар: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Функция көрсеткіштерін пайдаланумен байланысты мүмкіндіктер кеңейтілді. Жалпы емес әдіс пен көрсеткішті жасау үшін жалпы әдістер мен функция көрсеткіштерін пайдалану мүмкіндігі қосылды: T id (T мәні) => мән; var intId = id ; // "int Function(int) intId = id;" орнына 2.15 нұсқасында рұқсат етілген. const fo = id; // функция идентификаторына көрсеткіш. const c1 = fo ;
  • Dart:core кітапханасында сандық сандар үшін жақсартылған қолдау бар, мысалы, енді ".name" әдісін пайдаланып, әрбір санау мәнінен жол мәнін шығаруға, мәндерді атау бойынша таңдауға немесе мәндердің жұптарын сәйкестендіруге болады: enum MyEnum { one , екі, үш } void main() { print(MyEnum.one.name); // «бір» басып шығарылады. print(MyEnum.values.byName('екі') == MyEnum.two); // «шын» басып шығарылады. соңғы карта = MyEnum.values.asNameMap(); print(map['үш'] == MyEnum.three); // «шын». }
  • Меңзерді қысу техникасы іске асырылды, ол 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) қосымша қорғаныс.
  • Pub.dev oauth2021 кіру таңбалауыштарын қабылдайтын үшінші тарап серверіне пакеттерді жариялау кезінде басқа pub.dev пайдаланушысының кейпін көрсетуге мүмкіндік беретін осалдық (CVE-22568-2) түзетілді. Мысалы, осалдық ішкі және корпоративтік пакет серверлеріне шабуыл жасау үшін пайдаланылуы мүмкін. Тек pub.dev сайтында пакеттерді орналастыратын әзірлеушілерге бұл мәселе әсер етпейді.

Сонымен қатар, Flutter 2.8 пайдаланушы интерфейсінің негізгі релизі ұсынылды, ол React Native-ке балама ретінде қарастырылады және бір кодтық база негізінде iOS, Android, Windows, macOS және қолданбаларды шығаруға мүмкіндік береді. Linux платформалары, сонымен қатар браузерлерде іске қосу үшін қосымшалар жасаңыз. Google әзірлеген Fuchsia микроядролық операциялық жүйесіне арналған реттелетін қабық Flutter негізінде құрастырылған. Соңғы алты айда Google Play дүкеніндегі Flutter 2 қосымшаларының саны 200 мыңнан 375 мыңға дейін өскені атап өтілді, яғни. екі есе дерлік.

Flutter кодының негізгі бөлігі Dart тілінде жүзеге асырылады, ал қолданбаларды орындауға арналған жұмыс уақыты механизмі C++ тілінде жазылған. Қолданбаларды әзірлеу кезінде, Flutter-тің туған Dart тіліне қоса, C/C++ кодын шақыру үшін Dart Foreign Function интерфейсін пайдалануға болады. Жоғары орындау өнімділігі мақсатты платформалар үшін жергілікті кодқа қосымшаларды құрастыру арқылы қол жеткізіледі. Бұл жағдайда бағдарламаны әрбір өзгертуден кейін қайта құрастырудың қажеті жоқ - Dart іске қосылған қолданбаға өзгертулер енгізуге және нәтижені дереу бағалауға мүмкіндік беретін ыстық қайта жүктеу режимін қамтамасыз етеді.

Flutter жаңа шығарылымындағы өзгерістердің ішінде мобильді құрылғыларда іске қосу жылдамдығы мен жадты тұтынуды оңтайландыру атап өтілді. Қолданбаларды Firebase және Google Cloud сияқты серверлік қызметтерге қосу оңайырақ. Google Ads-пен біріктіру құралдары тұрақтандырылды. Камералар мен веб-плагиндерді қолдау айтарлықтай жақсарды. Әзірлеуді жеңілдету үшін жаңа құралдар ұсынылды, мысалы, Firebase көмегімен аутентификация үшін виджет қосылды. Flutter көмегімен 2D ойындарын жасауға арналған Flame қозғалтқышы жаңартылды.

Ақпарат көзі: opennet.ru

пікір қалдыру