إصدار Java SE 17

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

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

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

  • يُقترح تنفيذ تجريبي لمطابقة الأنماط في تعبيرات "التبديل"، والذي يسمح باستخدام قيم غير دقيقة في تسميات "الحالة"، ولكن قوالب مرنة تغطي سلسلة من القيم في وقت واحد، والتي كان من الضروري في السابق استخدام مرهقة سلاسل من عبارات "إذا ... آخر". بالإضافة إلى ذلك، يتمتع "switch" بالقدرة على التعامل مع القيم الخالية. الكائن س = 123 لتر؛ String formatted = Switch (o) { 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(); };
  • دعم ثابت للفئات والواجهات المختومة، والتي لا يمكن استخدامها بواسطة الفئات والواجهات الأخرى لوراثة التنفيذ أو توسيعه أو تجاوزه. توفر الفئات المختومة أيضًا طريقة أكثر تصريحًا لتقييد استخدام الفئة الفائقة من معدّلات الوصول، استنادًا إلى القائمة الصريحة للفئات الفرعية المسموح لها بالامتداد. الحزمة com.example.geometry; فئة عامة مختومة يسمح الشكل بـ com.example.polar.Circle، com.example.quad.Rectangle، com.example.quad.simple.Square {…}
  • يُقترح معاينة ثانية لـ Vector API، والتي توفر وظائف لحسابات المتجهات التي يتم تنفيذها باستخدام تعليمات المتجهات على معالجات x86_64 و AArch64 وتسمح بتطبيق العمليات في وقت واحد على قيم متعددة (SIMD). على عكس الإمكانات المتوفرة في برنامج التحويل البرمجي HotSpot JIT للتوجيه التلقائي للعمليات العددية، تتيح واجهة برمجة التطبيقات الجديدة التحكم بشكل صريح في التوجيه لمعالجة البيانات المتوازية.
  • تمت إضافة معاينة لواجهة برمجة التطبيقات للوظائف الخارجية والذاكرة، والتي تسمح للتطبيقات بالتفاعل مع التعليمات البرمجية والبيانات خارج وقت تشغيل Java. تسمح لك واجهة برمجة التطبيقات الجديدة باستدعاء الوظائف غير التابعة لـ JVM بكفاءة والوصول إلى الذاكرة غير المُدارة بواسطة JVM. على سبيل المثال، يمكنك استدعاء وظائف من مكتبات مشتركة خارجية والوصول إلى بيانات العملية دون استخدام JNI.
  • تم تكييف محرك عرض macOS الذي يقوم بتشغيل Java 2D API، والذي يقوم بدوره بتشغيل Swing API، لاستخدام واجهة برمجة التطبيقات للرسومات المعدنية. يستمر نظام macOS الأساسي في استخدام OpenGL افتراضيًا، ويتطلب تمكين دعم Metal إعداد "-Dsun.java2d.metal=true" وتشغيل macOS 10.14.x على الأقل.
  • تمت إضافة منفذ لمنصة macOS/AArch64 (أجهزة كمبيوتر Apple المستندة إلى شرائح Apple M1 الجديدة). الميزة الخاصة للمنفذ هي دعم آلية حماية الذاكرة W^X (Write XOR Execute)، حيث لا يمكن الوصول إلى صفحات الذاكرة في وقت واحد للكتابة والتنفيذ. (لا يمكن تنفيذ التعليمات البرمجية إلا بعد تعطيل الكتابة، ولا يمكن الكتابة إلى صفحة الذاكرة إلا بعد تعطيل التنفيذ).
  • تم الرجوع إلى استخدام دلالات صارمة فقط لتعبيرات الفاصلة العائمة. تم إيقاف دعم الدلالات "الافتراضية"، المتوفرة منذ إصدار Java 1.2، بما في ذلك تبسيط العمل على الأنظمة التي تحتوي على معالجات رياضية قديمة جدًا x87 (بعد ظهور تعليمات SSE2، اختفت الحاجة إلى دلالات إضافية).
  • تم تنفيذ أنواع جديدة من الواجهات لمولدات الأرقام العشوائية الزائفة، كما تم تنفيذ خوارزميات إضافية لتوليد أرقام عشوائية أفضل. يتم منح التطبيقات الفرصة لاختيار خوارزمية لتوليد أرقام عشوائية زائفة. تحسين الدعم لتوليد تدفقات كائن عشوائي.
  • فرض تغليف صارم لجميع مكونات JDK الداخلية، باستثناء واجهات برمجة التطبيقات الهامة مثل sun.misc.Unsafe. يحظر التغليف الصارم محاولات التعليمات البرمجية للوصول إلى الفئات والأساليب والحقول الداخلية. في السابق، كان من الممكن تعطيل وضع التغليف الصارم باستخدام خيار "--illegal-access=permit"، ولكن تم إهمال هذا الآن. يجب على التطبيقات التي تتطلب الوصول إلى الفئات والأساليب والحقول الداخلية أن تحددها بشكل صريح باستخدام خيار --add-opens أو سمة Add-Opens في ملف البيان.
  • يتم منح التطبيقات القدرة على تحديد مرشحات إلغاء تسلسل البيانات، والتي يمكن أن تكون حساسة للسياق ويتم تحديدها ديناميكيًا بناءً على عمليات إلغاء تسلسل محددة. تنطبق المرشحات المحددة على الجهاز الظاهري بأكمله (على مستوى JVM)، أي. لا تغطي التطبيق نفسه فحسب، بل تغطي أيضًا مكتبات الطرف الثالث المستخدمة في التطبيق.
  • أضاف Swing طريقة javax.swing.filechooser.FileSystemView.getSystemIcon لتحميل أيقونات كبيرة لتحسين واجهة المستخدم على شاشات DPI العالية.
  • توفر واجهة برمجة تطبيقات java.net.DatagramSocket الدعم للاتصال بمجموعات البث المتعدد دون الحاجة إلى واجهة برمجة تطبيقات java.net.MulticastSocket منفصلة.
  • تم تحسين الأداة المساعدة IGV (Ideal Graph Visualizer)، مما يوفر تصورًا تفاعليًا لتمثيل التعليمات البرمجية المتوسطة في برنامج التحويل البرمجي HotSpot VM C2 JIT.
  • في JavaDoc، قياسًا على مترجم javac، عند إخراج خطأ، تتم الإشارة الآن إلى رقم السطر الذي به مشكلة في الملف المصدر وموقع الخطأ.
  • تمت إضافة خاصية original.encoding، التي تعكس اسم ترميز أحرف النظام (UTF-8، koi8-r، cp1251، وما إلى ذلك).
  • تمت إضافة واجهة java.time.InstantSource، مما يسمح بمعالجة الوقت دون الرجوع إلى منطقة زمنية.
  • تمت إضافة java.util.HexFormat API للتحويل إلى التمثيل الست عشري والعكس.
  • تمت إضافة وضع الثقب الأسود إلى المترجم، مما يؤدي إلى تعطيل عمليات إزالة التعليمات البرمجية الميتة، والتي يمكن استخدامها عند إجراء اختبارات الأداء.
  • تمت إضافة خيار "-Xlog:async" إلى وقت التشغيل لتسجيل السجلات في الوضع غير المتزامن.
  • عند إنشاء اتصالات آمنة، يتم تمكين TLS 1.3 افتراضيًا (تم استخدام TLS 1.2 سابقًا).
  • تم نقل واجهة برمجة تطبيقات Applet القديمة التي تم الإعلان عنها مسبقًا (java.applet.Applet*, javax.swing.JApplet)، والتي كانت تستخدم لتشغيل تطبيقات Java في المتصفح، إلى الفئة المقرر إزالتها (فقدت أهميتها بعد انتهاء الدعم لبرنامج Java الإضافي للمتصفحات).
  • تم نقل مدير الأمان، الذي فقد أهميته منذ فترة طويلة ولم تتم المطالبة به بعد انتهاء دعم المكون الإضافي للمتصفح، إلى فئة تلك المقرر إزالتها.
  • تمت إزالة آلية تنشيط RMI، التي عفا عليها الزمن، وتم نقلها إلى فئة الخيار في Java 8 ولا يتم استخدامها أبدًا في الممارسة الحديثة.
  • مترجم تجريبي يدعم JIT (في الوقت المناسب) للتجميع الديناميكي لتعليمات Java البرمجية لـ HotSpot JVM، بالإضافة إلى وضع التجميع الاستباقي (AOT، المسبق) للفئات في كود الجهاز قبل بدء تشغيل الجهاز الظاهري ، تمت إزالته من SDK. تمت كتابة المترجم بلغة Java واستنادًا إلى عمل مشروع Graal. تجدر الإشارة إلى أن صيانة المترجم تتطلب الكثير من العمل، وهو أمر غير مبرر عندما لا يكون هناك طلب من المطورين.

المصدر: opennet.ru

إضافة تعليق