Lugha ya programu ya Dart 2.15 na mfumo wa Flutter 2.8 unapatikana

Google imechapisha toleo la lugha ya programu ya Dart 2.15, ambayo inaendelea ukuzaji wa tawi lililoundwa upya la Dart 2, ambalo linatofautiana na toleo la asili la lugha ya Dart kwa utumiaji wa uandishi thabiti wa tuli (aina zinaweza kuzingatiwa kiotomatiki, kwa hivyo. kubainisha aina si lazima, lakini uchapaji unaobadilika hautumiki tena na hapo awali kukokotwa aina hiyo imepewa kigeugeu na ukaguzi wa aina kali unatumika baadaye).

Vipengele vya lugha ya Dart:

  • Sintaksia inayofahamika na rahisi kujifunza, asilia kwa watengeneza programu wa JavaScript, C na Java.
  • Kuhakikisha uzinduzi wa haraka na utendakazi wa hali ya juu kwa vivinjari vyote vya kisasa vya wavuti na aina mbalimbali za mazingira, kutoka kwa vifaa vinavyobebeka hadi seva zenye nguvu.
  • Uwezo wa kufafanua madarasa na violesura vinavyoruhusu ujumuishaji na utumiaji tena wa mbinu na data zilizopo.
  • Kubainisha aina hurahisisha utatuzi na kutambua makosa, hurahisisha msimbo kuwa wazi na kusomeka zaidi, na hurahisisha urekebishaji na uchanganuzi wake na wasanidi programu wengine.
  • Aina zinazotumika ni pamoja na: aina mbalimbali za heshi, safu na orodha, foleni, aina za nambari na mfuatano, aina za kuamua tarehe na wakati, maneno ya kawaida (RegExp). Inawezekana kuunda aina zako mwenyewe.
  • Ili kuandaa utekelezaji sambamba, inapendekezwa kutumia madarasa na sifa ya pekee, kanuni ambayo inatekelezwa kabisa katika nafasi ya pekee katika eneo la kumbukumbu tofauti, kuingiliana na mchakato kuu kwa kutuma ujumbe.
  • Usaidizi wa matumizi ya maktaba ambayo hurahisisha usaidizi na utatuzi wa miradi mikubwa ya wavuti. Utekelezaji wa majukumu ya wahusika wengine unaweza kujumuishwa katika mfumo wa maktaba zinazoshirikiwa. Maombi yanaweza kugawanywa katika sehemu na kukabidhi maendeleo ya kila sehemu kwa timu tofauti ya watayarishaji programu.
  • Seti ya zana zilizotengenezwa tayari kusaidia maendeleo katika lugha ya Dart, ikijumuisha utekelezaji wa zana madhubuti za ukuzaji na utatuzi kwa urekebishaji wa msimbo kwenye nzi ("hariri-na-endelea").
  • Ili kurahisisha ukuzaji katika lugha ya Dart, inakuja na SDK, baa ya kidhibiti kifurushi, kichanganuzi cha msimbo tuli dart_analyzer, seti ya maktaba, mazingira jumuishi ya ukuzaji DartPad na programu-jalizi zinazowezeshwa na Dart za IntelliJ IDEA, WebStorm, Emacs, Sublime Text. 2 na Vim.
  • Vifurushi vya ziada na maktaba na huduma husambazwa kupitia hazina ya baa, ambayo ina vifurushi elfu 22.

Mabadiliko makubwa katika toleo la Dart 2.15:

  • Hutoa zana kwa ajili ya utekelezaji wa haraka sambamba wa kazi kwa kuwatenga washikaji. Kwenye mifumo yenye mifumo mingi, muda wa kufanya kazi wa Dart kwa chaguo-msingi huendesha msimbo wa programu kwenye msingi mmoja wa CPU na hutumia viini vingine kutekeleza majukumu ya mfumo kama vile I/O isiyosawazisha, kuandika kwa faili, au kupiga simu za mtandao. Kwa programu ambazo zinahitaji kutekeleza vidhibiti vyao sambamba, kwa mfano, kutoa uhuishaji kwenye kiolesura, inawezekana kuzindua vizuizi tofauti vya msimbo (kujitenga), vilivyotengwa kutoka kwa kila mmoja na kutekelezwa kwa cores zingine za CPU wakati huo huo na uzi kuu wa programu. . Ili kulinda dhidi ya hitilafu zinazotokea wakati wa utekelezaji wa wakati huo huo wa msimbo wa kufanya kazi na seti sawa ya data, ushiriki wa vitu vinavyoweza kubadilika katika vizuizi tofauti vya pekee ni marufuku, na mfano wa kupitisha ujumbe hutumiwa kwa mwingiliano kati ya washughulikiaji.

    Dart 2.15 inaleta dhana mpya - vikundi vilivyotengwa vya kuzuia (vikundi vya kujitenga), ambayo hukuruhusu kupanga ufikiaji wa pamoja wa miundo anuwai ya data ya ndani katika vizuizi vya pekee ambavyo ni sehemu ya kikundi kimoja, ambacho kinaweza kupunguza kwa kiasi kikubwa wakati wa kuingiliana kati ya washughulikiaji katika kikundi. . Kwa mfano, kuzindua kizuizi cha ziada cha pekee katika kikundi kilichopo ni mara 100 kwa kasi na inahitaji kumbukumbu chini ya mara 10-100 kuliko kuzindua kizuizi tofauti cha pekee, kutokana na kuondokana na haja ya kuanzisha miundo ya data ya programu.

    Licha ya ukweli kwamba vizuizi vya kujitenga katika kikundi bado vinakataza ufikiaji wa pamoja wa vitu vinavyoweza kubadilika, vikundi vinatumia kumbukumbu ya lundo iliyoshirikiwa, ambayo inaweza kuongeza kasi ya uhamishaji wa vitu kutoka kwa kizuizi kimoja hadi kingine bila hitaji la kufanya shughuli za nakala kubwa ya rasilimali. Toleo jipya pia hukuruhusu kupitisha matokeo ya kidhibiti wakati wa kupiga simu Isolate.exit() kuhamisha data kwa kizuizi cha kutenganisha cha mzazi bila kunakili shughuli. Kwa kuongeza, utaratibu wa kutuma ujumbe umeboreshwa - ujumbe mdogo na wa kati sasa unachakatwa takriban mara 8 kwa kasi zaidi. Vipengee vinavyoweza kupitishwa kati ya vitenganishi kwa kutumia simu ya SendPort.send() ni pamoja na baadhi ya aina za utendakazi, kufungwa na ufuatiliaji wa rafu.

  • Katika zana za kuunda viashiria kwa kazi za kibinafsi katika vitu vingine (kufuta), vikwazo vya kuunda viashiria sawa katika msimbo wa wajenzi vimeondolewa, ambayo inaweza kuwa muhimu wakati wa kujenga miingiliano kulingana na maktaba ya Flutter. Kwa mfano, ili kuunda wijeti ya Safu ambayo inajumuisha wijeti nyingi za Maandishi, unaweza kupiga simu ".map()" na kupitisha viashiria kwa mjenzi wa Text.new wa kitu cha Maandishi: darasa la FruitWidget huongeza StatelessWidget { @override Widget build(BuildContext context) { rudisha Safu(watoto: ['Apple', 'Orange'].map(Text.new).toList()); }}
  • Uwezekano unaohusishwa na matumizi ya viashiria vya utendakazi umepanuliwa. Imeongeza uwezo wa kutumia mbinu za jumla na viashiria vya utendakazi ili kuunda njia isiyo ya kawaida na kiashirio: T id (T thamani) => thamani; var intId = id ; // inaruhusiwa katika toleo la 2.15 badala ya "int Function(int) intId = id;" const fo = id; // pointer kwa kazi id. const c1 = fo ;
  • Maktaba ya dart:core imeboresha usaidizi wa enum, kwa mfano, sasa unaweza kutoa thamani ya mfuatano kutoka kwa kila thamani ya enum kwa kutumia mbinu ya ".name", chagua thamani kwa jina, au ulinganishe jozi za thamani: enum MyEnum { one , mbili, tatu } void main() { print(MyEnum.one.name); // "moja" itachapishwa. chapa(MyEnum.values.byName('mbili') == MyEnum.two); // "kweli" itachapishwa. ramani ya mwisho = MyEnum.values.asNameMap(); chapa(ramani['tatu'] == MyEnum.three); // "kweli". }
  • Mbinu ya ukandamizaji wa pointer imetekelezwa ambayo inaruhusu matumizi ya uwakilishi wa kompakt zaidi wa viashiria katika mazingira ya 64-bit ikiwa nafasi ya anwani ya 32-bit inatosha kushughulikia (hakuna zaidi ya 4 GB ya kumbukumbu inatumiwa). Uchunguzi umeonyesha kuwa uboreshaji kama huo hufanya iwezekane kupunguza saizi ya lundo kwa takriban 10%. Katika SDK ya Flutter, hali mpya tayari imewezeshwa kwa Android kwa chaguo-msingi, na imepangwa kuwezeshwa kwa iOS katika toleo la baadaye.
  • SDK ya Dart inajumuisha zana za utatuzi na uchanganuzi wa utendakazi (DevTools), ambazo hapo awali zilitolewa katika kifurushi tofauti.
  • Zana zimeongezwa kwa amri ya "dart pub" na hazina za vifurushi vya pub.dev ili kufuatilia uchapishaji wa taarifa za siri kwa bahati mbaya, kwa mfano, kuacha kitambulisho cha mifumo endelevu ya ujumuishaji na mazingira ya wingu ndani ya kifurushi. Ikiwa uvujaji huo utagunduliwa, utekelezaji wa amri ya "dart pub publish" utaingiliwa na ujumbe wa hitilafu. Ikiwa kulikuwa na chanya ya uwongo, inawezekana kupitisha hundi kupitia orodha nyeupe.
  • Uwezo wa kubatilisha toleo lililochapishwa la kifurushi umeongezwa kwenye hazina ya pub.dev, kwa mfano, ikiwa hitilafu hatari au udhaifu utagunduliwa. Hapo awali, kwa marekebisho kama haya, mazoezi yalikuwa kuchapisha toleo la kusahihisha, lakini katika hali zingine ni muhimu kughairi toleo lililopo na kusimamisha usambazaji wake zaidi (kwa mfano, ikiwa urekebishaji bado haujawa tayari au ikiwa toleo kamili lilikuwa. iliyochapishwa kwa makosa badala ya toleo la jaribio). Baada ya kubatilisha, kifurushi hakitambuliwi tena katika amri za "pub get" na "pub upgrade", na kwenye mifumo ambayo tayari imeisakinisha, onyo maalum hutolewa wakati "pub get" inapotekelezwa.
  • Ulinzi ulioongezwa dhidi ya athari (CVE-2021-22567) inayosababishwa na matumizi ya herufi za unicode katika msimbo unaobadilisha mpangilio wa onyesho.
  • Imerekebisha uwezekano wa kuathiriwa (CVE-2021-22568) unaokuruhusu kuiga mtumiaji mwingine wa pub.dev unapochapisha vifurushi kwa seva ya watu wengine ambayo inakubali tokeni za ufikiaji za pub.dev oauth2. Kwa mfano, athari inaweza kutumika kushambulia seva za vifurushi vya ndani na vya shirika. Wasanidi programu wanaopangisha vifurushi kwenye pub.dev pekee hawaathiriwi na suala hili.

Wakati huo huo, kutolewa muhimu kwa mfumo wa kiolesura cha mtumiaji Flutter 2.8 iliwasilishwa, ambayo inachukuliwa kuwa mbadala wa React Native na inaruhusu, kwa msingi wa msingi mmoja wa nambari, kutoa programu za iOS, Android, Windows, macOS na. Majukwaa ya Linux, pamoja na kuunda programu za kuendesha katika vivinjari. Gamba maalum la mfumo wa uendeshaji wa microkernel wa Fuchsia uliotengenezwa na Google umejengwa kwa msingi wa Flutter. Imeelezwa kuwa katika kipindi cha miezi sita iliyopita, idadi ya maombi ya Flutter 2 katika Hifadhi ya Google Play imeongezeka kutoka 200 elfu hadi 375 elfu, i.e. karibu mara mbili.

Sehemu kuu ya nambari ya Flutter inatekelezwa katika lugha ya Dart, na injini ya wakati wa kutekeleza programu imeandikwa katika C ++. Unapotengeneza programu, pamoja na lugha asilia ya Flutter ya Dart, unaweza kutumia kiolesura cha Dart Foreign Function kupiga msimbo wa C/C++. Utendaji wa hali ya juu unapatikana kwa kukusanya programu kwa msimbo asilia kwa majukwaa lengwa. Katika kesi hii, mpango hauhitaji kurejeshwa baada ya kila mabadiliko - Dart hutoa hali ya kupakia upya moto ambayo inakuwezesha kufanya mabadiliko kwenye programu inayoendesha na mara moja kutathmini matokeo.

Miongoni mwa mabadiliko katika toleo jipya la Flutter, uboreshaji wa kasi ya uzinduzi na utumiaji wa kumbukumbu kwenye vifaa vya rununu hubainika. Ni rahisi kuunganisha programu kwenye huduma za nyuma kama vile Firebase na Google Cloud. Zana za kuunganishwa na Google Ads zimeimarishwa. Usaidizi wa kamera na programu-jalizi za wavuti umeboreshwa kwa kiasi kikubwa. Zana mpya zimependekezwa ili kurahisisha usanidi, kwa mfano, wijeti imeongezwa kwa uthibitishaji kwa kutumia Firebase. Injini ya Flame, iliyoundwa kwa ajili ya kutengeneza michezo ya P2 kwa kutumia Flutter, imesasishwa.

Chanzo: opennet.ru

Kuongeza maoni