Dart 2.15 программалоо тили жана Flutter 2.8 фреймворк жеткиликтүү

Google Dart 2.15 программалоо тилинин чыгарылышын жарыялады, ал түп тамырынан бери кайра иштелип чыккан Dart 2 бутагын өнүктүрүүнү улантат, ал Dart тилинин баштапкы версиясынан күчтүү статикалык терүүнү колдонуу менен айырмаланат (түрлөр автоматтык түрдө чыгарылат, ошондуктан тактоо менен түрлөрүнүн кереги жок, бирок динамикалык терүү мындан ары колдонулбайт жана баштапкы эсептөө түрү өзгөрмөгө дайындалат жана кийинчерээк типти катуу текшерүү колдонулат).

Дарт тилинин өзгөчөлүктөрү:

  • Тааныш жана үйрөнүүгө оңой синтаксис, JavaScript, C жана Java программисттери үчүн табигый.
  • Бардык заманбап веб-браузерлер жана портативдик түзүлүштөрдөн күчтүү серверлерге чейин ар кандай чөйрөлөр үчүн тез ишке киргизүүнү жана жогорку өндүрүмдүүлүктү камсыз кылуу.
  • Учурдагы ыкмаларды жана маалыматтарды инкапсуляциялоого жана кайра колдонууга мүмкүндүк берген класстарды жана интерфейстерди аныктоо мүмкүнчүлүгү.
  • Типтерди көрсөтүү каталарды оңдоону жана аныктоону жеңилдетет, кодду ачык-айкын жана окула турган кылып, үчүнчү тараптын иштеп чыгуучулары тарабынан аны өзгөртүүнү жана талдоону жөнөкөйлөтөт.
  • Колдоого алынган түрлөрүнө төмөнкүлөр кирет: хэштердин ар кандай түрлөрү, массивдер жана тизмелер, кезектер, сандык жана саптык типтер, дата менен убакытты аныктоо үчүн типтер, регулярдуу туюнтмалар (RegExp). Бул өз түрлөрүн түзүү мүмкүн.
  • Параллелдүү аткарууну уюштуруу үчүн изоляция атрибуту бар класстарды колдонуу сунушталат, алардын коду толугу менен өзүнчө эстутумдун зонасында обочолонгон мейкиндикте аткарылат, билдирүүлөрдү жөнөтүү аркылуу негизги процесс менен өз ара аракеттенет.
  • Чоң веб-долбоорлорду колдоону жана мүчүлүштүктөрдү оңдоону жөнөкөйлөштүрүүчү китепканаларды колдонууну колдоо. Үчүнчү тараптын функцияларды ишке ашыруулары жалпы китепканалар түрүндө киргизилиши мүмкүн. Тиркемелер бөлүктөргө бөлүнүп, ар бир бөлүгүн иштеп чыгууну өзүнчө программисттер тобуна тапшырса болот.
  • Дарт тилинде иштеп чыгууну колдоо үчүн даяр инструменттердин жыйындысы, анын ичинде динамикалык иштеп чыгууну ишке ашыруу жана кодду тез оңдоо менен мүчүлүштүктөрдү оңдоо куралдары («түзөтүү жана улантуу»).
  • 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 extends StatelessWidget { @override Widget build(BuildContext context) { 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 маанисинен сап маанисин чыгара аласыз, маанилерди аты боюнча тандап же жуп баалуулуктарды дал келтире аласыз: enum MyEnum { one , эки, үч } void main() { print(MyEnum.one.name); // "бир" басылып чыгат. print(MyEnum.values.byName('эки') == MyEnum.two); // "чын" басылып чыгат. акыркы карта = MyEnum.values.asNameMap(); print(map['three'] == 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++ тилинде жазылган. Тиркемелерди иштеп чыгууда, Флуттердин дарт тилинен тышкары, сиз C/C++ кодун чакыруу үчүн Dart Foreign Function интерфейсин колдоно аласыз. Жогорку аткаруу көрсөткүчү максаттуу платформалар үчүн жергиликтүү кодго тиркемелерди түзүү аркылуу жетишилет. Бул учурда, программаны ар бир өзгөртүүдөн кийин кайра компиляциялоонун кереги жок - Dart иштеп жаткан тиркемеге өзгөртүүлөрдү киргизүүгө жана натыйжаны дароо баалоого мүмкүндүк берүүчү ысык кайра жүктөө режимин камсыз кылат.

Flutter жаңы чыгарылышындагы өзгөрүүлөрдүн арасында мобилдик түзмөктөрдө ишке киргизүү ылдамдыгын оптималдаштыруу жана эстутум керектөө белгиленген. Колдонмолорду Firebase жана Google Cloud сыяктуу сервердик кызматтарга туташтыруу оңой. Google Ads менен интеграциялоо куралдары турукташтырылды. Камераларды жана веб плагиндерди колдоо кыйла жакшырды. Иштеп чыгууну жөнөкөйлөтүү үчүн жаңы инструменттер сунушталды, мисалы, Firebase аркылуу аутентификация үчүн виджет кошулду. Flutter аркылуу 2D оюндарын иштеп чыгуу үчүн иштелип чыккан Flame кыймылдаткычы жаңыртылды.

Source: opennet.ru

Комментарий кошуу