جافا بعد الانفجار البركاني

طلب مني بعض أصحاب العمل الساخرين تحسين جاوة ، وعلى الرغم من أنني لست رئيس إندونيسيا ، فقد خرجت سريعًا لأصبح في حيرة لي عن طريق الخطأ لمدة نصف يوم. أود ذلك من هذا القبيل. المبدأ العام هو التبسيط الأقصى دون فقدان التحكم المنطقي. لهذا ، من الواضح أنه من الضروري ليس فقط إضافة ما لم يكن موجودًا إلى اللغة ، ولكن أيضًا لإزالة الكثير مما كان موجودًا من اللغة ، واستمرارًا للتقليد الجيد لـ C--.


  1. القدرة على إرجاع أكثر من نتيجة واحدة من وظيفة.
  2. يجب الإعلان عن القيم الافتراضية للحقول البدائية بشكل صريح. أزل معدّل "ثابت" من اللغة ، مثل ثابت - المثيل الافتراضي ، يمكن الوصول إليه بالرجوع إلى القيمة الخالية المكتوبة. نسميها جميعًا "المثيل الافتراضي". إمكانية التعديل "المجرد" للحقول ، مما يعني عدم القدرة على إنشاء مثيل للفئة ، والحاجة إلى تحديد القيمة الافتراضية لهذا الحقل في سلالة الفصل.
  3. بالنسبة للحقول "المحمية" و "الافتراضية" و "العامة" ، يقوم المترجمون بإنشاء الحروف تلقائيًا بواسطة المترجم ، دون إنشاء أنواع مرئية بشكل تلقائي ، لكن مع إمكانية التحميل الزائد عليها ، قم بإزالة "خاص" من اللغة ، لأن "الحقول" نفسها ستكون جميعها "خاصة" دون قدرات الزائد. تضاف كلمة "محلي" - عن ذلك في الفقرة 8.
  4. الإنشاء التلقائي للواجهات العامة من جميع الحقول "العامة" في الفصل ، وكذلك نوع جديد من الحماية ، إلخ. واجهات من الحقول المقابلة للمعدل. تتم مقارنة أنواع الفئات برمز التجزئة ، الذي سيتم إنشاؤه بواسطة أسماء الحقول وأسماء الوسائط وأنواع وقيم الإرجاع ، نظرًا لأن احتمال حدوث هذا التزامن ضئيل للغاية ويمكن اكتشافه في وقت الترجمة باستخدام التحذيرات.

    وبالتالي ، لم تعد هناك حاجة إلى "واجهة" ، بل مجرد "فئة" ، "مجردة" هي مجرد تعليمات تحظر إنشاء مثيل. لمعرفة الوراثة المتعددة ، انظر الفقرة 5 التالية.
  5. إضافة قواعد دمج "يمتد". حدد بشكل صريح السلف لجميع الحقول المتعارضة ، والتي لن يكون تمييزها عن الأساليب ، أكثر على ذلك في الفقرة 8. ونتيجة لذلك ، سيرث الكائن الشفرة وينفذ جميع الأنواع الرئيسية. تختفي الأنواع التي لا يتم حفظها بالكامل نتيجة الدمج ببساطة من أسلافك الرسميين ، تاركةً الكود ، ولكنها تخلق خطأً في الترجمة عند محاولة إساءة استخدام الكائن.
  6. أنواع ديناميكية. القوالب في C ، وليس كقوالب تستند إلى Java. لن تعاني الكتابة من هذا ، لأن الأنواع الديناميكية لا يمكن استخدامها مباشرة في العينات ، ولكن يمكن استخدامها في جميع الحالات عند استخدام الأنواع الأساسية أو الانعكاس أو القوالب ، والتي يصعب أيضًا تنظيم إعادة التخطيط من خلال توسيع نوع المثيل مباشرة إلى وقت التشغيل ، ممنوع التقييد.
  7. الطرق الفرعية كما هو الحال في باسكال.
  8. جميع الطرق هي مثيلات افتراضية كاملة للفئات الداخلية ولا يمكن تمييزها عن الحقول. لهذا ، سيعود مُنشئ الفئة قيمة. سيكون مُنشئ الفئة هو نص الطريقة الافتراضية التي سيتم إنشاؤها في وقت الترجمة ، وفقًا للفقرة 2 "الحالات الافتراضية". لن تكون هناك حاجة إلى مراجع خاصة بالطريقة ، كما في Java 8. مرجع الطريقة سيعني مرجع كائن.

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

    يجب تجميع كل نفس الطرق مع مجموعات مختلفة من الوسائط في فئة فرعية ، بحيث يكون من الجيد أن تتناثر الطبقة الخارجية. تصبح الحقول الافتراضية لهذه الفئة الفرعية ، على التوالي ، غير ثابتة تمامًا ، ولكنها ثابتة بالنسبة إلى الطبقة الخارجية. إلا عندما تكون الطبقة الخارجية نفسها هي المثيل الافتراضي.
  9. بدلاً من "try" - "catch" ، هناك أيضًا طرق ، "يحدد throws" النوع المسموح به من طريقة الاتصال ، "رمي" يجعل goto على طريقة معالج ، قطع callstack ، وطرق معالج أنفسهم لا تختلف ، يتم تنفيذ العائد منها بالطريقة المعتادة ، ولكن ، يحدث ذلك في واحدة من وسائل الاتصال السابقة. وفقًا لذلك ، يتم استدعاء المعالج في أقرب مستوى هرمي ، كما هو الحال مع try-catch. وبالتالي ، من أجل القفز فوق رمز معين باتباع طريقة معينة في حالة حدوث استثناء ، تحتاج إلى وضع هذا الرمز ، مع هذه الطريقة المحددة في البداية ، في فئة submethod التي تفرط فيها معالجات ضرورية. هذا النهج سوف تقصر بشكل كبير في فترة طويلة ، بعبارة ملطفة ، وأساليب المشاريع الحقيقية في جاوة.

    "أخيرًا" لإضافة وزن للطريقة في النهاية ، بحيث بدون أقواس إضافية.
  10. مشغل جديد لوقت التشغيل يقوم بتشفير جميع أنواع الصفائف البدائية ومصفوفات الحقول البدائية وتسلسلها وضغطها في الذاكرة لاستعادتها لاحقًا باستخدام مفتاح وصول بكميات كبيرة لمثيل الفصل بأكمله. الرغبة في فك حزمة الاستخدام مباشرة بطريقة واحدة ، بدلاً من خدش رأسي "كيفية القيام بذلك بشكل أفضل".
  11. تحتاج المصفوفات إلى التحكم في الحدود فقط أثناء التسجيل ، وسأمنح الفرصة للقراءة مباشرة من الذاكرة دون التحكم في حدود المصفوفة. وبالتالي ، نظرًا لوجود System.arraycopy ، سيتم مراقبة حدود الصفيف دون التضحية بالأداء. نظرًا لأن معظم الحسابات الإضافية يتم إجراؤها غالبًا أثناء التسجيل ، وبالمقارنة معها ، لا يستغرق التسجيل نفسه الكثير من الوقت.
  12. إن توفير بديل أساسي إضافي للمزامنة بواسطة أدوات حظر هو أبسط طريقة في فئة مؤشر الترابط التي ترسل رسائل مخصصة إلى مؤشرات الترابط الأخرى ، والطريقة التي يمكنك من خلالها تلقي رسائل مخصصة من مؤشرات ترابط أخرى. بالإضافة إلى ذلك ، في طريقة "التشغيل" للكائن Runnable ، والتي يتم تمريرها إلى مؤشر الترابط ، تتطلب استدعاء الأسلوب الذي يقاطع مؤشر الترابط بشكل صريح ودون خطأ في التحويل البرمجي. أيضًا ، أضف طريقة تطلق أحداث Runnable المخصصة من مؤشرات ترابط أخرى ، وتستقبل وترسل الرسائل في كل مرة بعد هذه المقاطعة. كل هذا لا يغير شيئًا بشكل أساسي ، لكنه سيبسط التطوير الموجه نحو سلاسل الرسائل في 90٪ من الحالات. خاصة في الحالات التي يكون فيها التطور على عجل ، وهذه هي غالبية الحالات الحقيقية.
  13. في الواقع ، يحتوي الرسم البياني لجميع الكائنات الموجودة في الذاكرة دائمًا على أنواع بدائية فقط أو صفائف أو لاغية أو رابط لشيء أصلي في كل قممه. أداة أساسية يمكنها حفظ هذا الرسم البياني بأكمله في أي شكل نصي ستكون مفيدة للغاية. يمكن تخزين صفائف كبيرة من البدائيين بشكل منفصل ، يمكن لمصفوفات صغيرة ترميز مضمنة. بالإضافة إلى إصدار الجهاز الظاهري و- دعنا نذهب ، يمكن استعادة هذه البنية في الذاكرة.
  14. أداة مفيدة للبحث عن أي كائنات في الرسم البياني للكائنات وفقًا للمعايير المحددة ، مع مراعاة معدّلات الوصول ، حسب نوع SQL البسيط. تم تبسيط هذه المهمة إلى حد كبير باستخدام الفقرات 1 ... 9. لا يمكن لمثل هذه الأداة فقط تبسيط التسلسل الهرمي للكائنات ، ولكن أيضًا تنظيم اختبارات متنوعة والتحكم في القيم المسموح بها ومحاولة اللحاق بالبرولوغ.

Source: https://habr.com/ru/post/ar439210/


All Articles