العودة
مشروع Valhalla: عشر سنوات من العمل تصل إلى JDK 28 — ماذا يغيّر JEP 401
SiTech AI Team3 წთ. საკითხავი

مشروع Valhalla: عشر سنوات من العمل تصل إلى JDK 28 — ماذا يغيّر JEP 401

أكدت مهندسة أوراكل لويس فولتان في 15 يونيو أن JEP 401 دخل المستودع الرئيسي لـ OpenJDK ويستهدف JDK 28. وتصل الميزة بصيغة معاينة، وهي الجزء الأول فقط من مشروع Valhalla الذي استمر أكثر من عشر سنوات.

تم دمج JEP 401 (Value Classes and Objects) في المستودع الرئيسي لـ OpenJDK وهو يستهدف JDK 28، بحسب ما أكدته مهندسة أوراكل لويس فولتان في 15 يونيو. والتغيير كبير لدرجة أن مطوري المشروع الآخرين طُلب منهم تجنب الالتزامات الكبيرة أثناء الدمج: طلب الدمج وحده يضيف أكثر من 197 ألف سطر من الشيفرة في 1,816 ملفاً.

تصل الميزة بصيغة معاينة، ومعطلة افتراضياً، أي أنها ستعمل فقط مع الراية --enable-preview. وقد سارع برايان غويتز، الذي راجع الوثيقة، إلى تهدئة التوقعات ووصفها بأنها "الجزء الأول فقط من Valhalla".

المشكلة: كل شيء مرجع

شعار Valhalla منذ البداية هو "يُكتب كصنف، ويعمل كـ int". في جافا، وباستثناء الأنواع الأولية الثمانية، كل قيمة هي مرجع: المتغير يحمل مؤشراً إلى كائن على الكومة، ولكل كائن ترويسته الخاصة، وكل كائن يجب تخصيصه ثم جمعه لاحقاً بواسطة جامع القمامة. ومصفوفة من مليون نقطة هي عملياً مليون مؤشر إلى مليون صندوق متناثر في الذاكرة، وهو تخطيط وصفه برايان غويتز بأنه "منتفخ".

الكثافة مهمة لأن العتاد تغيّر أسرع من اللغة: المعالج يقرأ الذاكرة على شكل سطور تخزين مؤقت بطول 64 بايت، فتأتي البيانات المتجاورة بعدة قيم دفعة واحدة، بينما يخاطر تتبع المؤشرات بفشل في التخزين المؤقت قد يكون أبطأ مئة مرة.

ما الذي يجلبه JDK 28

يقدّم JEP 401 مفهوماً جديداً واحداً: صنف القيمة (value class) الذي يُعلن بالمعدّل value، وكائناته هي كائنات قيمة بلا هوية. وكائنان من هذا النوع أُنشئا منفصلين ولهما الحقول نفسها قابلان للتبادل، لذلك يصبح == اختباراً لقابلية التبادل لا مقارنة عناوين، كما أن synchronized على هذا النوع يطلق IdentityException. وأصناف القيمة نهائية افتراضياً، وحقولها نهائية ضمناً، ولا يجوز مزامنة أساليبها؛ ومع ذلك يمكن أن تكون null، لأن الأنواع الممنوعة من null وثيقة JEP منفصلة ولاحقة.

ويكسب الجهاز الافتراضي تحسينين. يتيح التفكيك العددي للمترجم الفوري تحليل كائن القيمة إلى حقوله وإلغاء التخصيص تماماً، بينما يكتب تسطيح الكومة القيمة مباشرة في حقل أو خلية مصفوفة. ويجب قراءة البيانات المسطّحة وكتابتها بشكل ذري، وهذا يعني اليوم نحو 64 بتة مع راية null، لذلك تبقى بعض الأصناف الصغيرة على الكومة. وعند تفعيل المعاينة تتحول أصناف التغليف في JDK نفسه، مثل Integer، إلى أصناف قيمة، وهو ما يُتوقع أن يخفض كلفة التغليف بوضوح.

ما لا يزال غائباً

الأدوية العامة المتخصصة (specialized generics) ليست جزءاً من JDK 28. وبسبب محو الأنواع، فإن كائن قيمة موضوعاً في مجموعة عامة يظل ماديّاً على الكومة، لذا لن تكون قائمة ArrayList من النقاط مسطّحة؛ فالتسطيح يعمل مباشرة على حقول ومصفوفات نوع القيمة. أما الأنواع الممنوعة من null والترميزات بـ128 بتة والنسخة الناضجة تماماً من JEP 402 حول تغليف الأنواع الأولية فكلها عمل مستقبلي.

يعود المشروع نفسه إلى 2014، حين وصفه جيمس غوسلينغ بأنه "ست شهادات دكتوراه معقودة في عقدة واحدة"، وقد مرّ بخمس نماذج أولية قبل أن يصل إلى شكله الحالي. وJDK 28 ليس إصدار دعم طويل الأمد: فهو مقرر في مارس 2027، ويُتوقع أن يكون الإصدار LTS التالي هو JDK 29 في سبتمبر 2027. وبنى الوصول المبكر متاحة بالفعل على jdk.java.net/valhalla.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.