المصدر [الإعلان عن دارت 2.2: كود أصلي أسرع ، ودعم مجموعة حرفية]نعلن اليوم (26 فبراير 2019) عن إصدار Dart 2.2 SDK - وهو تحديث لـ Dart 2 يوفر أداءً محسّنًا لرمز
(AOT) ودعمًا لضبط القيم الحرفية.

تحسين أداء دارت لتطوير الرفرفة
نواصل عملنا لجعل
التعليمات البرمجية المترجمة من AOT ، مثل تطبيقات Flutter ، أسرع. في Dart 2.1 ،
قمنا بتخفيض تكلفة فحص الكتابة عن طريق تقليل تكلفة فحص النوع بشكل كبير لكل من الشفرة التي تم تجميعها بواسطة AOT والرمز الذي يعمل على جهاز ظاهري مع تجميع JIT (في الوقت المناسب).
في Dart 2.2 ، ركزنا على أداء التعليمات البرمجية المترجمة
من AOT ، وتحسين الأداء
بنسبة 11-16 ٪ على العلامات الصغيرة (عن طريق زيادة حجم الكود بنسبة ~ 1 ٪). هذا التحسن هو نتيجة للعمل على مدى عدة أرباع ، من أجل تقليل تكاليف المكالمات الثابتة. يمكن الآن لشفرة AOT المحسّنة الخاصة بنا الاتصال بالكائن المطلوب مباشرةً باستخدام مكالمة كمبيوتر شخصي (أي باستخدام
عداد البرنامج ). قبل ذلك ، كان علينا إجراء بحث عدة مرات في مجموعة الكائنات لتحديد العنوان المطلوب. تكون عمليات التحسين هذه مفيدة بشكل خاص عندما تحتوي الشفرة على العديد من المنشئات ومكالمات الطريقة الثابتة ، مثل شفرة واجهة مستخدم Flutter ، والتي تحتوي على العديد من عناصر واجهة التعامل.
دعم مجموعة القيم الحرفية في السهام 2.2
تحتوي مكتبة Dart الرئيسية (dart: core) على العديد من فئات المجموعات:
الخرائط والقوائم والمجموعات. الخرائط هي مجموعات من أزواج القيمة الرئيسية. يتم ترتيب قوائم تسلسل من القيم ، كل منها يمكن الوصول إليها باستخدام الفهرس والتي يمكن أن تحدث عدة مرات. المجموعات هي مجموعات غير مرتبة من القيم يمكن أن تحدث فيها كل قيمة مرة واحدة فقط وحيث يمكن التحقق منها بفعالية لمعرفة ما إذا كانت هناك قيمة في المجموعة.
عادةً ما تتم تهيئة مجموعات Dart باستخدام ثوابت وقت الترجمة ، وتقدم Dart بناء جملة مناسب لكتابة هذا التهيئة. في قائمة Dart ، يمكنك التهيئة على النحو التالي:
const List<String> releases = ['Dart 2.0', 'Dart 2.1', 'Dart 2.2'];
في السابق ، كانت دارت تدعم فقط بناء الجملة الحرفية للقائمة والخريطة ، لذلك كان إعداد التهيئة مرهقًا ، حيث كان علينا التهيئة من خلال القائمة:
Set<String> currencies = Set.of(['EUR', 'USD', 'JPY']);
هذا الكود ليس فقط غير مريح وغير فعال ؛ نقص الدعم الحرفي يمنع إنشاء مجموعة ثابتة في وقت الترجمة. مع إضافة مجموعة الدعم الحرفي في Dart 2.2 ، قم بتهيئة المجموعة وجعلها غير قابلة للتغيير باستخدام بناء جملة جديد مناسب:
const Set<String> currencies = {'EUR', 'USD', 'JPY'};
يمكن العثور
هنا على أمثلة حقيقية لاستخدام مجموعة القيم الحرفية باستخدام أمر Flutter. لإلقاء نظرة أعمق على المشكلة ، نقترح أن تتعرف على
جولة Dart 2.2 المحدثة للغات .
الابتكار مع الواجهة الأمامية المشتركة Dart 2 (CFE)
تقدم Dart عدة تطبيقات خاصة بها: Dart VM المستخدمة من قبل Flutter ومترجم dart2js ومترجم Dart dev (dartdevc) ، وكلها تستخدم المترجم Common Front-End. تقوم Dart Common Front End ، أو CFE ، بتوزيع رمز Dart ، وتنفيذ استنتاج الكتابة ، وترجمة Dart إلى لغة متوسطة المستوى ، والتي يقبلها مترجمو النهاية الخلفية كمدخلات.
تعد مجموعة القيم الحرفية مثالاً على بناء اللغة التي تمكنا من تنفيذها بسرعة بفضل CFE. تم تنفيذ الكود الخاص بتحليل تعيين القيم الحرفية واستدلال نوع الأداء بمجرد استخدام CFE لجميع التطبيقات. بالإضافة إلى ذلك ، أنشأنا تطبيقًا انتقاليًا يمكن استخدامه بواسطة المجمعين النهائيين في المرحلة الأولية. في تطبيق وسيط ، تمت ترجمة نسخة قابلة للتغيير لمجموعة الحروف المحددة أثناء التحويل البرمجي إلى النموذج المكافئ:
Set<String> currencies = Set<String>()..add('EUR')..add('USD')..add('JPY');
يختلف التنفيذ الوسيط لمجموعة القيم الحرفية الثابتة في أنه لا يمكن تجميعها تدريجياً في أجزاء. بدلاً من ذلك ، قمنا بتطبيق هذا من حيث فئة Set خاصة غير قابلة للتغيير تلتف خريطة غير قابلة للتغيير ، حيث تكون عناصر Set هي مفاتيح Map:
const Set<String> currencies = _UnmodifiableSet<String>({'EUR': null, 'USD': null, 'JPY': null});
تطبق فئة Set غير القابلة للتغيير الأساليب في واجهة Set ، وتفويضها إلى الخريطة الداخلية.
بشكل عام ، تمكنا من تطبيق Set الحرفية في البداية كدالة حصرية لـ CFE. يمكن للجهة الخلفية استخدام تطبيق CFE على الفور ، وتنفيذ الدعم الخاص بها لاحقًا. سمح ذلك للمترجمين النهائيين بتأجيل دعمهم حتى يتم فهم جوانب الأداء لهذه الوظيفة بشكل أفضل.
دارت 2.2 المواصفات
كانت Dart 2 تحديثًا مهمًا لـ Dart ، حيث استغرقنا بعض الوقت لتحديث
مواصفات اللغة الرسمية لمواجهة جميع التغييرات التي أجريناها. لقد انتهينا أخيرًا من هذا العمل ، وتم تحديث المواصفات إلى الإصدار Dart 2.2. لقد نقلنا أيضًا مواصفات اللغة إلى
المستودع الجديد وأضفنا تكاملًا مستمرًا لضمان تحديث المواصفات باستمرار بتنسيق PDF مع تطور الإصدارات المستقبلية من لغة Dart. تتوفر كل من مواصفات Dart 2.x 2.2 والمستقبلية
في صفحة مواصفات Dart .
كيفية تثبيت دارت 2.2
تتوفر Dart SDK 2.2 على الصفحة الرئيسية Dart اعتبارًا من اليوم. إذا كنت مطور Flutter ، فإن Dart 2.2 مدرج بالفعل. (ملاحظة: في أمر وحدة التحكم في flutter doctor) ، ستقوم قناة Flutter الرئيسية وقناة dev الحالية بالإبلاغ عن Dart 2.2 ، وسيؤدي
الإصدار الثابت اليوم من Flutter 1.2 إلى إخراج Dart 2.1.2 ؛ هذا الإصدار له نفس إمكانيات Dart 2.2).
هذا كل شيء الآن. نأمل أن تستمتع دارت 2.2!
شكرا جزيلا لمساعدتكم في ترجمة
PsyHaSTe