Bahasa pemrograman Dart 2.15 dan kerangka kerja Flutter 2.8 tersedia

Google telah menerbitkan rilis bahasa pemrograman Dart 2.15, yang melanjutkan pengembangan cabang Dart 2 yang didesain ulang secara radikal, yang berbeda dari versi asli bahasa Dart dengan penggunaan pengetikan statis yang kuat (tipe dapat disimpulkan secara otomatis, jadi menentukan tipe tidak diperlukan, tetapi pengetikan dinamis tidak lagi digunakan dan pada awalnya dihitung tipe tersebut ditetapkan ke variabel dan pemeriksaan tipe yang ketat kemudian diterapkan).

Fitur bahasa Dart:

  • Sintaks yang familier dan mudah dipelajari, alami untuk pemrogram JavaScript, C, dan Java.
  • Memastikan peluncuran cepat dan kinerja tinggi untuk semua browser web modern dan berbagai jenis lingkungan, mulai dari perangkat portabel hingga server canggih.
  • Kemampuan untuk mendefinisikan kelas dan antarmuka yang memungkinkan enkapsulasi dan penggunaan kembali metode dan data yang ada.
  • Menentukan jenis memudahkan proses debug dan mengidentifikasi kesalahan, membuat kode lebih jelas dan mudah dibaca, serta menyederhanakan modifikasi dan analisisnya oleh pengembang pihak ketiga.
  • Tipe yang didukung meliputi: berbagai tipe hash, array dan daftar, antrian, tipe numerik dan string, tipe untuk menentukan tanggal dan waktu, ekspresi reguler (RegExp). Dimungkinkan untuk membuat tipe Anda sendiri.
  • Untuk mengatur eksekusi paralel, diusulkan untuk menggunakan kelas dengan atribut isolasi, kode yang dieksekusi seluruhnya dalam ruang terisolasi di area memori terpisah, berinteraksi dengan proses utama dengan mengirimkan pesan.
  • Dukungan untuk penggunaan perpustakaan yang menyederhanakan dukungan dan debugging proyek web besar. Implementasi fungsi pihak ketiga dapat dimasukkan dalam bentuk perpustakaan bersama. Aplikasi dapat dibagi menjadi beberapa bagian dan mempercayakan pengembangan setiap bagian kepada tim pemrogram yang terpisah.
  • Seperangkat alat siap pakai untuk mendukung pengembangan dalam bahasa Dart, termasuk implementasi alat pengembangan dan debugging dinamis dengan koreksi kode dengan cepat (“edit-dan-lanjutkan”).
  • Untuk menyederhanakan pengembangan dalam bahasa Dart, ia dilengkapi dengan SDK, pub manajer paket, penganalisis kode statis dart_analyzer, satu set perpustakaan, lingkungan pengembangan terintegrasi DartPad dan plugin yang mendukung Dart untuk IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 dan Vim.
  • Paket tambahan dengan perpustakaan dan utilitas didistribusikan melalui repositori pub, yang memiliki sekitar 22 ribu paket.

Perubahan besar dalam rilis Dart 2.15:

  • Menyediakan alat untuk eksekusi tugas paralel yang cepat dengan isolasi penangan. Pada sistem multi-inti, runtime Dart secara default menjalankan kode aplikasi pada satu inti CPU dan menggunakan inti lain untuk melakukan tugas sistem seperti I/O asinkron, menulis ke file, atau melakukan panggilan jaringan. Untuk aplikasi yang perlu menjalankan penangannya secara paralel, misalnya, untuk merender animasi di antarmuka, dimungkinkan untuk meluncurkan blok kode terpisah (isolasi), diisolasi satu sama lain dan dieksekusi pada inti CPU lain secara bersamaan dengan thread aplikasi utama. . Untuk melindungi dari kesalahan yang terjadi ketika kode dijalankan secara bersamaan dengan kumpulan data yang sama, dilarang berbagi objek yang dapat diubah di blok isolasi yang berbeda, dan model penyampaian pesan digunakan untuk interaksi antar penangan.

    Dart 2.15 memperkenalkan konsep baru - grup blok terisolasi (isolate groups), yang memungkinkan Anda mengatur akses bersama ke berbagai struktur data internal dalam blok isolasi yang merupakan bagian dari grup yang sama, yang secara signifikan dapat mengurangi overhead saat berinteraksi antar penangan dalam grup . Misalnya, meluncurkan blok isolasi tambahan dalam grup yang sudah ada 100 kali lebih cepat dan memerlukan memori 10-100 kali lebih sedikit daripada meluncurkan blok isolasi terpisah, karena menghilangkan kebutuhan untuk menginisialisasi struktur data program.

    Meskipun blok isolasi dalam suatu grup masih melarang akses bersama ke objek yang dapat diubah, grup tersebut menggunakan memori heap bersama, yang secara signifikan dapat mempercepat transfer objek dari satu blok ke blok lainnya tanpa perlu melakukan operasi penyalinan yang intensif sumber daya. Versi baru ini juga memungkinkan Anda meneruskan hasil handler saat memanggil Isolate.exit() untuk mentransfer data ke blok isolasi induk tanpa operasi penyalinan. Selain itu, mekanisme transmisi pesan telah dioptimalkan - pesan kecil dan menengah kini diproses sekitar 8 kali lebih cepat. Objek yang bisa diteruskan antarisolasi menggunakan panggilan SendPort.send() mencakup beberapa jenis fungsi, penutupan, dan pelacakan tumpukan.

  • Pada alat untuk membuat pointer ke fungsi individual di objek lain (tear-off), pembatasan pembuatan pointer serupa dalam kode konstruktor telah dihapus, yang dapat berguna saat membuat antarmuka berdasarkan pustaka Flutter. Misalnya, untuk membuat widget Kolom yang mencakup beberapa widget Teks, Anda dapat memanggil ".map()" dan meneruskan pointer ke konstruktor Text.new objek Teks: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext konteks) { return Column( anak-anak: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Kemungkinan yang terkait dengan penggunaan penunjuk fungsi telah diperluas. Menambahkan kemampuan untuk menggunakan metode generik dan penunjuk fungsi untuk membuat metode dan penunjuk non-generik: T id (nilai T) => nilai; var intId = id ; // diperbolehkan di versi 2.15, bukan "int Function(int) intId = id;" const fo = id; // penunjuk ke id fungsi. konstanta c1 = fo ;
  • Pustaka dart:core telah meningkatkan dukungan untuk enum, misalnya, Anda sekarang dapat mengeluarkan nilai string dari setiap nilai enum menggunakan metode ".name", memilih nilai berdasarkan nama, atau mencocokkan pasangan nilai: enum MyEnum { one , dua, tiga } void main() { print(MyEnum.one.name); // "satu" akan dicetak. print(MyEnum.values.byName('two') == MyEnum.two); // "benar" akan dicetak. peta akhir = MyEnum.values.asNameMap(); print(peta['tiga'] == MyEnum.tiga); // "BENAR". }
  • Teknik kompresi pointer telah diterapkan yang memungkinkan penggunaan representasi pointer yang lebih ringkas di lingkungan 64-bit jika ruang alamat 32-bit cukup untuk pengalamatan (tidak lebih dari 4 GB memori yang digunakan). Pengujian telah menunjukkan bahwa pengoptimalan tersebut memungkinkan pengurangan ukuran heap sekitar 10%. Di Flutter SDK, mode baru sudah diaktifkan untuk Android secara default, dan rencananya akan diaktifkan untuk iOS pada rilis mendatang.
  • Dart SDK menyertakan alat untuk debugging dan analisis kinerja (DevTools), yang sebelumnya disertakan dalam paket terpisah.
  • Alat telah ditambahkan ke perintah “dart pub” dan repositori paket pub.dev untuk melacak publikasi informasi rahasia yang tidak disengaja, misalnya, meninggalkan kredensial untuk sistem integrasi berkelanjutan dan lingkungan cloud di dalam paket. Jika kebocoran tersebut terdeteksi, eksekusi perintah “dart pubpublish” akan terganggu dengan pesan kesalahan. Jika ada positif palsu, dimungkinkan untuk melewati pemeriksaan melalui daftar putih.
  • Kemampuan untuk mencabut versi paket yang sudah diterbitkan telah ditambahkan ke repositori pub.dev, misalnya, jika ditemukan kesalahan atau kerentanan berbahaya. Sebelumnya, untuk koreksi seperti itu, praktiknya adalah menerbitkan versi korektif, namun dalam beberapa situasi, rilis yang ada perlu dibatalkan dan segera menghentikan distribusi lebih lanjut (misalnya, jika koreksi belum siap atau jika rilis penuh telah dirilis). diterbitkan karena kesalahan, bukan versi uji). Setelah pencabutan, paket tersebut tidak lagi teridentifikasi dalam perintah “pub get” dan “pub upgrade”, dan pada sistem yang telah menginstalnya, peringatan khusus akan dikeluarkan saat “pub get” dijalankan lagi.
  • Menambahkan perlindungan terhadap kerentanan (CVE-2021-22567) yang disebabkan oleh penggunaan karakter unicode dalam kode yang mengubah urutan tampilan.
  • Memperbaiki kerentanan (CVE-2021-22568) yang memungkinkan Anda meniru identitas pengguna pub.dev lain saat menerbitkan paket ke server pihak ketiga yang menerima token akses pub.dev oauth2. Misalnya, kerentanan dapat digunakan untuk menyerang server paket internal dan perusahaan. Pengembang yang hanya menghosting paket di pub.dev tidak terpengaruh oleh masalah ini.

Pada saat yang sama, rilis signifikan dari kerangka antarmuka pengguna Flutter 2.8 disajikan, yang dianggap sebagai alternatif dari React Native dan memungkinkan, berdasarkan basis kode tunggal, untuk merilis aplikasi untuk iOS, Android, Windows, macOS dan Platform Linux, serta membuat aplikasi untuk dijalankan di browser. Shell khusus untuk sistem operasi mikrokernel Fuchsia yang dikembangkan oleh Google dibuat berdasarkan Flutter. Tercatat, selama enam bulan terakhir, jumlah aplikasi Flutter 2 di Google Play Store meningkat dari 200 ribu menjadi 375 ribu, yakni XNUMX ribu aplikasi. hampir dua kali lipat.

Bagian utama kode Flutter diimplementasikan dalam bahasa Dart, dan mesin runtime untuk menjalankan aplikasi ditulis dalam C++. Saat mengembangkan aplikasi, selain bahasa Dart asli Flutter, Anda dapat menggunakan antarmuka Dart Foreign Function untuk memanggil kode C/C++. Performa eksekusi tinggi dicapai dengan mengkompilasi aplikasi ke kode asli untuk platform target. Dalam hal ini, program tidak perlu dikompilasi ulang setelah setiap perubahan - Dart menyediakan mode hot reload yang memungkinkan Anda membuat perubahan pada aplikasi yang sedang berjalan dan segera mengevaluasi hasilnya.

Di antara perubahan dalam rilis baru Flutter, terdapat optimalisasi kecepatan peluncuran dan konsumsi memori pada perangkat seluler. Lebih mudah menghubungkan aplikasi ke layanan backend seperti Firebase dan Google Cloud. Alat untuk integrasi dengan Google Ads telah distabilkan. Dukungan untuk kamera dan plugin web telah ditingkatkan secara signifikan. Alat baru telah diusulkan untuk menyederhanakan pengembangan, misalnya widget telah ditambahkan untuk autentikasi menggunakan Firebase. Mesin Flame, yang dirancang untuk mengembangkan game 2D menggunakan Flutter, telah diperbarui.

Sumber: opennet.ru

Tambah komentar