تتوفر لغة برمجة Dart 2.15 وإطار عمل Flutter 2.8

نشرت Google إصدارًا من لغة برمجة Dart 2.15 ، والتي تستمر في تطوير فرع Dart 2 المعاد تصميمه جذريًا ، والذي يختلف عن الإصدار الأصلي للغة Dart باستخدام كتابة ثابتة قوية (يمكن استنتاج الأنواع تلقائيًا ، لذا فإن تحديد الأنواع هو غير مطلوب ، ولكن الكتابة الديناميكية لم تعد مستخدمة وتم احتساب النوع في البداية إلى المتغير ثم تم تطبيق فحص صارم على النوع).

ميزات لغة Dart:

  • بناء جملة مألوف وسهل التعلم وهو أمر طبيعي لمبرمجي JavaScript و C و Java.
  • توفير بدء تشغيل سريع وأداء عالي لجميع متصفحات الويب الحديثة وأنواع البيئات المختلفة ، من الأجهزة المحمولة إلى الخوادم القوية.
  • القدرة على تحديد الفئات والواجهات لتمكين التغليف وإعادة استخدام الأساليب والبيانات الموجودة.
  • يؤدي تحديد الأنواع إلى تسهيل تصحيح الأخطاء واكتشافها ، ويجعل الكود أكثر وضوحًا وقابلية للقراءة ، ويسهل على مطوري الطرف الثالث تنقيحها وتحليلها.
  • من بين الأنواع المدعومة: أنواع مختلفة من التجزئة ، والمصفوفات والقوائم ، وقوائم الانتظار ، وأنواع الأرقام والسلسلة ، وأنواع التاريخ والوقت ، والتعبيرات العادية (RegExp). من الممكن إنشاء الأنواع الخاصة بك.
  • لتنظيم التنفيذ المتوازي ، يُقترح استخدام الفئات ذات السمة المعزولة ، والتي يتم تنفيذ كودها بالكامل في مساحة معزولة في منطقة ذاكرة منفصلة ، والتفاعل مع العملية الرئيسية عن طريق إرسال الرسائل.
  • دعم استخدام المكتبات التي تبسط دعم وتصحيح مشاريع الويب الكبيرة. يمكن تضمين تطبيقات الطرف الثالث للوظائف كمكتبات مشتركة. يمكن تقسيم التطبيقات إلى أجزاء ويمكن تخصيص تطوير كل جزء لفريق منفصل من المبرمجين.
  • مجموعة من الأدوات الجاهزة لدعم التطوير بلغة Dart ، بما في ذلك تنفيذ أدوات التطوير الديناميكي وتصحيح الأخطاء باستخدام تصحيح التعليمات البرمجية أثناء التنقل ("التحرير والمتابعة").
  • يتم توفير SDK ، ومدير حزمة الحانة ، ومحلل شفرة dart_analyzer الثابت ، ومجموعة من المكتبات ، و DartPad IDE ، والمكونات الإضافية التي تدعم Dart لـ IntelliJ IDEA ، و WebStorm ، و Emacs ، و Sublime Text 2 ، و Vim لتبسيط تطوير Dart.
  • يتم توزيع الحزم الإضافية مع المكتبات والمرافق من خلال مستودع الحانات الذي يضم حوالي 22 ألف حزمة.

التغييرات الرئيسية في إصدار Dart 2.15:

  • يوفر أدوات للتنفيذ المتوازي السريع للمهام مع عزل المعالجات. في الأنظمة متعددة النواة، يقوم وقت تشغيل Dart افتراضيًا بتشغيل تعليمات برمجية للتطبيق على أحد مراكز وحدة المعالجة المركزية (CPU) ويستخدم مراكز أخرى لتنفيذ مهام النظام مثل الإدخال/الإخراج غير المتزامن، أو الكتابة إلى الملفات، أو إجراء مكالمات الشبكة. بالنسبة للتطبيقات التي تحتاج إلى تنفيذ معالجاتها بالتوازي، على سبيل المثال، لعرض الرسوم المتحركة في الواجهة، فمن الممكن إطلاق كتل منفصلة من التعليمات البرمجية (معزولة)، معزولة عن بعضها البعض وتنفيذها على مراكز وحدة المعالجة المركزية الأخرى في وقت واحد مع مؤشر ترابط التطبيق الرئيسي . للحماية من الأخطاء التي تنشأ عند التنفيذ المتزامن للتعليمات البرمجية التي تعمل مع نفس مجموعة البيانات، يُحظر مشاركة الكائنات القابلة للتغيير في كتل معزولة مختلفة، ويتم استخدام نموذج تمرير الرسائل للتفاعل بين المعالجات.

    يقدم Dart 2.15 مفهومًا جديدًا - مجموعات الكتل المعزولة (المجموعات المعزولة)، والتي تسمح لك بتنظيم الوصول المشترك إلى هياكل البيانات الداخلية المختلفة في الكتل المعزولة التي تعد جزءًا من نفس المجموعة، والتي يمكن أن تقلل بشكل كبير من الحمل عند التفاعل بين المعالجات في المجموعة . على سبيل المثال، يعد إطلاق كتلة معزولة إضافية في مجموعة موجودة أسرع 100 مرة ويتطلب ذاكرة أقل بمقدار 10-100 مرة من إطلاق كتلة معزولة منفصلة، ​​وذلك بسبب إلغاء الحاجة إلى تهيئة هياكل بيانات البرنامج.

    على الرغم من حقيقة أن الكتل المعزولة في المجموعة لا تزال تحظر الوصول المشترك إلى الكائنات القابلة للتغيير، فإن المجموعات تستخدم ذاكرة كومة مشتركة، والتي يمكنها تسريع نقل الكائنات بشكل كبير من كتلة إلى أخرى دون الحاجة إلى إجراء عمليات نسخ كثيفة الاستخدام للموارد. يسمح لك الإصدار الجديد أيضًا بتمرير نتيجة المعالج عند استدعاء Isolate.exit() لنقل البيانات إلى الكتلة المعزولة الأصلية دون نسخ العمليات. بالإضافة إلى ذلك، تم تحسين آلية إرسال الرسائل - حيث تتم الآن معالجة الرسائل الصغيرة والمتوسطة بشكل أسرع بنحو 8 مرات. تتضمن الكائنات التي يمكن تمريرها بين العزلات باستخدام استدعاء SendPort.send() بعض أنواع الوظائف وعمليات الإغلاق وتتبعات المكدس.

  • في أدوات إنشاء مؤشرات للوظائف الفردية في كائنات أخرى (التقطيع)، تمت إزالة القيود المفروضة على إنشاء مؤشرات مماثلة في التعليمات البرمجية المُنشئة، والتي يمكن أن تكون مفيدة عند إنشاء واجهات بناءً على مكتبة Flutter. على سبيل المثال، لإنشاء عنصر واجهة مستخدم عمود يشتمل على عناصر واجهة مستخدم نصية متعددة، يمكنك استدعاء ".map()" وتمرير المؤشرات إلى مُنشئ Text.new لكائن النص: class FruitWidget Extends StatelessWidget { @override Widget build(BuildContext context) { عمود الإرجاع (الأطفال: ['Apple'، 'Orange').map(Text.new).toList()); } }
  • تم توسيع الإمكانيات المرتبطة باستخدام المؤشرات الوظيفية. تمت إضافة القدرة على استخدام الأساليب العامة ومؤشرات الوظائف لإنشاء أسلوب ومؤشر غير عام: T id (قيمة T) => القيمة؛ فار intId = id ; // مسموح به في الإصدار 2.15 بدلاً من "int Function(int) intId = id;" const fo = id; // المؤشر إلى معرف الوظيفة. ثابت c1 = fo ;
  • قامت مكتبة Dart:core بتحسين دعم التعدادات، على سبيل المثال، يمكنك الآن إخراج قيمة سلسلة من كل قيمة تعداد باستخدام طريقة ".name"، أو تحديد القيم حسب الاسم، أو مطابقة أزواج من القيم: enum MyEnum { one ، اثنان، ثلاثة } void main() { print(MyEnum.one.name); // ستتم طباعة "واحد". print(MyEnum.values.byName('two') == MyEnum.two); // ستتم طباعة "صحيح". الخريطة النهائية = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "حقيقي". }
  • تم تطبيق تقنية ضغط المؤشر التي تسمح باستخدام تمثيل أكثر إحكاما للمؤشرات في بيئات 64 بت إذا كانت مساحة عنوان 32 بت كافية للعنونة (لا يتم استخدام أكثر من 4 جيجابايت من الذاكرة). أظهرت الاختبارات أن هذا التحسين يجعل من الممكن تقليل حجم الكومة بنسبة 10% تقريبًا. في Flutter SDK، تم تمكين الوضع الجديد بالفعل لنظام Android افتراضيًا، ومن المخطط تمكينه لنظام iOS في إصدار مستقبلي.
  • تتضمن Dart SDK أدوات لتصحيح الأخطاء وتحليل الأداء (DevTools)، والتي تم توفيرها مسبقًا في حزمة منفصلة.
  • تمت إضافة أدوات إلى أمر "dart pub" ومستودعات حزمة pub.dev لتتبع النشر غير المقصود للمعلومات السرية، على سبيل المثال، ترك بيانات الاعتماد لأنظمة التكامل المستمر والبيئات السحابية داخل الحزمة. إذا تم اكتشاف مثل هذه التسريبات، فسيتم مقاطعة تنفيذ أمر "dart pub Publish" مع ظهور رسالة خطأ. إذا كانت هناك نتيجة إيجابية كاذبة، فمن الممكن تجاوز الشيك من خلال القائمة البيضاء.
  • تمت إضافة القدرة على إلغاء إصدار منشور بالفعل من الحزمة إلى مستودع pub.dev، على سبيل المثال، في حالة اكتشاف أخطاء خطيرة أو ثغرات أمنية. في السابق، بالنسبة لمثل هذه التصحيحات، كانت الممارسة هي نشر نسخة تصحيحية، ولكن في بعض المواقف يكون من الضروري إلغاء الإصدار الحالي وإيقاف توزيعه الإضافي بشكل عاجل (على سبيل المثال، إذا لم يكن التصحيح جاهزًا بعد أو إذا كان الإصدار الكامل قد تم إصداره) تم نشرها عن طريق الخطأ بدلاً من إصدار تجريبي). بعد الإلغاء، لم تعد الحزمة محددة في أمري "pub get" و"pub Upgrade"، وعلى الأنظمة التي قامت بتثبيتها بالفعل، يتم إصدار تحذير خاص في المرة التالية التي يتم فيها تنفيذ "pub get".
  • حماية إضافية ضد الثغرة الأمنية (CVE-2021-22567) الناتجة عن استخدام أحرف Unicode في التعليمات البرمجية التي تغير ترتيب العرض.
  • تم إصلاح الثغرة الأمنية (CVE-2021-22568) التي تسمح لك بانتحال شخصية مستخدم pub.dev آخر عند نشر الحزم إلى خادم جهة خارجية يقبل الرموز المميزة للوصول إلى pub.dev oauth2. على سبيل المثال، يمكن استخدام الثغرة الأمنية لمهاجمة خوادم الحزم الداخلية وخوادم الشركات. المطورون الذين يستضيفون الحزم فقط على pub.dev لا يتأثرون بهذه المشكلة.

في الوقت نفسه، تم تقديم إصدار مهم لإطار عمل واجهة المستخدم Flutter 2.8، والذي يعتبر بديلاً لـ React Native ويسمح، استنادًا إلى قاعدة تعليمات برمجية واحدة، بإصدار تطبيقات لأنظمة التشغيل iOS وAndroid وWindows وmacOS و منصات Linux، بالإضافة إلى إنشاء تطبيقات للتشغيل في المتصفحات. تم تصميم الغلاف المخصص لنظام التشغيل Fuchsia microkernel الذي طورته Google على أساس Flutter. ويشار إلى أنه خلال الأشهر الستة الماضية ارتفع عدد تطبيقات Flutter 2 في متجر Google Play من 200 ألف إلى 375 ألف، أي. مرتين تقريبا.

يتم تنفيذ الجزء الأكبر من كود Flutter في Dart ، ويتم كتابة محرك وقت التشغيل لتشغيل التطبيقات بلغة C ++. عند تطوير التطبيقات ، بالإضافة إلى لغة Dart الأصلية لـ Flutter ، يمكنك استخدام واجهة Dart Foreign Function لاستدعاء كود C / C ++. يتم تحقيق أداء وقت تشغيل عالي من خلال تجميع التطبيقات إلى التعليمات البرمجية الأصلية للأنظمة الأساسية المستهدفة. في الوقت نفسه ، لا يحتاج البرنامج إلى إعادة التحويل البرمجي بعد كل تغيير - يوفر Dart وضع إعادة التحميل السريع الذي يسمح لك بإجراء تغييرات على تطبيق قيد التشغيل وتقييم النتيجة على الفور.

من بين التغييرات في الإصدار الجديد من Flutter، لوحظ تحسين سرعة الإطلاق واستهلاك الذاكرة على الأجهزة المحمولة. من الأسهل ربط التطبيقات بخدمات الواجهة الخلفية مثل Firebase وGoogle Cloud. لقد تم تثبيت أدوات التكامل مع إعلانات Google. تم تحسين دعم الكاميرات ومكونات الويب الإضافية بشكل ملحوظ. تم اقتراح أدوات جديدة لتبسيط التطوير، على سبيل المثال، تمت إضافة عنصر واجهة مستخدم للمصادقة باستخدام Firebase. تم تحديث محرك Flame، المصمم لتطوير الألعاب ثنائية الأبعاد باستخدام Flutter.

المصدر: opennet.ru

إضافة تعليق