زبان برنامه نویسی Dart 2.15 و فریمورک Flutter 2.8 موجود است

گوگل انتشار زبان برنامه نویسی Dart 2.15 را منتشر کرده است که به توسعه شاخه ای از دارت 2 که به طور اساسی بازطراحی شده است، ادامه می دهد که با نسخه اصلی زبان دارت با استفاده از تایپ ایستا قوی متفاوت است (انواع را می توان به طور خودکار استنباط کرد، بنابراین تعیین انواع ضروری نیست، اما تایپ پویا دیگر مورد استفاده قرار نمی گیرد و در ابتدا نوع محاسبه شده به متغیر اختصاص داده می شود و پس از آن بررسی دقیق نوع اعمال می شود).

ویژگی های زبان دارت:

  • سینتکس آشنا و آسان برای یادگیری، طبیعی برای برنامه نویسان جاوا اسکریپت، C و جاوا.
  • اطمینان از راه اندازی سریع و عملکرد بالا برای همه مرورگرهای وب مدرن و انواع مختلف محیط ها، از دستگاه های قابل حمل گرفته تا سرورهای قدرتمند.
  • توانایی تعریف کلاس ها و رابط هایی که امکان کپسوله سازی و استفاده مجدد از روش ها و داده های موجود را فراهم می کند.
  • مشخص کردن انواع، اشکال زدایی و شناسایی خطاها را آسان تر می کند، کد را واضح تر و قابل خواندن تر می کند، و اصلاح و تجزیه و تحلیل آن را توسط توسعه دهندگان شخص ثالث ساده می کند.
  • انواع پشتیبانی شده عبارتند از: انواع هش ها، آرایه ها و لیست ها، صف ها، انواع عددی و رشته ای، انواع تعیین تاریخ و زمان، عبارات منظم (RegExp). این امکان وجود دارد که انواع خود را ایجاد کنید.
  • برای سازماندهی اجرای موازی، پیشنهاد می شود از کلاس هایی با ویژگی isolate استفاده شود که کد آنها به طور کامل در فضای ایزوله در یک منطقه حافظه جداگانه اجرا می شود و با ارسال پیام با فرآیند اصلی تعامل دارد.
  • پشتیبانی از استفاده از کتابخانه هایی که پشتیبانی و اشکال زدایی پروژه های بزرگ وب را ساده می کند. پیاده سازی های شخص ثالث توابع را می توان در قالب کتابخانه های مشترک گنجاند. برنامه ها را می توان به قسمت هایی تقسیم کرد و توسعه هر قسمت را به تیم جداگانه ای از برنامه نویسان واگذار کرد.
  • مجموعه ای از ابزارهای آماده برای پشتیبانی از توسعه در زبان دارت، از جمله پیاده سازی ابزارهای توسعه پویا و اشکال زدایی با تصحیح کد در لحظه ("ویرایش و ادامه").
  • برای ساده‌سازی توسعه در زبان دارت، یک SDK، یک میخانه مدیریت بسته، یک تحلیلگر کد استاتیک dart_analyzer، مجموعه‌ای از کتابخانه‌ها، یک محیط توسعه یکپارچه DartPad و پلاگین‌های دارای دارت برای IntelliJ IDEA، WebStorm، Emacs، Sublime Text ارائه می‌شود. 2 و Vim.
  • بسته های اضافی با کتابخانه ها و ابزارهای کمکی از طریق مخزن میخانه که حدود 22 هزار بسته دارد، توزیع می شود.

تغییرات عمده در نسخه دارت 2.15:

  • ابزارهایی برای اجرای موازی سریع وظایف با جداسازی گرداننده ها فراهم می کند. در سیستم‌های چند هسته‌ای، زمان اجرا Dart به طور پیش‌فرض کد برنامه را روی یک هسته CPU اجرا می‌کند و از هسته‌های دیگر برای انجام وظایف سیستمی مانند I/O ناهمزمان، نوشتن روی فایل‌ها یا برقراری تماس‌های شبکه استفاده می‌کند. برای برنامه‌هایی که نیاز به اجرای موازی کنترل‌کننده‌های خود دارند، مثلاً برای رندر کردن انیمیشن در اینترفیس، می‌توان بلوک‌های جداگانه‌ای از کد (Isolate) را که از یکدیگر جدا شده و روی هسته‌های دیگر CPU اجرا می‌شوند، همزمان با رشته اصلی برنامه اجرا کرد. . برای محافظت در برابر خطاهایی که هنگام اجرای همزمان کد با مجموعه ای از داده ها به وجود می آیند، به اشتراک گذاری اشیاء قابل تغییر در بلوک های جدا شده مختلف ممنوع است و یک مدل ارسال پیام برای تعامل بین کنترل کننده ها استفاده می شود.

    دارت 2.15 مفهوم جدیدی را معرفی می کند - گروه های بلوک ایزوله (گروه های ایزوله)، که به شما امکان می دهد دسترسی مشترک به ساختارهای داده داخلی مختلف را در بلوک های ایزوله که بخشی از همان گروه هستند سازماندهی کنید، که می تواند به طور قابل توجهی هزینه های اضافی را هنگام تعامل بین کنترل کننده ها در یک گروه کاهش دهد. . به عنوان مثال، راه اندازی یک بلوک ایزوله اضافی در یک گروه موجود 100 برابر سریعتر است و 10-100 برابر حافظه کمتری نسبت به راه اندازی یک بلوک ایزوله جداگانه نیاز دارد، زیرا نیاز به مقداردهی اولیه ساختارهای داده برنامه وجود ندارد.

    علی‌رغم این واقعیت که بلوک‌های ایزوله در یک گروه هنوز دسترسی مشترک به اشیاء قابل تغییر را ممنوع می‌کنند، گروه‌ها از حافظه پشته مشترک استفاده می‌کنند که می‌تواند به طور قابل توجهی سرعت انتقال اشیاء را از یک بلوک به بلوک دیگر بدون نیاز به انجام عملیات کپی با منابع فشرده افزایش دهد. نسخه جدید همچنین به شما امکان می دهد هنگام فراخوانی Isolate.exit() نتیجه کنترل کننده را برای انتقال داده ها به بلوک ایزوله والد بدون عملیات کپی ارسال کنید. علاوه بر این، مکانیسم انتقال پیام بهینه شده است - پیام‌های کوچک و متوسط ​​اکنون تقریباً 8 برابر سریع‌تر پردازش می‌شوند. اشیایی که می توانند بین ایزوله ها با استفاده از فراخوانی SendPort.send () ارسال شوند، شامل انواعی از توابع، بسته شدن و ردیابی پشته هستند.

  • در ابزارهای ایجاد اشاره گر به توابع مجزا در اشیاء دیگر (tear-off)، محدودیت های ایجاد اشاره گرهای مشابه در کد سازنده حذف شده است که می تواند هنگام ساخت رابط های مبتنی بر کتابخانه Flutter مفید باشد. به عنوان مثال، برای ایجاد یک ویجت Column که شامل چندین ویجت Text است، می‌توانید ".map()" را فراخوانی کنید و نشانگرها را به سازنده Text.new شی Text ارسال کنید: کلاس FruitWidget extensions StatelessWidget { @override Widget build(BuildContext context) { return Column( child: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • امکانات مرتبط با استفاده از نشانگرهای تابع گسترش یافته است. اضافه شدن قابلیت استفاده از متدهای عمومی و نشانگرهای تابع برای ایجاد یک متد و اشاره گر غیر عمومی: T id (T value) => value; var intId = id ; // در نسخه 2.15 به جای "int Function(int) intId = id;" مجاز است. const fo = id; // اشاره گر به شناسه تابع. const c1 = fo ;
  • کتابخانه dart:core پشتیبانی از enums را بهبود بخشیده است، به عنوان مثال، اکنون می توانید با استفاده از روش ".name" یک مقدار رشته از هر مقدار enum خروجی بگیرید، مقادیر را بر اساس نام انتخاب کنید یا جفت مقادیر را مطابقت دهید: enum MyEnum { one , two, three } void main() { print(MyEnum.one.name); // "one" چاپ خواهد شد. print(MyEnum.values.byName('two') == MyEnum.two); // "true" چاپ خواهد شد. نقشه نهایی = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "درست است، واقعی". }
  • یک تکنیک فشرده‌سازی اشاره‌گر پیاده‌سازی شده است که در صورتی که فضای آدرس ۳۲ بیتی برای آدرس‌دهی کافی باشد (بیش از ۴ گیگابایت حافظه استفاده نمی‌شود) امکان استفاده از نمایش فشرده‌تر اشاره‌گرها در محیط‌های ۶۴ بیتی را فراهم می‌کند. آزمایش‌ها نشان داده‌اند که چنین بهینه‌سازی کاهش اندازه پشته را تقریباً 64٪ ممکن می‌سازد. در Flutter SDK، حالت جدید به طور پیش فرض برای اندروید فعال شده است و قرار است در نسخه بعدی برای iOS فعال شود.
  • Dart SDK شامل ابزارهایی برای اشکال زدایی و تجزیه و تحلیل عملکرد (DevTools) است که قبلاً در یک بسته جداگانه ارائه شده بود.
  • ابزارهایی به فرمان "dart pub" و مخازن بسته pub.dev اضافه شده اند تا انتشار تصادفی اطلاعات محرمانه را ردیابی کنند، به عنوان مثال، برای سیستم های یکپارچه سازی مداوم و محیط های ابری در داخل بسته، اعتبار باقی می مانند. در صورت شناسایی چنین نشت‌هایی، اجرای فرمان «دارت پاب انتشار» با یک پیام خطا قطع می‌شود. اگر مثبت کاذب وجود داشت، امکان دور زدن چک از طریق یک لیست سفید وجود دارد.
  • برای مثال، در صورت کشف خطاها یا آسیب‌پذیری‌های خطرناک، توانایی لغو نسخه‌ای که قبلاً منتشر شده از یک بسته به مخزن pub.dev اضافه شده است. قبلاً برای چنین اصلاحاتی، رویه انتشار نسخه اصلاحی بود، اما در برخی شرایط لازم است نسخه موجود لغو شود و توزیع بیشتر آن فوراً متوقف شود (مثلاً اگر اصلاح هنوز آماده نشده باشد یا نسخه کامل منتشر شود. به اشتباه به جای نسخه آزمایشی منتشر شده است). پس از لغو، بسته دیگر در دستورات «pub get» و «pub upgrade» مشخص نمی‌شود و در سیستم‌هایی که قبلاً آن را نصب کرده‌اند، دفعه بعد که «pub get» اجرا می‌شود، هشدار ویژه‌ای صادر می‌شود.
  • حفاظت اضافه شده در برابر آسیب پذیری (CVE-2021-22567) ناشی از استفاده از کاراکترهای یونیکد در کد که ترتیب نمایش را تغییر می دهد.
  • یک آسیب‌پذیری (CVE-2021-22568) که به شما امکان می‌دهد هنگام انتشار بسته‌ها در سرور شخص ثالثی که نشانه‌های دسترسی pub.dev oauth2 را می‌پذیرد، جعل هویت کاربر دیگری pub.dev را برطرف کنید. برای مثال، این آسیب‌پذیری می‌تواند برای حمله به سرورهای بسته داخلی و شرکتی مورد استفاده قرار گیرد. توسعه دهندگانی که فقط بسته ها را در pub.dev میزبانی می کنند تحت تأثیر این مشکل قرار نمی گیرند.

در همان زمان، نسخه قابل توجهی از چارچوب رابط کاربری Flutter 2.8 ارائه شد که به عنوان جایگزینی برای React Native در نظر گرفته می شود و بر اساس یک کد کد واحد امکان انتشار برنامه های کاربردی برای iOS، Android، Windows، macOS و پلتفرم های لینوکس و همچنین ایجاد برنامه هایی برای اجرا در مرورگرها. یک پوسته سفارشی برای سیستم عامل میکروکرنل Fuchsia که توسط گوگل توسعه یافته است، بر اساس Flutter ساخته شده است. خاطرنشان می شود که طی شش ماه گذشته، تعداد برنامه های Flutter 2 در فروشگاه Google Play از 200 هزار به 375 هزار افزایش یافته است. تقریبا دو بار

قسمت اصلی کد فلاتر به زبان دارت پیاده سازی شده و موتور زمان اجرا برای اجرای برنامه ها به زبان C++ نوشته شده است. هنگام توسعه برنامه‌ها، علاوه بر زبان اصلی دارت فلاتر، می‌توانید از رابط عملکرد خارجی دارت برای فراخوانی کدهای C/C++ استفاده کنید. عملکرد اجرای بالا با کامپایل برنامه‌ها به کد بومی برای پلتفرم‌های هدف به دست می‌آید. در این مورد، برنامه پس از هر تغییر نیازی به کامپایل مجدد ندارد - Dart یک حالت بارگذاری مجدد داغ ارائه می دهد که به شما امکان می دهد تغییراتی را در یک برنامه در حال اجرا اعمال کنید و بلافاصله نتیجه را ارزیابی کنید.

در میان تغییرات نسخه جدید فلاتر، بهینه سازی سرعت راه اندازی و مصرف حافظه در دستگاه های تلفن همراه ذکر شده است. اتصال برنامه‌ها به خدمات پشتیبان مانند Firebase و Google Cloud آسان‌تر است. ابزارهای ادغام با Google Ads تثبیت شده اند. پشتیبانی از دوربین ها و افزونه های وب به طور قابل توجهی بهبود یافته است. ابزارهای جدیدی برای ساده سازی توسعه پیشنهاد شده است، به عنوان مثال، ویجتی برای احراز هویت با استفاده از Firebase اضافه شده است. موتور Flame که برای توسعه بازی های دو بعدی با استفاده از Flutter طراحی شده است، به روز شده است.

منبع: opennet.ru

اضافه کردن نظر