أصبح Smalltalk Miracle: (2009)

واحدة من أكثر الميزات الفريدة والأكثر قوة في Smalltalk هي أيضًا واحدة من أقل الميزات المعروفة خارج مجتمع Smalltalk. إنها طريقة صغيرة تسمى أن تصبح:.

ما يصبح: ne هو تبادل هويات متلقيها وحجتها. أي بعد

أ تصبح: ب

تشير جميع الإشارات إلى الكائن المشار إليه بواسطة a قبل نقطة الاستدعاء إلى الكائن المشار إليه بالرمز b والعكس صحيح.

خذ دقيقة لاستيعاب ذلك ؛ قد تفهمه عن طريق الخطأ على أنه شيء تافه. لا يتعلق الأمر بتبديل متغيرين - إنه حرفياً يتعلق بتحول كائن إلى كائن آخر. لا أعرف أي لغة أخرى بها هذه الميزة. إنها سمة القوة الهائلة - والخطر.

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

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

بعد ذلك ، تصبح: ، استبدال جميع المراجع إلى الغلاف بمراجع للكائن الذي تم تحميله حديثًا ، وإعادة محاولة الاستدعاء.

كانت بعض محركات المثابرة تفعل هذا النوع من الأشياء لعقود من الزمن ، لكنها اعتمدت عادةً على وصول منخفض المستوى إلى التمثيل. كن: يتيح لك القيام بذلك على مستوى شفرة المصدر.

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

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

يشغل جدول الكائنات مساحة تخزين ويبطئ الوصول ؛ لكنه يمنحك مرونة كبيرة. قد يخفف دعم الأجهزة من انخفاض الأداء. الجانب الإيجابي هو أن العديد من المشكلات الصعبة يصبح من السهل حلها إلى حد ما إذا كنت على استعداد لدفع تكلفة المراوغة عبر جدول العناصر مقدمًا. تذكر: يمكن حل كل مشكلة في الكمبيوتر بمستويات إضافية من المراوغة. لدى Alex Warth بعض الأعمال الشيقة للغاية التي تقع ضمن هذه الفئة ، على سبيل المثال.

أن تصبح: لها عدة متغيرات - طريقة لتصبح: تغيير هوية كائن A إلى كائن آخر B ، بحيث تشير الإشارات إلى A الآن إلى B ؛ تظل الإشارات إلى "ب" دون تغيير. غالبًا ما يكون من المفيد أن تصبح: جماعي - تحويل هويات جميع الكائنات في مصفوفة (أحادية الاتجاه أو ثنائية الاتجاه). تصبح المجموعة: التي تفعل السحر بطريقة ذرية أمرًا رائعًا لتنفيذ التحديثات العاكسة على النظام ، على سبيل المثال. يمكنك تعديل مجموعة كاملة من الفئات ومثيلاتها مرة واحدة.

يمكنك حتى تصميم النوع الآمن ليصبح:. كن ذو اتجاهين: آمن فقط إذا كان نوع A هو نفس النوع B ، ولكن كن أحادي الاتجاه: يتطلب فقط أن يكون العنصر الجديد نوعًا فرعيًا من النوع القديم.

ربما حان الوقت للتفكير فيما إذا كان وجود جدول كائن أمرًا جيدًا حقًا أم لا.

واحدة من أكثر الميزات الفريدة والأكثر قوة في Smalltalk هي أيضًا واحدة من أقل الميزات المعروفة خارج مجتمع Smalltalk. إنها طريقة صغيرة تسمى أن تصبح:.

ما يصبح: ne هو تبادل هويات متلقيها وحجتها. أي بعد

أ تصبح: ب

تشير جميع الإشارات إلى الكائن المشار إليه بواسطة a قبل نقطة الاستدعاء إلى الكائن المشار إليه بالرمز b والعكس صحيح.

خذ دقيقة لاستيعاب ذلك ؛ قد تفهمه عن طريق الخطأ على أنه شيء تافه. لا يتعلق الأمر بتبديل متغيرين - إنه حرفياً يتعلق بتحول كائن إلى كائن آخر. لا أعرف أي لغة أخرى بها هذه الميزة. إنها سمة القوة الهائلة - والخطر.

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

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

بعد ذلك ، تصبح: ، استبدال جميع المراجع إلى الغلاف بمراجع للكائن الذي تم تحميله حديثًا ، وإعادة محاولة الاستدعاء.

كانت بعض محركات المثابرة تفعل هذا النوع من الأشياء لعقود من الزمن ، لكنها اعتمدت عادةً على وصول منخفض المستوى إلى التمثيل. كن: يتيح لك القيام بذلك على مستوى شفرة المصدر.

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

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

يشغل جدول الكائنات مساحة تخزين ويبطئ الوصول ؛ لكنه يمنحك مرونة كبيرة. قد يخفف دعم الأجهزة من انخفاض الأداء. الجانب الإيجابي هو أن العديد من المشكلات الصعبة يصبح من السهل حلها إلى حد ما إذا كنت على استعداد لدفع تكلفة المراوغة عبر جدول العناصر مقدمًا. تذكر: يمكن حل كل مشكلة في الكمبيوتر بمستويات إضافية من المراوغة. لدى Alex Warth بعض الأعمال الشيقة للغاية التي تقع ضمن هذه الفئة ، على سبيل المثال.

أن تصبح: لها عدة متغيرات - طريقة لتصبح: تغيير هوية كائن A إلى كائن آخر B ، بحيث تشير الإشارات إلى A الآن إلى B ؛ تظل الإشارات إلى "ب" دون تغيير. غالبًا ما يكون من المفيد أن تصبح: جماعي - تحويل هويات جميع الكائنات في مصفوفة (أحادية الاتجاه أو ثنائية الاتجاه). تصبح المجموعة: التي تفعل السحر بطريقة ذرية أمرًا رائعًا لتنفيذ التحديثات العاكسة على النظام ، على سبيل المثال. يمكنك تعديل مجموعة كاملة من الفئات ومثيلاتها مرة واحدة.

يمكنك حتى تصميم النوع الآمن ليصبح:. كن ذو اتجاهين: آمن فقط إذا كان نوع A هو نفس النوع B ، ولكن كن أحادي الاتجاه: يتطلب فقط أن يكون العنصر الجديد نوعًا فرعيًا من النوع القديم.

ربما حان الوقت للتفكير فيما إذا كان وجود جدول كائن أمرًا جيدًا حقًا أم لا.

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow