Bahasa pengaturcaraan Dart 2.15 dan rangka kerja Flutter 2.8 tersedia

Google telah menerbitkan keluaran bahasa pengaturcaraan Dart 2.15, yang meneruskan pembangunan cawangan Dart 2 yang direka bentuk semula secara radikal, yang berbeza daripada versi asal bahasa Dart dengan menggunakan penaipan statik yang kuat (jenis boleh disimpulkan secara automatik, jadi menentukan jenis tidak perlu, tetapi penaipan dinamik tidak lagi digunakan dan pada mulanya dikira jenis diberikan kepada pembolehubah dan pemeriksaan jenis yang ketat kemudiannya digunakan).

Ciri-ciri bahasa Dart:

  • Sintaks yang biasa dan mudah dipelajari, semula jadi untuk pengaturcara JavaScript, C dan Java.
  • Memastikan pelancaran pantas dan prestasi tinggi untuk semua pelayar web moden dan pelbagai jenis persekitaran, daripada peranti mudah alih kepada pelayan berkuasa.
  • Keupayaan untuk menentukan kelas dan antara muka yang membenarkan enkapsulasi dan penggunaan semula kaedah dan data sedia ada.
  • Menentukan jenis menjadikannya lebih mudah untuk nyahpepijat dan mengenal pasti ralat, menjadikan kod lebih jelas dan lebih mudah dibaca serta memudahkan pengubahsuaian dan analisisnya oleh pembangun pihak ketiga.
  • Jenis yang disokong termasuk: pelbagai jenis cincang, tatasusunan dan senarai, baris gilir, jenis angka dan rentetan, jenis untuk menentukan tarikh dan masa, ungkapan biasa (RegExp). Ia adalah mungkin untuk mencipta jenis anda sendiri.
  • Untuk mengatur pelaksanaan selari, adalah dicadangkan untuk menggunakan kelas dengan atribut terpencil, yang kodnya dilaksanakan sepenuhnya dalam ruang terpencil di kawasan memori yang berasingan, berinteraksi dengan proses utama dengan menghantar mesej.
  • Sokongan untuk penggunaan perpustakaan yang memudahkan sokongan dan penyahpepijatan projek web yang besar. Pelaksanaan fungsi pihak ketiga boleh disertakan dalam bentuk perpustakaan kongsi. Aplikasi boleh dibahagikan kepada bahagian dan mempercayakan pembangunan setiap bahagian kepada pasukan pengaturcara yang berasingan.
  • Satu set alatan siap sedia untuk menyokong pembangunan dalam bahasa Dart, termasuk pelaksanaan pembangunan dinamik dan alatan penyahpepijatan dengan pembetulan kod dengan segera ("edit-dan-teruskan").
  • Untuk memudahkan pembangunan dalam bahasa Dart, ia disertakan dengan SDK, pub pengurus pakej, penganalisis kod statik dart_analyzer, satu set perpustakaan, persekitaran pembangunan bersepadu DartPad dan pemalam berdaya Dart untuk IntelliJ IDEA, WebStorm, Emacs, Teks Sublime 2 dan Vim.
  • Pakej tambahan dengan perpustakaan dan utiliti diedarkan melalui repositori pub, yang mempunyai kira-kira 22 ribu pakej.

Perubahan utama dalam keluaran Dart 2.15:

  • Menyediakan alatan untuk melaksanakan tugas selari pantas dengan pengasingan pengendali. Pada sistem berbilang teras, masa jalan Dart secara lalai menjalankan kod aplikasi pada satu teras CPU dan menggunakan teras lain untuk melaksanakan tugas sistem seperti I/O tak segerak, menulis ke fail atau membuat panggilan rangkaian. Untuk aplikasi yang perlu melaksanakan pengendali mereka secara selari, sebagai contoh, untuk membuat animasi dalam antara muka, adalah mungkin untuk melancarkan blok kod yang berasingan (mengasingkan), diasingkan antara satu sama lain dan dilaksanakan pada teras CPU lain secara serentak dengan utas aplikasi utama . Untuk melindungi daripada ralat yang timbul apabila pelaksanaan serentak kod berfungsi dengan set data yang sama, perkongsian objek boleh ubah dalam blok terpencil berbeza adalah dilarang dan model penghantaran mesej digunakan untuk interaksi antara pengendali.

    Dart 2.15 memperkenalkan konsep baharu - kumpulan blok terpencil (kumpulan asingkan), yang membolehkan anda mengatur akses dikongsi kepada pelbagai struktur data dalaman dalam blok terpencil yang merupakan sebahagian daripada kumpulan yang sama, yang boleh mengurangkan overhed dengan ketara apabila berinteraksi antara pengendali dalam kumpulan . Sebagai contoh, melancarkan blok pengasingan tambahan dalam kumpulan sedia ada adalah 100 kali lebih pantas dan memerlukan 10-100 kali kurang memori daripada melancarkan blok pengasingan yang berasingan, disebabkan oleh penghapusan keperluan untuk memulakan struktur data program.

    Walaupun fakta bahawa blok mengasingkan dalam kumpulan masih melarang akses dikongsi kepada objek boleh ubah, kumpulan tersebut menggunakan memori timbunan dikongsi, yang boleh mempercepatkan pemindahan objek dari satu blok ke blok lain dengan ketara tanpa perlu melakukan operasi penyalinan intensif sumber. Versi baharu juga membolehkan anda menghantar hasil pengendali apabila memanggil Isolate.exit() untuk memindahkan data ke blok pengasing induk tanpa operasi penyalinan. Selain itu, mekanisme penghantaran mesej telah dioptimumkan - mesej kecil dan sederhana kini diproses kira-kira 8 kali lebih pantas. Objek yang boleh dihantar antara pencilan menggunakan panggilan SendPort.send() termasuk beberapa jenis fungsi, penutupan dan surih tindanan.

  • Dalam alat untuk mencipta penunjuk kepada fungsi individu dalam objek lain (koyak), sekatan untuk mencipta penunjuk serupa dalam kod pembina telah dialih keluar, yang boleh berguna apabila membina antara muka berdasarkan perpustakaan Flutter. Contohnya, untuk mencipta widget Lajur yang merangkumi berbilang widget Teks, anda boleh memanggil ".map()" dan menghantar penunjuk kepada Text.new pembina objek Teks: kelas FruitWidget memanjangkan StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Kemungkinan yang berkaitan dengan penggunaan penunjuk fungsi telah diperluaskan. Menambah keupayaan untuk menggunakan kaedah generik dan penunjuk fungsi untuk mencipta kaedah dan penunjuk bukan generik: T id (nilai T) => nilai; var intId = id ; // dibenarkan dalam versi 2.15 dan bukannya "int Function(int) intId = id;" const fo = id; // penunjuk ke id fungsi. const c1 = fo ;
  • Pustaka dart:teras telah meningkatkan sokongan untuk enum, contohnya, anda kini boleh mengeluarkan nilai rentetan daripada setiap nilai enum menggunakan kaedah ".name", pilih nilai mengikut nama atau padankan pasangan nilai: enum MyEnum { one , dua, tiga } void main() { print(MyEnum.one.name); // "satu" akan dicetak. print(MyEnum.values.byName('two') == MyEnum.two); // "true" akan dicetak. peta akhir = MyEnum.values.asNameMap(); print(peta['tiga'] == MyEnum.tiga); // "benar". }
  • Teknik mampatan penunjuk telah dilaksanakan yang membolehkan penggunaan perwakilan penunjuk yang lebih padat dalam persekitaran 64-bit jika ruang alamat 32-bit mencukupi untuk menangani (tidak lebih daripada 4 GB memori digunakan). Ujian telah menunjukkan bahawa pengoptimuman sedemikian memungkinkan untuk mengurangkan saiz timbunan sebanyak kira-kira 10%. Dalam Flutter SDK, mod baharu telah didayakan untuk Android secara lalai dan dirancang untuk didayakan untuk iOS dalam keluaran akan datang.
  • SDK Dart termasuk alat untuk penyahpepijatan dan analisis prestasi (DevTools), yang sebelum ini dibekalkan dalam pakej yang berasingan.
  • Alat telah ditambahkan pada perintah "dart pub" dan repositori pakej pub.dev untuk menjejaki penerbitan maklumat sulit secara tidak sengaja, contohnya, meninggalkan bukti kelayakan untuk sistem penyepaduan berterusan dan persekitaran awan di dalam pakej. Jika kebocoran tersebut dikesan, pelaksanaan perintah "dart pub publish" akan terganggu dengan mesej ralat. Jika terdapat positif palsu, adalah mungkin untuk memintas cek melalui senarai putih.
  • Keupayaan untuk membatalkan versi pakej yang telah diterbitkan telah ditambahkan pada repositori pub.dev, contohnya, jika ralat atau kelemahan berbahaya ditemui. Sebelum ini, untuk pembetulan sedemikian, amalannya adalah untuk menerbitkan versi pembetulan, tetapi dalam beberapa situasi adalah perlu untuk membatalkan keluaran sedia ada dan segera menghentikan pengedaran selanjutnya (contohnya, jika pembetulan belum sedia atau jika keluaran penuh telah diterbitkan secara tidak sengaja dan bukannya versi ujian). Selepas pembatalan, pakej tidak lagi dikenal pasti dalam arahan "pub get" dan "pub upgrade", dan pada sistem yang telah memasangnya, amaran khas dikeluarkan pada kali berikutnya "pub get" dilaksanakan.
  • Perlindungan tambahan terhadap kerentanan (CVE-2021-22567) yang disebabkan oleh penggunaan aksara unikod dalam kod yang mengubah susunan paparan.
  • Memperbaiki kerentanan (CVE-2021-22568) yang membolehkan anda menyamar sebagai pengguna pub.dev lain apabila menerbitkan pakej ke pelayan pihak ketiga yang menerima token akses pub.dev oauth2. Sebagai contoh, kelemahan boleh digunakan untuk menyerang pelayan pakej dalaman dan korporat. Pembangun yang hanya mengehoskan pakej pada pub.dev tidak terjejas oleh isu ini.

Pada masa yang sama, keluaran penting rangka kerja antara muka pengguna Flutter 2.8 telah dibentangkan, yang dianggap sebagai alternatif kepada React Native dan membenarkan, berdasarkan asas kod tunggal, untuk mengeluarkan aplikasi untuk iOS, Android, Windows, macOS dan Platform Linux, serta mencipta aplikasi untuk dijalankan dalam penyemak imbas. Cangkerang tersuai untuk sistem pengendalian mikrokernel Fuchsia yang dibangunkan oleh Google dibina berdasarkan Flutter. Adalah diperhatikan bahawa dalam tempoh enam bulan yang lalu, bilangan aplikasi Flutter 2 di Gedung Google Play telah meningkat daripada 200 ribu kepada 375 ribu, i.e. hampir dua kali.

Bahagian utama kod Flutter dilaksanakan dalam bahasa Dart, dan enjin masa jalan untuk melaksanakan aplikasi ditulis dalam C++. Apabila membangunkan aplikasi, sebagai tambahan kepada bahasa Dart asli Flutter, anda boleh menggunakan antara muka Dart Foreign Function untuk memanggil kod C/C++. Prestasi pelaksanaan yang tinggi dicapai dengan menyusun aplikasi kepada kod asli untuk platform sasaran. Dalam kes ini, program tidak perlu dikompilasi semula selepas setiap perubahan - Dart menyediakan mod tambah nilai panas yang membolehkan anda membuat perubahan pada aplikasi yang sedang berjalan dan segera menilai hasilnya.

Antara perubahan dalam keluaran baharu Flutter, pengoptimuman kelajuan pelancaran dan penggunaan memori pada peranti mudah alih diperhatikan. Lebih mudah untuk menyambungkan apl ke perkhidmatan bahagian belakang seperti Firebase dan Google Cloud. Alat untuk penyepaduan dengan Google Ads telah distabilkan. Sokongan untuk kamera dan pemalam web telah dipertingkatkan dengan ketara. Alat baharu telah dicadangkan untuk memudahkan pembangunan, contohnya, widget telah ditambahkan untuk pengesahan menggunakan Firebase. Enjin Flame, direka untuk membangunkan permainan 2D menggunakan Flutter, telah dikemas kini.

Sumber: opennet.ru

Tambah komen