Dart 2.2 Diumumkan: Kode Mesin yang Lebih Efisien, Dukungan untuk Set Literals

Sumber [Mengumumkan Dart 2.2: Kode asli lebih cepat, dukungan untuk literal yang ditetapkan]

Hari ini (26 Februari 2019) kami mengumumkan rilis Dart 2.2 SDK - pembaruan untuk Dart 2 yang menawarkan peningkatan kinerja kode (AOT) sebelumnya dan dukungan untuk Set literals.

gambar

Meningkatkan Kinerja Dart untuk Pengembangan Flutter


Kami melanjutkan pekerjaan kami untuk membuat kode yang dikompilasi AOT , seperti aplikasi Flutter, bahkan lebih cepat. Di Dart 2.1, kami mengurangi biaya pengecekan tipe dengan secara signifikan mengurangi biaya pengecekan tipe untuk kedua kode yang dikompilasi oleh AOT dan kode yang berjalan pada mesin virtual dengan kompilasi JIT (just-in-time).

Di Dart 2.2, kami fokus pada kinerja kode yang dikompilasi AOT, meningkatkan kinerja sebesar 11-16% pada microbenchmarks (dengan meningkatkan ukuran kode sebesar ~ 1%). Peningkatan ini merupakan hasil kerja selama beberapa kuartal untuk mengurangi biaya panggilan statis. Kode AOT kami yang dioptimalkan sekarang dapat memanggil objek yang diminta secara langsung menggunakan panggilan PC (mis. Menggunakan penghitung Program ). Sebelum itu, kami harus melakukan pencarian beberapa kali di kumpulan objek untuk menentukan alamat yang diperlukan. Optimalisasi ini sangat berguna ketika kode berisi banyak konstruktor dan panggilan metode statis, seperti kode antarmuka pengguna Flutter, yang berisi banyak widget.

Dukungan untuk Set Literals di Dart 2.2


Pustaka Dart utama (panah: inti) berisi beberapa kelas koleksi: Peta , Daftar , dan Set . Peta adalah set pasangan nilai kunci. Daftar disusun urutan nilai, yang masing-masing dapat diakses menggunakan indeks dan yang dapat terjadi beberapa kali. Set adalah kumpulan nilai yang tidak berurutan di mana setiap nilai hanya dapat terjadi sekali dan di mana ia dapat secara efektif diperiksa untuk melihat apakah ada nilai dalam koleksi.

Koleksi Dart biasanya diinisialisasi dengan konstanta waktu kompilasi, dan Dart menawarkan sintaks yang mudah untuk menulis inisialisasi ini. Di Daftar Dart, Anda dapat menginisialisasi sebagai berikut:

const List<String> releases = ['Dart 2.0', 'Dart 2.1', 'Dart 2.2']; 

Sebelumnya, Dart hanya mendukung sintaksis literal untuk Daftar dan Peta, jadi inisialisasi Set tidak praktis, karena kami harus menginisialisasi melalui daftar:

 Set<String> currencies = Set.of(['EUR', 'USD', 'JPY']); 

Kode ini tidak hanya merepotkan dan tidak efisien; kurangnya dukungan literal mencegah pembuatan Set yang tidak dapat diubah pada waktu kompilasi. Dengan tambahan Set literal support in Dart 2.2, inisialisasi set dan buat itu tetap menggunakan sintaks baru yang nyaman:

 const Set<String> currencies = {'EUR', 'USD', 'JPY'}; 

Contoh nyata menggunakan Set literals dengan perintah Flutter dapat ditemukan di sini . Untuk wawasan yang lebih mendalam tentang masalah ini, kami sarankan Anda membiasakan diri dengan tur bahasa Dart 2.2 yang diperbarui .

Berinovasi dengan Dart 2 Common Front-End (CFE)


Dart menawarkan beberapa implementasi sendiri: Dart VM yang digunakan oleh Flutter, kompiler dart2js, dan kompiler Dart dev (dartdevc), yang semuanya menggunakan kompilator Common Front-End. Dart Common Front End, atau CFE, mem-parsing kode Dart, melakukan inferensi tipe, dan menerjemahkan Dart ke dalam bahasa tingkat menengah yang lebih rendah, yang diterima oleh kompiler ujung belakang sebagai input.

Tetapkan literal adalah contoh konstruksi bahasa yang kami dapat dengan cepat menerapkan berkat CFE. Kode untuk parsing Mengatur literal dan melakukan inferensi tipe diimplementasikan sekali menggunakan CFE untuk semua implementasi. Selain itu, kami menciptakan implementasi transisi yang dapat digunakan oleh kompiler back end pada tahap awal. Dalam implementasi menengah, versi yang dapat diubah dari Kumpulan literal yang ditentukan diterjemahkan selama kompilasi ke dalam bentuk yang setara:

 Set<String> currencies = Set<String>()..add('EUR')..add('USD')..add('JPY'); 

Implementasi menengah dari Set Set literal berbeda karena mereka tidak dapat dirakit secara bertahap di bagian-bagian. Alih-alih, kami menerapkan ini dalam hal kelas Set privat permanen yang membungkus Peta abadi, di mana elemen Set adalah kunci Peta:

 const Set<String> currencies = _UnmodifiableSet<String>({'EUR': null, 'USD': null, 'JPY': null}); 

Kelas Set yang tidak dapat diubah mengimplementasikan metode dalam antarmuka Set, mendelegasikannya ke Peta internal.

Secara umum, kami dapat mengimplementasikan Set literals pada awalnya sebagai fungsi eksklusif CFE. Bagian belakang bisa langsung menggunakan implementasi CFE, dan mengimplementasikan dukungannya sendiri nanti. Ini memungkinkan kompiler ujung belakang untuk menunda dukungan mereka sampai aspek kinerja dari fungsi ini dipahami dengan lebih baik.

Spesifikasi Dart 2.2


Dart 2 adalah pembaruan yang signifikan untuk Dart sehingga kami perlu beberapa saat untuk memperbarui spesifikasi bahasa resmi untuk memenuhi semua perubahan yang kami buat. Kami akhirnya menyelesaikan pekerjaan ini, dan spesifikasinya diperbarui ke versi Dart 2.2. Kami juga telah memindahkan spesifikasi bahasa ke repositori baru dan menambahkan integrasi berkelanjutan untuk memastikan bahwa spesifikasi terus diperbarui dalam format PDF ketika versi bahasa Dart yang akan datang berevolusi. Spesifikasi 2.2 dan Dart 2.x yang akan datang tersedia di halaman spesifikasi Dart .

Cara menginstal Dart 2.2


Dart SDK 2.2 tersedia di beranda Dart mulai hari ini. Jika Anda adalah pengembang Flutter, Dart 2.2 sudah disertakan. (Catatan: pada perintah konsol dokter bergetar, saluran Flutter master dan dev saat ini akan melaporkan Dart 2.2. Versi stabil Flutter 1.2 hari ini akan menghasilkan Dart 2.1.2; versi ini memiliki kemampuan yang sama dengan Dart 2.2).

Itu saja untuk saat ini. Kami harap Anda menikmati Dart 2.2!



Terima kasih banyak atas bantuan Anda dalam menerjemahkan PsyHaSTe

Source: https://habr.com/ru/post/id442014/


All Articles