إصدار Java SE 20

بعد ستة أشهر من التطوير ، أصدرت Oracle منصة Java SE 20 (Java Platform، Standard Edition 20) ، والتي تستخدم مشروع OpenJDK مفتوح المصدر كتطبيق مرجعي. باستثناء إزالة بعض الميزات المهملة ، يحافظ Java SE 20 على التوافق مع الإصدارات السابقة مع الإصدارات السابقة من نظام Java الأساسي - ستظل معظم مشاريع Java المكتوبة مسبقًا تعمل بدون تعديل عند تشغيلها في الإصدار الجديد. تم إعداد تصميمات Java SE 20 القابلة للتثبيت (JDK و JRE و Server JRE) لأنظمة Linux (x86_64 و AArch64) و Windows (x86_64) و macOS (x86_64، AArch64). تم تطوير تطبيق Java 20 المرجعي بواسطة مشروع OpenJDK ، وهو مفتوح المصدر بالكامل بموجب ترخيص GPLv2 مع استثناءات GNU ClassPath للسماح بالربط الديناميكي بالمنتجات التجارية.

تم تصنيف Java SE 20 كإصدار دعم منتظم ، مع إصدار التحديثات قبل الإصدار التالي. يجب أن يكون فرع الدعم طويل الأجل (LTS) هو Java SE 17 ، والذي سيتلقى التحديثات حتى عام 2029. تذكر أنه بدءًا من إصدار Java 10 ، تحول المشروع إلى عملية تطوير جديدة ، مما يعني دورة أقصر لتشكيل الإصدارات الجديدة. يتم الآن تطوير وظائف جديدة في فرع رئيسي واحد يتم تحديثه باستمرار ، والذي يتضمن التغييرات المكتملة بالفعل والتي تتفرع منها الفروع كل ستة أشهر لتحقيق الاستقرار في الإصدارات الجديدة.

تشمل الميزات الجديدة في Java 20 ما يلي:

  • هناك دعم أولي للقيم المحددة النطاق، مما يسمح بمشاركة البيانات غير القابلة للتغيير عبر سلاسل العمليات وتبادل البيانات بكفاءة بين سلاسل الرسائل الفرعية (يتم توريث القيم). يتم تطوير القيم المحددة لتحل محل آلية المتغيرات المحلية لمؤشر الترابط وتكون أكثر كفاءة عند استخدام أعداد كبيرة جدًا من سلاسل الرسائل الافتراضية (الآلاف أو الملايين من سلاسل الرسائل). يتمثل الاختلاف الرئيسي بين القيم المحددة والمتغيرات المحلية لسلسلة الرسائل في أن الأولى تتم كتابتها مرة واحدة، ولا يمكن تغييرها في المستقبل، وتظل متاحة فقط طوال مدة تنفيذ سلسلة الرسائل. class Server { Final static ScopedValue CURRENT_USER = new ScopedValue(); voidserv(Request request, Response Response) { varlevel = (request.isAuthorized()? ADMIN : GUEST); فار المستخدم = مستخدم جديد(مستوى); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(request, Response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); إذا قام (!user.canOpen()) بإلقاء InvalidUserException() الجديد؛ إرجاع DBConnection جديد (...); } }
  • تمت إضافة معاينة ثانية لأنماط السجلات، لتوسيع ميزة مطابقة الأنماط المقدمة في Java 16 لتحليل قيم فئات السجلات. على سبيل المثال: سجل Point(int x, int y) {} static void printSum(Object obj) { if (obj مثيل Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • تمت إضافة تطبيق أولي رابع لمطابقة الأنماط في عبارات "التبديل"، مما يسمح لتسميات "الحالة" باستخدام ليس القيم الدقيقة، ولكن الأنماط المرنة التي تغطي سلسلة من القيم في وقت واحد، والتي كان من الضروري في السابق استخدام مرهقة سلاسل من عبارات "إذا ... آخر". static String formatterPatternSwitch(Object obj) { return Switch (obj) { case Integer i -> String.format("int %d", i); حالة طويلة l -> String.format("long %d", l); حالة مزدوجة d -> String.format("double %f", d); الحالة String s -> String.format("String %s", s); الافتراضي -> o.toString(); }; }
  • تمت إضافة تطبيق أولي ثانٍ لـ FFM (الوظيفة الخارجية والذاكرة) API، والذي يسمح لك بتنظيم تفاعل برامج Java مع التعليمات البرمجية والبيانات الخارجية من خلال استدعاء الوظائف من المكتبات الخارجية والوصول إلى الذاكرة خارج JVM.
  • تمت إضافة معاينة ثانية للخيوط الافتراضية، وهي خيوط خفيفة الوزن تعمل على تبسيط عملية الكتابة والحفاظ على التطبيقات عالية الأداء ومتعددة الخيوط بشكل كبير.
  • تمت إضافة واجهة برمجة تطبيقات تجريبية ثانية للتوازي المنظم، مما يبسط تطوير التطبيقات متعددة الخيوط من خلال التعامل مع المهام المتعددة التي تعمل في سلاسل رسائل مختلفة ككتلة واحدة.
  • تمت إضافة معاينة خامسة لـ Vector API، مما يوفر وظائف لحسابات المتجهات التي يتم إجراؤها باستخدام تعليمات المتجهات على معالجات x86_64 و AArch64 وتسمح بتطبيق العمليات في وقت واحد على قيم متعددة (SIMD). على عكس الإمكانات المتوفرة في برنامج التحويل البرمجي HotSpot JIT للتوجيه التلقائي للعمليات العددية، تتيح واجهة برمجة التطبيقات الجديدة التحكم بشكل صريح في التوجيه لمعالجة البيانات المتوازية.

المصدر: opennet.ru

إضافة تعليق