Հասանելի է Dart 2.15 ծրագրավորման լեզուն և Flutter 2.8 շրջանակը

Google-ը հրապարակել է Dart 2.15 ծրագրավորման լեզվի թողարկումը, որը շարունակում է Dart 2-ի արմատապես վերանախագծված ճյուղի զարգացումը, որը տարբերվում է Dart լեզվի սկզբնական տարբերակից ուժեղ ստատիկ մուտքագրման օգտագործմամբ (տեսակները կարող են ենթադրվել ավտոմատ կերպով, այնպես որ. տեսակները նշելն անհրաժեշտ չէ, բայց դինամիկ մուտքագրումն այլևս չի օգտագործվում, և սկզբում հաշվարկված տեսակը վերագրվում է փոփոխականին, և այնուհետև կիրառվում է խիստ տեսակի ստուգում):

Dart լեզվի առանձնահատկությունները.

  • Ծանոթ և հեշտ սովորվող շարահյուսություն, բնական JavaScript, C և Java ծրագրավորողների համար:
  • Արագ գործարկում և բարձր կատարողականության ապահովում բոլոր ժամանակակից վեբ բրաուզերների և տարբեր տեսակի միջավայրերի համար՝ շարժական սարքերից մինչև հզոր սերվերներ:
  • Դասեր և միջերեսներ սահմանելու ունակություն, որոնք թույլ են տալիս ներառել և վերօգտագործել գոյություն ունեցող մեթոդները և տվյալները:
  • Տիպերի հստակեցումը հեշտացնում է վրիպազերծումը և սխալների հայտնաբերումը, ծածկագիրը դարձնում է ավելի պարզ և ընթեռնելի, ինչպես նաև հեշտացնում է դրա փոփոխությունն ու վերլուծությունը երրորդ կողմի մշակողների կողմից:
  • Աջակցվող տեսակները ներառում են՝ տարբեր տեսակի հեշեր, զանգվածներ և ցուցակներ, հերթեր, թվային և տողերի տեսակներ, ամսաթվի և ժամի որոշման տեսակներ, կանոնավոր արտահայտություններ (RegExp): Հնարավոր է ստեղծել ձեր սեփական տեսակները։
  • Զուգահեռ կատարումը կազմակերպելու համար առաջարկվում է օգտագործել isolate հատկանիշով դասեր, որոնց ծածկագիրը ամբողջությամբ կատարվում է մեկուսացված տարածության մեջ առանձին հիշողության տարածքում՝ փոխազդելով հիմնական գործընթացի հետ՝ ուղարկելով հաղորդագրություններ։
  • Աջակցություն գրադարանների օգտագործմանը, որոնք հեշտացնում են մեծ վեբ նախագծերի աջակցությունն ու վրիպազերծումը: Երրորդ կողմի գործառույթների իրականացումը կարող է ներառվել ընդհանուր գրադարանների տեսքով: Հավելվածները կարելի է բաժանել մասերի և յուրաքանչյուր մասի մշակումը վստահել ծրագրավորողների առանձին թիմին։
  • Պատրաստի գործիքների մի շարք, որոնք աջակցում են Dart լեզվի զարգացմանը, ներառյալ դինամիկ մշակման և վրիպազերծման գործիքների ներդրումը կոդերի շտկումով («խմբագրել և շարունակել»):
  • Dart լեզվով զարգացումը պարզեցնելու համար այն գալիս է SDK-ով, փաթեթների կառավարիչ փաբով, ստատիկ կոդերի անալիզատորով dart_analyzer, գրադարանների մի շարք, ինտեգրված զարգացման միջավայր DartPad և Dart միացված պլագիններ IntelliJ IDEA-ի, WebStorm-ի, Emacs-ի, Sublime Text-ի համար: 2 և Վիմ.
  • Գրադարաններով և կոմունալ ծառայություններով լրացուցիչ փաթեթներ են բաշխվում փաբի շտեմարանի միջոցով, որն ունի մոտ 22 հազար փաթեթ։

Dart 2.15 թողարկման հիմնական փոփոխությունները.

  • Ապահովում է գործիքներ՝ առաջադրանքների արագ զուգահեռ կատարման համար՝ մշակողների մեկուսացմամբ: Բազմամիջուկ համակարգերում Dart-ի գործարկման ժամանակը լռելյայնորեն գործարկում է հավելվածի կոդը մեկ պրոցեսորի միջուկի վրա և օգտագործում է այլ միջուկներ՝ համակարգային առաջադրանքներ կատարելու համար, ինչպիսիք են ասինխրոն I/O, ֆայլերին գրելը կամ ցանցային զանգեր կատարելը: Հավելվածների համար, որոնք պետք է զուգահեռ գործարկեն իրենց մշակողները, օրինակ՝ ինտերֆեյսում անիմացիան ցուցադրելու համար, հնարավոր է գործարկել կոդերի առանձին բլոկներ (մեկուսացված), որոնք մեկուսացված են միմյանցից և գործարկվում են պրոցեսորի այլ միջուկների վրա՝ միաժամանակ հիմնական հավելվածի շղթայի հետ։ . Սխալներից պաշտպանվելու համար, որոնք առաջանում են տվյալների միևնույն հավաքածուի հետ աշխատող կոդի միաժամանակյա կատարման ժամանակ, արգելվում է փոփոխական օբյեկտների փոխանակումը տարբեր մեկուսացված բլոկներում, և օգտագործվում է հաղորդագրություն փոխանցող մոդել՝ մշակողների միջև փոխգործակցության համար:

    Dart 2.15-ը ներկայացնում է նոր հայեցակարգ՝ մեկուսացված բլոկների խմբեր (մեկուսացված խմբեր), որը թույլ է տալիս կազմակերպել ընդհանուր մուտք դեպի տարբեր ներքին տվյալների կառուցվածքներ մեկուսացված բլոկներում, որոնք նույն խմբի մաս են կազմում, ինչը կարող է զգալիորեն նվազեցնել ծախսերը խմբում կառավարիչների միջև փոխգործակցության ժամանակ: . Օրինակ, գոյություն ունեցող խմբում լրացուցիչ մեկուսիչ բլոկի գործարկումը 100 անգամ ավելի արագ է և պահանջում է 10-100 անգամ ավելի քիչ հիշողություն, քան առանձին մեկուսի բլոկի գործարկումը, ծրագրի տվյալների կառուցվածքների սկզբնավորման անհրաժեշտության վերացման պատճառով:

    Չնայած այն հանգամանքին, որ խմբում մեկուսացված բլոկները դեռևս արգելում են ընդհանուր մուտքը դեպի փոփոխական օբյեկտներ, խմբերն օգտագործում են ընդհանուր կույտային հիշողություն, որը կարող է զգալիորեն արագացնել օբյեկտների փոխանցումը մի բլոկից մյուսը՝ առանց ռեսուրսների ինտենսիվ պատճենման գործողություններ կատարելու անհրաժեշտության: Նոր տարբերակը նաև թույլ է տալիս փոխանցել մշակողի արդյունքը Isolate.exit()-ին զանգահարելիս՝ առանց պատճենահանման գործողությունների տվյալների փոխանցման ծնող մեկուսացման բլոկին: Բացի այդ, հաղորդագրությունների փոխանցման մեխանիզմը օպտիմիզացվել է. փոքր և միջին հաղորդագրություններն այժմ մշակվում են մոտավորապես 8 անգամ ավելի արագ: Օբյեկտները, որոնք կարող են փոխանցվել մեկուսարանների միջև՝ օգտագործելով SendPort.send() կանչը, ներառում են որոշ տեսակի ֆունկցիաներ, փակումներ և կույտի հետքեր:

  • Այլ օբյեկտներում առանձին ֆունկցիաների ցուցիչներ ստեղծելու գործիքներում (կտրվածք) վերացվել են կոնստրուկտորական կոդում նմանատիպ ցուցիչներ ստեղծելու սահմանափակումները, որոնք կարող են օգտակար լինել Flutter գրադարանի վրա հիմնված ինտերֆեյսներ կառուցելիս: Օրինակ՝ Սյունակի վիջեթ ստեղծելու համար, որը ներառում է բազմաթիվ Տեքստային վիջեթներ, կարող եք զանգահարել «.map()» և փոխանցել ցուցիչներ Տեքստային օբյեկտի Text.new կոնստրուկտորին. class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( երեխաներ. ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Ընդլայնվել են գործառույթների ցուցիչների օգտագործման հետ կապված հնարավորությունները: Ավելացրել է ընդհանուր մեթոդների և ֆունկցիայի ցուցիչների օգտագործման հնարավորությունը՝ ոչ ընդհանուր մեթոդ և ցուցիչ ստեղծելու համար՝ T id (T արժեք) => արժեք; var intId = id ; // թույլատրված է 2.15 տարբերակում՝ «int Function(int) intId = id;» փոխարեն: const fo = id; // ցուցիչ ֆունկցիայի id-ին: const c1 = fo ;
  • Dart:core գրադարանը բարելավել է enums-ի աջակցությունը, օրինակ, այժմ կարող եք լարային արժեք դուրս բերել յուրաքանչյուր թվային արժեքից՝ օգտագործելով «.name» մեթոդը, ընտրել արժեքներն ըստ անունների կամ համապատասխանեցնել արժեքների զույգերը՝ enum MyEnum { one: , երկու, երեք } void main() {print(MyEnum.one.name); // «մեկը» կտպվի։ print(MyEnum.values.byName('two') == MyEnum.two); // «ճշմարիտ» կտպվի: վերջնական քարտեզ = MyEnum.values.asNameMap(); տպել (քարտեզ['երեք'] == MyEnum.three); // "ճիշտ". }
  • Իրականացվել է ցուցիչի սեղմման տեխնիկա, որը թույլ է տալիս օգտագործել ցուցիչների ավելի կոմպակտ ներկայացում 64-բիթանոց միջավայրերում, եթե հասցեավորման համար բավարար է 32-բիթանոց հասցեի տարածքը (օգտագործվում է ոչ ավելի, քան 4 ԳԲ հիշողություն): Փորձարկումները ցույց են տվել, որ նման օպտիմալացումը թույլ է տալիս նվազեցնել կույտի չափը մոտավորապես 10%-ով: Flutter SDK-ում նոր ռեժիմն արդեն լռելյայն միացված է Android-ի համար և նախատեսվում է միացնել iOS-ի համար ապագա թողարկումում:
  • Dart SDK-ն ներառում է վրիպազերծման և կատարողականի վերլուծության գործիքներ (DevTools), որոնք նախկինում տրամադրվում էին առանձին փաթեթով:
  • Գործիքներ են ավելացվել «dart pub» հրամանին և pub.dev փաթեթի պահոցներին՝ գաղտնի տեղեկատվության պատահական հրապարակմանը հետևելու համար, օրինակ՝ փաթեթի ներսում շարունակական ինտեգրացիոն համակարգերի և ամպային միջավայրերի հավատարմագրերը թողնելով: Եթե ​​նման արտահոսքեր հայտնաբերվեն, «dart pub հրատարակել» հրամանի կատարումը կդադարեցվի սխալի հաղորդագրությամբ: Եթե ​​եղել է կեղծ դրական, ապա ստուգումը հնարավոր է շրջանցել սպիտակ ցուցակի միջոցով։
  • Փաթեթի արդեն հրապարակված տարբերակը չեղարկելու հնարավորությունը ավելացվել է pub.dev պահոցում, օրինակ, եթե հայտնաբերվեն վտանգավոր սխալներ կամ խոցելիություններ: Նախկինում նման ուղղումների համար պրակտիկա էր հրապարակել ուղղիչ տարբերակը, սակայն որոշ իրավիճակներում անհրաժեշտ է չեղարկել առկա թողարկումը և շտապ դադարեցնել դրա հետագա բաշխումը (օրինակ, եթե ուղղումը դեռ պատրաստ չէ կամ եթե ամբողջական թողարկումն էր սխալմամբ հրապարակված փորձնական տարբերակի փոխարեն): Չեղարկվելուց հետո փաթեթն այլևս չի ճանաչվում «pub get» և «pub upgrade» հրամաններում, իսկ այն համակարգերում, որոնք արդեն տեղադրել են, հատուկ նախազգուշացում է տրվում հաջորդ անգամ «pub get» գործարկելու դեպքում:
  • Ավելացվել է պաշտպանություն խոցելիությունից (CVE-2021-22567), որն առաջացել է կոդի մեջ unicode նիշերի օգտագործման պատճառով, որոնք փոխում են ցուցադրման կարգը:
  • Շտկվել է խոցելիություն (CVE-2021-22568), որը թույլ է տալիս նմանակել մեկ այլ pub.dev օգտատիրոջ՝ փաթեթներ հրապարակելիս երրորդ կողմի սերվերում, որն ընդունում է pub.dev oauth2 մուտքի նշան: Օրինակ, խոցելիությունը կարող է օգտագործվել ներքին և կորպորատիվ փաթեթների սերվերների վրա հարձակվելու համար: Ծրագրավորողները, որոնք միայն փաթեթներ են հյուրընկալում pub.dev-ում, չեն ազդում այս խնդրի վրա:

Միևնույն ժամանակ ներկայացվեց Flutter 2.8 օգտատիրոջ ինտերֆեյսի շրջանակի զգալի թողարկումը, որը համարվում է React Native-ի այլընտրանք և թույլ է տալիս մեկ կոդային բազայի հիման վրա թողարկել հավելվածներ iOS-ի, Android-ի, Windows-ի, macOS-ի և. Linux հարթակներ, ինչպես նաև ստեղծել հավելվածներ՝ բրաուզերներում աշխատելու համար: Flutter-ի հիման վրա ստեղծվել է Google-ի կողմից մշակված Fuchsia microkernel օպերացիոն համակարգի հատուկ պատյան: Նշվում է, որ վերջին վեց ամիսների ընթացքում Google Play Store-ում Flutter 2 հավելվածների թիվը 200 հազարից հասել է 375 հազարի, այսինքն. գրեթե երկու անգամ:

Flutter կոդի հիմնական մասը ներդրված է Dart լեզվով, իսկ հավելվածների կատարման ժամանակի շարժիչը գրված է C++-ով։ Հավելվածներ մշակելիս, բացի Flutter-ի մայրենի Dart լեզվից, կարող եք օգտագործել Dart Foreign Function ինտերֆեյսը C/C++ կոդը կանչելու համար: Կատարման բարձր կատարողականությունը ձեռք է բերվում թիրախային հարթակների համար հավելվածները հայրենի կոդի մեջ կազմելու միջոցով: Այս դեպքում, յուրաքանչյուր փոփոխությունից հետո ծրագիրը պետք չէ վերակոմպիլյացիայի ենթարկել. Dart-ն ապահովում է տաք վերաբեռնման ռեժիմ, որը թույլ է տալիս փոփոխություններ կատարել գործող հավելվածում և անմիջապես գնահատել արդյունքը:

Flutter-ի նոր թողարկման փոփոխություններից նշվում է շարժական սարքերում գործարկման արագության և հիշողության սպառման օպտիմիզացումը։ Ավելի հեշտ է միացնել հավելվածները հետնամասային ծառայություններին, ինչպիսիք են Firebase-ը և Google Cloud-ը: Google Ads-ի հետ ինտեգրվելու գործիքները կայունացվել են: Տեսախցիկների և վեբ հավելվածների աջակցությունը զգալիորեն բարելավվել է: Առաջարկվել են նոր գործիքներ՝ զարգացումը պարզեցնելու համար, օրինակ՝ Firebase-ի միջոցով վավերացման համար ավելացվել է վիդջեթ։ Flame շարժիչը, որը նախատեսված է Flutter-ի միջոցով 2D խաղեր մշակելու համար, թարմացվել է:

Source: opennet.ru

Добавить комментарий