أحاديث قصيرة

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

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

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

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

تُعدّ اللغات الشبيهة بلغة سمول توك قيد التطوير النشط، وقد حظيت بمجتمعات من المستخدمين. وقد تمّ اعتماد معيار سمول توك الصادر عن المعهد الوطني الأمريكي للمعايير (ANSI) في عام 1998، وهو يُمثّل النسخة القياسية من سمول توك. [ 5 ]

احتلت لغة Smalltalk المرتبة الثانية كأكثر لغات البرمجة شعبية في استطلاع Stack Overflow للمطورين عام 2017، [ 6 ] لكنها لم تكن من بين أكثر 26 لغة برمجة شعبية في استطلاع عام 2018. [ 7 ]

تاريخ

توجد العديد من متغيرات لغة سمول توك. [ 8 ] غالبًا ما تُستخدم كلمة سمول توك غير المحددة للإشارة إلى لغة سمول توك-80 والآلة الافتراضية المتوافقة معها، وهي أول إصدار تم إتاحته للجمهور وأُنشئ في عام 1980. كانت أجهزة الكمبيوتر من نوع زيروكس ألتو هي أولى بيئات الأجهزة التي شغّلت الآلات الافتراضية لسمول توك .

كانت لغة سمول توك نتاج بحثٍ قاده آلان كاي في مركز أبحاث زيروكس بالو ألتو (PARC). صمّم كاي معظم الإصدارات الأولى من سمول توك، وكتبت أديل غولدبرغ معظم الوثائق، ونفّذ دان إنغالز معظمها. كانت سمول توك-71 تصميمًا غير منشور للغة من ابتكار كاي (حوالي عام 1971). [ 9 ] في سبتمبر 1972، راهن كاي على إمكانية تنفيذ جوهر لغة برمجة قائمة على فكرة تمرير الرسائل في "صفحة واحدة من التعليمات البرمجية". وبحلول صباح اليوم الثامن تقريبًا، ظهر مخطط مترجم عملي، شكّل أساس ما يُعرف الآن باسم سمول توك-72. [ 4 ] كان تركيبها النحوي ونموذج تنفيذها مختلفين تمامًا عن متغيرات سمول توك الحديثة.

كان أول مترجم للغة سمول توك تم تنفيذه فعليًا مخصصًا لإصدار سمول توك-72، وقد كتبه دان إنجلز في حوالي 700 سطر من لغة بيسك في أكتوبر 1972 لجهاز داتا جنرال نوفا . وقد عرض آلان كاي هذا الإصدار في مختبر الذكاء الاصطناعي بمعهد ماساتشوستس للتكنولوجيا في نوفمبر من ذلك العام؛ وتشير التقارير المنشورة عن نموذج الممثل إلى هذه الفترة وأفكار تمرير الرسائل في سمول توك-72 كعامل مؤثر في تطوير النموذج. [ 10 ] [ 4 ] وقد نفذ تيد كاهلر أولى إجراءات رسم الخطوط النقطية في أواخر ديسمبر 1972. وتم نقل سمول توك-72 إلى جهاز زيروكس ألتو في أبريل 1973، وهو نفس الشهر الذي بدأت فيه أولى الوحدات بالعمل. [ 11 ]

بعد تعديلات جوهرية جمّدت بعض جوانب دلالات التنفيذ لتحسين الأداء (عبر تبني نموذج وراثة فئات مشابه لنموذج Simula )، تم إنشاء Smalltalk-76. احتوى هذا النظام على بيئة تطوير تضم معظم الأدوات المألوفة حاليًا، بما في ذلك متصفح/محرر أكواد مكتبة الفئات. أضاف Smalltalk-80 الفئات الوصفية (metaclasses ) للمساعدة في الحفاظ على مبدأ "كل شيء كائن" (باستثناء المتغيرات) من خلال ربط الخصائص والسلوك بالفئات الفردية، وحتى القيم الأولية مثل الأعداد الصحيحة والقيم المنطقية (على سبيل المثال، لدعم طرق مختلفة لإنشاء مثيلات).

كانت لغة Smalltalk-80 أول نسخة متاحة خارج مركز أبحاث بالو ألتو (PARC). في عام 1981، تمّت مشاركتها مع شركات Tektronix و Hewlett-Packard و Apple Computer و DEC لمراجعتها وتصحيح أخطائها على منصاتها. [ 12 ] [ 13 ] خُصص عدد أغسطس 1981 من مجلة Byte للغة Smalltalk-80، مما ساهم في تعريف جمهور واسع بأفكارها. كما نُشرت عدة كتب عنها. وأصبحت Smalltalk-80 الأساس لجميع الإصدارات التجارية اللاحقة من لغة Smalltalk. [ 14 ] صدر الإصدار النهائي من Smalltalk-80، الإصدار 1، في نوفمبر 1981. [ 15 ] وزّعت شركة Xerox الإصدار 1 فقط على شركات Apple وDEC وHP وTektronix، ولكن سُمح لهذه الشركات بإعادة توزيعها بحرية تامة عبر أي نظام تقوم بتطويره. وقد شجع هذا على انتشار لغة Smalltalk على نطاق واسع. [ 11 ] لاحقًا، في عام 1983، أصدرت شركة زيروكس الإصدار الثاني من لغة سمول توك-80. كان هذا الإصدار متاحًا للجمهور بشكل عام، وإن كان بترخيص مقيد. كان الإصداران الأول والثاني متشابهين إلى حد كبير، مع أن الإصدار الثاني احتوى على بعض الميزات الإضافية مثل مصحح إملائي. يتألف كل إصدار من صورة افتراضية (ملف مستقل عن المنصة يحتوي على تعريفات الكائنات) ومواصفات آلة افتراضية . [ 11 ]

تُعدّ لغة ANSI Smalltalk المرجع اللغوي القياسي منذ عام 1998. [ 16 ] ويُعتبر اثنان من تطبيقات Smalltalk الشائعة حاليًا امتدادًا لصور Smalltalk-80 الأصلية. يُعدّ Squeak تطبيقًا مفتوح المصدر مُشتقًا من Smalltalk-80 الإصدار 1 عبر Apple Smalltalk. أما VisualWorks فهو مُشتق من Smalltalk-80 الإصدار 2 عبر Smalltalk-80 2.5 وObjectWorks (كلاهما من منتجات ParcPlace Systems، وهي شركة منبثقة عن Xerox PARC تأسست لطرح Smalltalk في السوق). ومن المثير للاهتمام، أنه في عام 2001، قام فاسيلي بيكوف بتطوير Hobbes، وهي آلة افتراضية تُشغّل Smalltalk-80 داخل VisualWorks. [ 17 ] ( قام دان إنجلز لاحقًا بنقل Hobbes إلى Squeak).

خلال الفترة الممتدة من أواخر الثمانينيات إلى منتصف التسعينيات، قامت شركتان متنافستان، هما ParcPlace Systems وDigitalk، وكلاهما مقرهما كاليفورنيا، ببيع بيئات Smalltalk، بما في ذلك الدعم والتدريب والإضافات. ركزت ParcPlace Systems على سوق أنظمة Unix/Sun المصغرة، بينما ركزت Digitalk على أجهزة الكمبيوتر الشخصية التي تعمل بمعالجات Intel ونظامي التشغيل Microsoft Windows أو OS/2 من IBM. واجهت الشركتان صعوبة في نشر Smalltalk على نطاق واسع نظرًا لاحتياجاتها الكبيرة من الذاكرة، وأدائها المحدود أثناء التشغيل، وافتقارها في البداية إلى دعم الاتصال بخوادم قواعد البيانات العلائقية القائمة على SQL . في حين أن السعر المرتفع لـ Smalltalk من ParcPlace حدّ من انتشارها في السوق ليقتصر على المؤسسات التجارية المتوسطة والكبيرة، سعت منتجات Digitalk في البداية إلى الوصول إلى جمهور أوسع بسعر أقل. دعمت IBM منتج Digitalk في البداية، ثم دخلت السوق بمنتج Smalltalk في عام 1995 باسم VisualAge/Smalltalk. وفي ذلك الوقت، طرحت Easel برنامج Enfin لأنظمة Windows وOS/2. اكتسب برنامج Enfin شعبية واسعة في أوروبا، حيث قامت شركة IBM بطرحه في أقسام تقنية المعلومات قبل تطويرها لبرنامج IBM Smalltalk (الذي أصبح لاحقًا VisualAge). استحوذت شركة Cincom Systems لاحقًا على Enfin ، ويُباع الآن تحت اسم ObjectStudio ، وهو جزء من مجموعة منتجات Cincom Smalltalk.

في عام ١٩٩٥، اندمجت شركتا ParcPlace وDigitalk لتشكيل ParcPlace-Digitalk، ثم أعيد تسميتها في عام ١٩٩٧ إلى ObjectShare، ومقرها في إرفاين، كاليفورنيا . تم تداول أسهم ObjectShare ( المدرجة في بورصة ناسداك تحت الرمز : OBJS) علنًا حتى عام ١٩٩٩، حين تم شطبها من البورصة وحلها. لم تتمكن الشركة المندمجة من إيجاد حل فعال لمنافسة Java من حيث التموضع السوقي، وبحلول عام ١٩٩٧، كان مالكوها يتطلعون لبيع الشركة. في عام ١٩٩٩، استحوذت شركة Seagull Software على مختبر تطوير Java التابع لشركة ObjectShare (بما في ذلك فريق تطوير Smalltalk/V وVisual Smalltalk الأصلي)، ولا تزال تمتلك VisualSmalltalk، على الرغم من أن حقوق التوزيع العالمية لمنتج Smalltalk بقيت مع ObjectShare التي باعتها لاحقًا إلى Cincom . [ ١٨ ] تم بيع VisualWorks إلى Cincom وهي الآن جزء من Cincom Smalltalk. لقد دعمت شركة Cincom لغة Smalltalk بقوة، حيث أصدرت العديد من الإصدارات الجديدة من VisualWorks و ObjectStudio كل عام منذ عام 1999.

لا تزال شركات Cincom وGemTalk وInstantiations تبيع بيئات Smalltalk. أما شركة IBM فقد أوقفت دعم VisualAge Smalltalk، بعد أن قررت في أواخر التسعينيات دعم Java بدلاً من ذلك، واعتبارًا من عام 2005يدعمها Instantiations, Inc. [ 19 ] ، وقد أعادت Instantiations تسمية المنتج إلى VA Smalltalk (منصة VAST) وتواصل إصدار نسخ جديدة منه سنويًا. يتمتع تطبيق Squeak مفتوح المصدر بمجتمع مطورين نشط، يضم العديد من أعضاء مجتمع Smalltalk الأصلي، وقد استُخدم لتوفير بيئة Etoys في مشروع One Laptop per Child (OLPC)، ومجموعة أدوات لتطوير تطبيقات تعاونية مثل مشروع Croquet ، وتطبيق Open Cobalt للعالم الافتراضي. GNU Smalltalk هو تطبيق برمجي مجاني مشتق من Smalltalk-80 من مشروع GNU . أما Pharo Smalltalk فهو نسخة معدلة من Squeak موجهة نحو البحث والاستخدام في البيئات التجارية.

اعتبارًا من عام 2016، شهدنا تطورًا هامًا انتشر في جميع بيئات لغة سمول توك، وهو ازدياد استخدام إطارَي عمل الويب Seaside و AIDA/Web ، لتبسيط بناء تطبيقات الويب المعقدة. وقد حظي إطار عمل Seaside باهتمام كبير في السوق، حيث قامت شركات Cincom و Gemstone و Instantiations بدمجه وتطويره.

التأثيرات

كانت لغة سمول توك إحدى لغات البرمجة الكائنية العديدة المبنية على لغة سيمولا . [ 20 ] وتُعدّ سمول توك أيضًا من أكثر لغات البرمجة تأثيرًا. فقد تأثرت بها جميع لغات البرمجة الكائنية التي ظهرت لاحقًا تقريبًا ، مثل فلافورز [ 21 ] ، وكلوس ، وأوبجكتيف-سي ، وجافا ، وبايثون ، وروبي [ 22 ] ، وغيرها الكثير. كما كانت سمول توك من أكثر اللغات شيوعًا في منهجيات تطوير البرمجيات الرشيقة ، والتطوير السريع للتطبيقات (RAD)، والنماذج الأولية، وأنماط تصميم البرمجيات . [ 23 ] وقد جعلت بيئة الإنتاج العالية التي توفرها منصات سمول توك منها مثالية للتطوير السريع والتكراري.

انبثقت لغة سمول توك من برنامج بحثي أوسع نطاقًا ممول من وكالة مشاريع الأبحاث المتقدمة (ARPA)، والذي شكّل في نواحٍ عديدة ملامح عالم الحوسبة الحديث. إلى جانب سمول توك، طوّر باحثو ARPA في ستينيات القرن الماضي نماذج أولية عاملة لأشياء مثل النص التشعبي ، وواجهات المستخدم الرسومية، والوسائط المتعددة ، والفأرة، والتواجد عن بُعد ، والإنترنت. [ 24 ] [ 25 ] كما وصف آلان كاي (أحد مخترعي سمول توك) جهازًا لوحيًا أطلق عليه اسم داينابوك ، وهو يشبه أجهزة الكمبيوتر اللوحية الحديثة. [ 4 ]

كانت بيئات لغة Smalltalk في كثير من الأحيان السبّاقة في تطوير ما يُعرف اليوم بأنماط تصميم البرمجيات الموجهة للكائنات. ومن أكثرها شيوعًا نمط MVC ( نموذج-عرض-متحكم ) لتصميم واجهات المستخدم . يُمكّن نمط MVC المطورين من الحصول على رؤى متسقة متعددة لنفس البيانات الأساسية. وهو مثالي لبيئات تطوير البرمجيات، حيث توجد رؤى متنوعة (مثل: علاقة الكيان، وتدفق البيانات، ونموذج الكائنات، إلخ) لنفس المواصفات الأساسية. كما أنه مناسب للمحاكاة أو الألعاب حيث يمكن عرض النموذج الأساسي من زوايا ومستويات تجريد مختلفة. [ 26 ]

إلى جانب نمط MVC، كان للغة Smalltalk وبيئتها تأثير كبير في تاريخ واجهة المستخدم الرسومية (GUI) وواجهة المستخدم WYSIWYG ، ومحررات الخطوط، واستعارات سطح المكتب لتصميم واجهة المستخدم. وقد أرست أدوات تصحيح الأخطاء وفحص الكائنات المدمجة القوية التي أتت مع بيئات Smalltalk معيارًا لجميع بيئات التطوير المتكاملة ، بدءًا من بيئات Lisp Machine التي ظهرت لاحقًا. [ 27 ]

تستخدم لغة سمول توك العديد من عوامل تصفية المجموعات التي تتناغم مع اللاحقة "-ect"، مثل collect: و select: و inject:into:، وما إلى ذلك. وقد استُلهم هذا من سطر من مونولوج آرلو غوثري عام 1967 بعنوان " مذبحة مطعم أليس "، حيث خضع غوثري لسلسلة من عمليات "الحقن والفحص والكشف والعدوى والإهمال والاختيار". [ 28 ]

البرمجة الكائنية التوجه

Smalltalk-80: اللغة وتطبيقها ، والمعروف أيضًا باسم "الكتاب الأزرق"، وهو كتاب أصلي عن اللغة

كما هو الحال في لغات البرمجة الكائنية الأخرى، فإن المفهوم الأساسي في لغة Smalltalk-80 (وليس في Smalltalk-72) هو مفهوم الكائن . الكائن هو دائمًا نسخة من فئة . الفئات هي بمثابة "مخططات" تصف خصائص وسلوك نسخها. على سبيل المثال، قد تُعلن فئة نافذة واجهة المستخدم الرسومية أن النوافذ لها خصائص مثل التسمية، والموضع، وما إذا كانت النافذة مرئية أم لا. قد تُعلن الفئة أيضًا أن النسخ تدعم عمليات مثل الفتح والإغلاق والتحريك والإخفاء. لكل كائن نافذة قيمه الخاصة لهذه الخصائص، وكل منها قادر على تنفيذ العمليات المُحددة بواسطة فئته.

يمكن لكائن Smalltalk القيام بثلاثة أشياء بالضبط:

  1. الاحتفاظ بالحالة (مراجع إلى كائنات أخرى).
  2. استقبل رسالة من نفسه أو من كائن آخر.
  3. أثناء معالجة رسالة ما، يتم إرسال رسائل إلى نفسها أو إلى كائن آخر.

تظل حالة الكائن خاصة به. ولا يمكن للكائنات الأخرى الاستعلام عن هذه الحالة أو تغييرها إلا بإرسال طلبات (رسائل) إليه. ويمكن إرسال أي رسالة إلى أي كائن، وعند استلامها، يحدد المُستقبِل مدى ملاءمتها. فإذا لم يفهم الكائن الرسالة، تُرسل الآلة الافتراضية رسالة doesNotUnderstand: مع الرسالة الأصلية كوسيط. ويُثير التنفيذ الافتراضي لـ doesNotUnderstand: استثناءً، إذا لم يتم التقاطه، يفتح مُصحِّح أخطاء النظام . وقد علّق آلان كاي قائلاً إنه على الرغم من الاهتمام المُوجّه للكائنات، فإن المراسلة هي المفهوم الأهم في لغة Smalltalk: "الفكرة الأساسية هي 'المراسلة'، وهذا ما يدور حوله جوهر لغة Smalltalk/Squeak (وهو أمر لم يكتمل تمامًا خلال مرحلة Xerox PARC)." [ 29 ]

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

سمول توك هي لغة برمجة كائنية التوجه "بحتة"، أي أنها، على عكس لغتي C ++ وجافا ، لا تحتوي على أنواع بيانات أولية. تُمثَّل جميع القيم ككائنات، وتُجرى العمليات الحسابية على الأعداد الصحيحة باستخدام إرسال الرسائل تمامًا كما هو الحال مع أي كائن آخر. في سمول توك، تُعتبر أنواع البيانات مثل الأعداد الصحيحة والقيم المنطقية والأحرف كائنات أيضًا، بمعنى أنها نسخ من فئات مُناظرة، وتُستدعى العمليات عليها عن طريق إرسال الرسائل. ولتحقيق الكفاءة والعمومية، تُنفَّذ الأعداد الصحيحة بواسطة أربع فئات: Integer، وهي الفئة الأساسية المجردة لجميع الأعداد الصحيحة؛ وSmallInteger، التي تتناسب نسخها مع كلمة الآلة ، على سبيل المثال، لها نطاق إشارة 61 بت في تطبيق 64 بت؛ وLargePositiveInteger وLargeNegativeInteger، وهما متجهان من البايتات. ونتيجة لذلك، تستطيع سمول توك حساب مضروب 52 لإنتاج80 658 175 170 943 878 571 660 636 856 403 766 975 289 505 440 883 277 824 000 000 000 000. يُعدّ الانتقال من الأعداد الصحيحة الصغيرة إلى الكبيرة سلسًا للمبرمج؛ فالمتغيرات لا تتطلب تعريفات أنواع. هذا ما يجعل النظام موجزًا ​​ومرنًا في آنٍ واحد. يستطيع المبرمج تغيير أو توسيع (عن طريق التوريث ) الفئات التي تُنفّذ ما يُعتبر في لغات أخرى قيمًا أولية، بحيث يُمكن تعريف سلوك جديد لنسخها - على سبيل المثال، لتنفيذ هياكل تحكم جديدة - أو حتى تغيير سلوكها الحالي. تتلخص هذه الحقيقة في العبارة الشائعة "في سمول توك، كل شيء كائن"، والتي يُمكن التعبير عنها بدقة أكبر بـ "جميع القيم كائنات"، لأن المتغيرات ليست كذلك.

بما أن جميع القيم عبارة عن كائنات، فإن الأصناف هي أيضًا كائنات. كل صنف هو نسخة من الصنف الفائق (metaclass) الخاص به. والأصناف الفائقة بدورها هي كائنات، وجميعها نسخ من صنف يُسمى Metaclass. تحتوي الأصناف على قواميس طرق تربط المحددات (ما يُعادل أسماء إجراءات الدوال في لغات أخرى) بكائنات الطرق، وهي كائنات تُنفذ لتقييم الرسائل. ترث الأصناف من أصناف أخرى، مع وجود Object أو ProtoObject في جذر التسلسل الهرمي للأصناف. يتضمن إرسال رسالة إلى كائن، على المستوى الأكثر تجريدًا، جلب صنف المُستقبِل (الكائن المُرسَل إليه الرسالة) والبحث عن مُحدد الرسالة في قاموس طرق الصنف، متبوعًا بالصنف الفائق وهكذا حتى يتم العثور على الطريقة أو إرسال doesNotUnderstand. تستخدم الآلات الافتراضية في Smalltalk تقنيات متنوعة لتسريع البحث عن الرسائل، بحيث يوفر النظام آلية ربط رسائل بسيطة ومتسقة وكفاءة عالية. كتل التعليمات البرمجية - وهي طريقة Smalltalk للتعبير عن الدوال المجهولة - هي أيضًا كائنات. [ 30 ] لديهم بنية نحوية خفيفة للغاية ويستخدمون في جميع أنحاء النظام لتنفيذ هياكل التحكم، وخاصة بالنسبة لتسلسل المجموعات.

انعكاس

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

نظام Smalltalk-80 نظام انعكاسي بالكامل، يوفر انعكاسًا هيكليًا وحسابيًا. يتميز Smalltalk ببنية انعكاسية هيكلية، حيث تُحدد هذه البنية بواسطة كائنات Smalltalk-80. تُعدّ الفئات والأساليب التي تُعرّف النظام أيضًا كائنات، وهي جزء لا يتجزأ من النظام الذي تُساهم في تعريفه. يقوم مُصرّف Smalltalk، المكتوب بلغة Smalltalk نفسها، والموجود جنبًا إلى جنب مع جميع التعليمات البرمجية الأخرى في النظام، بتحويل التعليمات البرمجية المصدرية النصية إلى كائنات أساليب، عادةً ما تكون نسخًا من كائنات CompiledMethod. تُضاف هذه الكائنات إلى الفئات عن طريق تخزينها في قاموس أساليب الفئة. يمكن لجزء التسلسل الهرمي للفئات الذي يُعرّف الفئات إضافة فئات جديدة إلى النظام. يتم توسيع النظام عن طريق تشغيل تعليمات Smalltalk-80 البرمجية التي تُنشئ أو تُعرّف الفئات والأساليب. وبهذه الطريقة، يُعدّ نظام Smalltalk-80 نظامًا "حيًا"، يتمتع بالقدرة على توسيع نفسه أثناء التشغيل. بل يمكن توسيع المُصرّف أثناء التشغيل أيضًا؛ في الواقع، هذه هي الطريقة التي يتم بها تطوير المُصرّف وصيانته.

بما أن الفئات عبارة عن كائنات، فيمكن طرح أسئلة عليها مثل "ما هي الطرق التي تُنفذها؟" أو "ما هي الحقول/الفتحات/متغيرات النسخة التي تُعرّفها؟". وبالتالي، يمكن فحص الكائنات ونسخها وتسلسلها (أو إلغاء تسلسلها ) وما إلى ذلك بسهولة باستخدام رمز عام ينطبق على أي كائن في النظام. [ 31 ]

توفر لغة Smalltalk-80 أيضًا خاصية الانعكاس الحسابي، أي القدرة على مراقبة الحالة الحسابية للنظام. في اللغات المشتقة من Smalltalk-80 الأصلية، يمكن الوصول إلى التنشيط الحالي لدالة ما ككائن يُسمى عبر متغير زائف (أحد الكلمات الست المحجوزة)، thisContextوهو ما يُقابل إطار مكدس في تطبيقات اللغات التقليدية، ويُسمى "سياقًا". يتم إرسال الرسائل ضمن سياق معين، ولتقييم الرسالة، يُنشأ سياق آخر، حيث يكون السياق الأول هو مُرسِل السياق الأول. وبهذه الطريقة، يكون المكدس عبارة عن قائمة مرتبطة من كائنات السياق، ويُعتبر المُصحِّح بمثابة مُفتِّش لهذا المكدس المعقد . من خلال إرسال الرسائل إلى thisContextدالة ما، يمكن للتنشيط طرح أسئلة مثل "من أرسل هذه الرسالة إليّ؟". تُتيح هذه الإمكانيات تنفيذ الروتينات الفرعية أو التراجع الشبيه بلغة Prolog دون تعديل الآلة الافتراضية. ويتم تنفيذ نظام الاستثناءات باستخدام هذه الإمكانية. يُعدّ إطار عمل Seaside أحد أبرز استخدامات هذه التقنية، إذ يُريح المبرمج من عناء التعامل مع تعقيدات زر الرجوع في متصفح الويب، وذلك بتخزين مسارات لكل صفحة مُعدّلة والتنقل بينها أثناء تصفح المستخدم للموقع. وبذلك، يُمكن برمجة خادم الويب باستخدام Seaside بأسلوب برمجة أكثر تقليدية. [ 32 ] وكما هو الحال مع إرسال الرسائل، تُحسّن الآلات الافتراضية في Smalltalk-80 استخدام السياقات داخليًا، مما يُوفر مرونةً ووضوحًا يُضاهي بنية المكدس المعقدة (spaghetti stack) دون معظم تكاليفها. ببساطة، تُنشأ كائنات السياق عند الحاجة فقط، على سبيل المثال عند إرسال رسالة إلى المتغير thisContext.

من الأمثلة على كيفية استخدام Smalltalk لتقنية الانعكاس، آلية معالجة الأخطاء. فعندما يُرسل كائنٌ ما رسالةً لا يدعمها، تُرسل الآلة الافتراضية الرسالة إلى الكائن doesNotUnderstand:مع تجسيدٍ لها كوسيط. Messageتحتوي الرسالة (كائنٌ آخر، نسخةٌ من ) على مُحدِّد الرسالة وقائمة Arrayوسائطها. في نظام Smalltalk التفاعلي، يكون التنفيذ الافتراضي لـ ) doesNotUnderstand:هو فتح نافذة خطأ (مُنبِّه) تُبلغ المستخدم بالخطأ. من خلال هذه الخاصية، بالإضافة إلى إمكانيات الانعكاس، يستطيع المستخدم فحص السياق الذي حدث فيه الخطأ، وإعادة تعريف الكود المُسبِّب للخطأ، ومتابعة العمل، كل ذلك داخل النظام، باستخدام إمكانيات الانعكاس في Smalltalk-80. [ 33 ] [ 34 ]

بإنشاء فئة تفهم (تُنفذ) فقط الدالة doesNotUnderstand:، يُمكن إنشاء نسخة قادرة على اعتراض أي رسالة مُرسلة إليها عبر هذه الدالة. تُسمى هذه النسخ بالوكلاء الشفافين. [ 35 ] يُمكن استخدام هذه الوكلاء لتنفيذ العديد من الميزات، مثل Smalltalk الموزع حيث يتم تبادل الرسائل بين أنظمة Smalltalk متعددة، وواجهات قواعد البيانات حيث يتم استخراج الكائنات من قاعدة البيانات بشفافية، والوعود ، وما إلى ذلك. وقد أثر تصميم Smalltalk الموزع على أنظمة مثل CORBA .

بناء الجملة

تتميز بنية لغة Smalltalk-80 بالبساطة الشديدة، إذ تعتمد على عدد قليل من التصريحات. في الواقع، لا يوجد سوى خمس "كلمات مفتاحية" في Smalltalk، وهي أسماء لمتغيرات زائفة ذات معنى خاص: true`<message> false`، و`<assign> nil` self، و`<return>` ، و` super<return>`. تُسمى هذه المتغيرات الزائفة بشكل صحيح ، وهي مُعرّفات تتبع قواعد مُعرّفات المتغيرات، ولكنها تُشير إلى روابط لا يُمكن للمبرمج تغييرها. تُعد المتغيرات الزائفة ` <message> ` و` <return>` و` <return>` كائنات أحادية النسخة. تشير `<message>` و`<return>` إلى مُستقبِل الرسالة داخل دالة يتم تفعيلها استجابةً لتلك الرسالة، ولكن يتم البحث عن عمليات الإرسال إلى `<return>` في الفئة الأصلية للفئة المُعرّفة للدالة بدلاً من فئة المُستقبِل، مما يسمح للدوال في الفئات الفرعية باستدعاء الدوال التي تحمل نفس الاسم في الفئات الأصلية. البنى اللغوية المُدمجة الوحيدة هي إرسال الرسائل، والتخصيص، وإرجاع الدوال، والصيغة الحرفية لبعض الكائنات، بما في ذلك الكتل الحرفية (الإغلاقات). انطلاقًا من كونها لغةً للأطفال من جميع الأعمار، تستخدم لغة Smalltalk القياسية علامات الترقيم بطريقة أقرب إلى اللغة الإنجليزية منها إلى لغات البرمجة الشائعة. أما بقية اللغة، بما في ذلك هياكل التحكم للتقييم الشرطي والتكرار، فتُنفَّذ بالاعتماد على البنى المدمجة في مكتبة فئات Smalltalk القياسية (لأسباب تتعلق بالأداء، قد تتعرف بعض التطبيقات على بعض هذه الرسائل وتتعامل معها كرسائل خاصة؛ إلا أن هذا مجرد تحسين وليس جزءًا من بنية اللغة). قد يكون المتغير الوهمي قد أُضيف في بعض التطبيقات، ولكنه غير مذكور في Smalltalk-80 أو معيار ANSI. تُجسِّد المتغيرات الوهمية عمومًا الوسائط المُمرَّرة إلى الرسائل أو الكتل، ومحتوى هذه المتغيرات للقراءة فقط ولا يمكن تعديله.truefalsenilselfsupersuperthisContext

ربما يكون المثل القائل بأن "بنية لغة سمول توك تناسب بطاقة بريدية " قد نشأ في التصور الأصلي للغة من قبل آلان كاي، كما رواه في كل محاضرة من عشرات أو مئات المحاضرات العامة، المرجع السابق ، أو ربما يشير إلى مقتطف من التعليمات البرمجية من قبل رالف جونسون ، يوضح جميع العناصر النحوية القياسية الأساسية للأساليب: [ 36 ] [ 37 ]

مثال مع رقم: س | ص | صحيح & خطأ ليس & ( فارغ فارغ ) إذا كان خطأ: [ توقف ذاتي ] . ص := حجم ذاتي + حجم فائق . #( $a #a 'a' 1 1.0 ) افعل: [ : كل | سجل عرض: ( اسم فئة كل ) ؛ عرض: ' ' ] . ^ س < ص

حرفيًا

توضح الأمثلة التالية أكثر الكائنات شيوعًا التي يمكن كتابتها كقيم حرفية في طرق Smalltalk-80.

توضح القائمة التالية بعض الاحتمالات المتعلقة بالأرقام.

42 - 42 123 . 45 1 . 2345e2 2r10010010 16 rA000

آخر خانتين هما عدد ثنائي وعدد سداسي عشري على التوالي. الرقم الذي يسبق حرف "r" هو الأساس . لا يشترط أن يكون الأساس قوة للعدد اثنين؛ على سبيل المثال، 36rSMALLTALK هو عدد صحيح يساوي 80738163270632 بالنظام العشري.

تُكتب الأحرف بوضع علامة الدولار قبلها:

أ

السلاسل النصية هي عبارة عن تسلسلات من الأحرف محاطة بعلامات اقتباس مفردة:

'مرحبا بالعالم!'

لإدراج علامة اقتباس في سلسلة نصية، قم بإلغاء تأثيرها باستخدام علامة اقتباس ثانية:

قلت لهم: "مرحباً أيها العالم!"

لا تحتاج علامات الاقتباس المزدوجة إلى الهروب، لأن علامات الاقتباس المفردة تحدد السلسلة النصية:

قلت لهم: "مرحباً بالعالم!"

يمكن أن يكون سلسلتان متطابقتان (تُعتبر السلاسل متطابقة إذا احتوت على جميع الأحرف نفسها) كائنين مختلفين موجودين في مواقع مختلفة في الذاكرة. بالإضافة إلى السلاسل، تحتوي لغة سمول توك على فئة من كائنات تسلسل الأحرف تُسمى Symbol . يُضمن أن تكون الرموز فريدة - فلا يمكن أن يكون هناك رمزان متطابقان يمثلان كائنين مختلفين. لهذا السبب، تُعد مقارنة الرموز عملية سريعة جدًا، وغالبًا ما تُستخدم في عناصر اللغة مثل مُحدِّدات الرسائل (انظر أدناه).

تُكتب الرموز على شكل # متبوعة بسلسلة نصية حرفية . على سبيل المثال:

# 'foo'

إذا لم يتضمن التسلسل مسافات بيضاء أو علامات ترقيم، فيمكن كتابته أيضًا على النحو التالي:

#فو

المصفوفات:

ب( 1 2 3 4 )

يُعرّف مصفوفة من أربعة أعداد صحيحة.

#(( 1 2 3 4 ) [ 1 2 3 4 ] 'four' 4.0 #four)

يُعرّف مصفوفة من سبعة عناصر يكون العنصر الأول فيها عبارة عن مصفوفة حرفية، والعنصر الثاني عبارة عن مصفوفة بايت، والعنصر الثالث هو السلسلة 'four'، وهكذا.

تدعم العديد من التطبيقات الصيغة الحرفية التالية لمصفوفات البايت:

آخر [ 1 2 3 4 ] 

يُعرّف مصفوفة بايتات من أربعة أعداد صحيحة.

وأخيرًا وليس آخرًا، الكتل ( القيم الحرفية للدوال المجهولة )

[... بعض أكواد لغة سمول توك ... ] 

تأخذ الدالة التالية وسيطين وتقارن بين أي كائنين يمكنهما فهم "أقل من"، على سبيل المثال الأرقام والسلاسل النصية.

[ : أ : ب | أ < ب ] 

سيتم شرح الكتل بالتفصيل لاحقًا في النص.

تُنفذ العديد من لهجات Smalltalk صيغًا إضافية لكائنات أخرى، لكن الصيغ المذكورة أعلاه هي الصيغ الأساسية التي تدعمها جميع اللهجات.

تعريف المتغيرات

يُستخدم نوعان شائعان من المتغيرات في لغة سمول توك: متغيرات النسخة والمتغيرات المؤقتة. أما المتغيرات الأخرى والمصطلحات ذات الصلة فتعتمد على التطبيق المُستخدم. على سبيل المثال، يستخدم VisualWorks متغيرات مشتركة بين الفئات ومتغيرات مشتركة بين مساحات الأسماء، بينما يستخدم Squeak والعديد من التطبيقات الأخرى متغيرات الفئات ومتغيرات المجمعات والمتغيرات العامة.

تُعرَّف المتغيرات المؤقتة في لغة سمول توك بأنها متغيرات تُصرَّح عنها داخل دالة (انظر أدناه). تُصرَّح عنها في بداية الدالة بأسماء مفصولة بمسافات ومحاطة بخطوط عمودية. على سبيل المثال:

| فهرس |

يُعلن عن متغير مؤقت باسم index يحتوي مبدئيًا على القيمة nil.

يمكن تعريف متغيرات متعددة ضمن مجموعة واحدة من الأشرطة:

| فهرس حروف العلة |

يُعلن عن متغيرين: index و vowels. جميع المتغيرات مُهيأة. تُهيأ جميع المتغيرات إلى nil باستثناء المتغيرات المفهرسة للسلاسل النصية، والتي تُهيأ إلى الحرف null، أو مصفوفات البايت التي تُهيأ إلى 0.

تكليف

يتم إسناد قيمة إلى متغير باستخدام :=الصيغة ' '. لذا:

حروف العلة := 'aeiou'

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

في صورة بارك بليس الأصلية، ظهر رمز الشرطة السفلية ⟨_⟩ على شكل سهم متجه لليسار ⟨←⟩ (كما في نسخة 1963 من ترميز ASCII ). في الأصل، كان Smalltalk يقبل هذا السهم المتجه لليسار كعامل الإسناد الوحيد. لا تزال بعض الأكواد الحديثة تحتوي على ما يبدو أنه شرطات سفلية تعمل كعوامل إسناد، مما يشير إلى هذا الاستخدام الأصلي. تقبل معظم تطبيقات Smalltalk الحديثة إما الشرطة السفلية أو صيغة النقطتين المتساويتين.

رسائل

تُعدّ الرسالة البنية اللغوية الأساسية في لغة سمول توك. حتى هياكل التحكم تُنفّذ باستخدام إرسال الرسائل . تعتمد سمول توك افتراضيًا استراتيجية الإرسال الديناميكي والإرسال الأحادي (على عكس الإرسال المتعدد المستخدم في بعض لغات البرمجة الكائنية الأخرى). هناك ثلاثة أنواع من إرسال الرسائل: الرسائل الأحادية، التي تحتوي على كلمة مفتاحية واحدة، مثل `<t>` classو` size<t>`؛ والرسائل الثنائية، التي تُستخدم على سبيل المثال في العمليات الحسابية، مثل `<t> ` و`<t>`؛ ورسائل الكلمات المفتاحية، حيث تسبق كل وسيطة في الرسالة كلمة مفتاحية متبوعة بنقطتين رأسيتين، بحيث تُرسل الرسالة `<t>` إلى `<t>` مع الوسيطتين `<t>` و`<t >`. تتمتع الرسائل الأحادية بأولوية أعلى من الرسائل الثنائية، التي تتمتع بدورها بأولوية أعلى من رسائل الكلمات المفتاحية، ويكون التقييم من اليسار إلى اليمين فقط. لا توجد أسبقية حسابية، فقيمة `<t>` تُقيّم إلى 9، وليس إلى 7.a<ba~=babetween:band:c#between:and:abc1+2*3

يرسل المثال التالي الرسالة "المضروب" إلى الرقم 42:

مضروب 42

في هذه الحالة، يُطلق على العدد 42 اسم مُستقبِل الرسالة ، بينما يُطلق على "المضروب" اسم مُحدِّد الرسالة . يستجيب المُستقبِل للرسالة بإرجاع قيمة (يُفترض في هذه الحالة مضروب العدد 42). من بين أمور أخرى، يُمكن إسناد نتيجة الرسالة إلى مُتغير.

عدد كبير جدًا := مضروب 42

تُسمى كلمة "المضروب" أعلاه رسالة أحادية، لأنها تتضمن كائنًا واحدًا فقط، وهو المُستقبِل. ويمكن للرسائل أن تحمل كائنات إضافية كوسائط ، كما يلي:

2 رفع إلى: 4

في هذا التعبير، يوجد عنصران: 2 كمستقبل و4 كوسيط للرسالة. من المفترض أن تكون نتيجة الرسالة، أو الإجابة في لغة سمول توك، هي 16. تُسمى هذه الرسائل برسائل الكلمات المفتاحية . يمكن أن تحتوي الرسالة على وسائط إضافية، باستخدام الصيغة التالية:

'hello world' indexOf: $o startingAt: 6

والذي يجيب على فهرس الحرف 'o' في سلسلة المستلم، بدءًا من الفهرس 6. محدد هذه الرسالة هو "indexOf:startingAt:"، ويتكون من جزأين، أو كلمتين مفتاحيتين .

يهدف هذا التداخل بين الكلمات المفتاحية والوسائط إلى تحسين قابلية قراءة الكود، حيث تُشرح الوسائط من خلال الكلمات المفتاحية التي تسبقها. على سبيل المثال، يمكن كتابة تعبير لإنشاء مستطيل باستخدام صيغة مشابهة لـ C++ أو Java على النحو التالي:

مستطيل جديد ( 100 ، 200 

من غير الواضح أيّ وسيط هو أيّ وسيط. على النقيض من ذلك، في لغة سمول توك، يُكتب هذا الكود على النحو التالي:

عرض المستطيل : 100، ارتفاعه: 200

المتلقي في هذه الحالة هو "Rectangle"، وهو فئة، وستكون الإجابة عبارة عن نسخة جديدة من الفئة بالعرض والارتفاع المحددين.

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

3 + 4

والذي يرسل الرسالة "+" إلى المُستقبِل 3 مع تمرير الرقم 4 كوسيط (وستكون الإجابة 7). وبالمثل،

3 > 4

الرسالة ">" تُرسل إلى 3 مع الوسيط 4 (والذي ستكون إجابته خاطئة). للمبرمج حرية تعريف مُحدِّدات ثنائية جديدة، تمامًا كما له حرية تعريف رسائل أحادية ورسائل كلمات مفتاحية جديدة.

لاحظ أن لغة Smalltalk-80 نفسها لا تُشير إلى معنى هذه المعاملات. فنتيجة ما سبق تُحدد فقط بكيفية استجابة مُستقبل الرسالة (في هذه الحالة، كائن رقمي) للرسالتين "+" و ">".

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

تعابير الوجه

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

مضروب 3 + مضروب 4 بين: 10 و: 100

يتم تقييمها على النحو التالي:

  1. يستقبل الرقم 3 رسالة "المضروب" ويجيب بالرقم 6
  2. يستقبل الرقم 4 الرسالة "المضروب" ويجيب بـ 24
  3. يستقبل الرقم 6 الرسالة "+" مع القيمة 24 كمعامل، ويجيب برقم 30.
  4. يستقبل الرقم 30 الرسالة "between:and:" مع القيمتين 10 و100 كمعاملات، ويجيب بـ "صحيح".

إن إجابة الرسالة الأخيرة المرسلة هي نتيجة التعبير بأكمله.

يمكن استخدام الأقواس لتغيير ترتيب التقييم عند الحاجة. على سبيل المثال،

مضروب ( 3 + 4 ) مضروب بين: 10 و: 100

سيغير ذلك المعنى بحيث تحسب العبارة أولاً "3 مضروب + 4" مما ينتج عنه 10. ثم يتلقى هذا الرقم 10 رسالة "المضروب" الثانية، مما ينتج عنه 3628800. ثم يتلقى الرقم 3628800 رسالة "بين: و:"، والتي تجيب بـ "خطأ".

لأن معنى الرسائل الثنائية غير مُشفّر في صيغة Smalltalk-80، تُعتبر جميعها متساوية في الأولوية ويتم تقييمها ببساطة من اليسار إلى اليمين. ولهذا السبب، قد يختلف معنى تعابير Smalltalk التي تستخدم الرسائل الثنائية عن تفسيرها "التقليدي".

3 + 4 * 5

يتم تقييمها على أنها "(3 + 4) * 5"، مما ينتج عنه 35. للحصول على الإجابة المتوقعة وهي 23، يجب استخدام الأقواس لتحديد ترتيب العمليات بشكل صريح:

3 + ( 4 * 5 ) 

يمكن ربط الرسائل الأحادية عن طريق كتابتها واحدة تلو الأخرى:

3 مضروب مضروب لوغاريتم

والذي يرسل "المضروب" إلى 3، ثم "المضروب" إلى النتيجة (6)، ثم "اللوغاريتم" إلى النتيجة (720)، مما ينتج عنه النتيجة 2.85733.

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

| نافذة | نافذة := نافذة جديدة . تسمية النافذة : 'مرحباً' . نافذة مفتوحة

إذا تم إرسال سلسلة من الرسائل إلى نفس المُستقبِل كما في المثال أعلاه، فيمكن كتابتها أيضًا على شكل سلسلة متتالية مع فصل الرسائل الفردية بفواصل منقوطة:

نافذة جديدة ، تسمية: 'مرحباً' ؛ فتح

تُغني هذه النسخة المُعدّلة من المثال السابق، والمُصاغة في تعبير واحد، عن الحاجة إلى تخزين النافذة الجديدة في متغير مؤقت. ووفقًا لقواعد الأسبقية المعتادة، تُرسل الرسالة الأحادية "new" أولًا، ثم تُرسل "label:" و"open" إلى مُستقبل "new".

كتل التعليمات البرمجية

يمكن التعبير عن كتلة من التعليمات البرمجية (دالة مجهولة) كقيمة حرفية (وهي كائن، لأن جميع القيم كائنات). ويتم ذلك باستخدام الأقواس المربعة:

[ : params | < message - expressions > ] 

حيث تمثل :params قائمة المعاملات التي يمكن للبرنامج قبولها. وهذا يعني أن كود Smalltalk:

[ : x | x + 1 ] 

يمكن فهم ذلك على النحو التالي:

و(x)=x+1{\displaystyle f(x)=x+1}

أو معبر عنها بمصطلحات لامدا كما يلي:

λx.x+1{\displaystyle \lambda x.x+1}

و

[ : x | x + 1 ] القيمة: 3

يمكن تقييمها على النحو التالي

و(3)=3+1{\displaystyle f(3)=3+1}

أو بلغة لامدا كما يلي:

(λx.x+1)3β3+1{\displaystyle (\lambda x.x+1)\,3{\underset {\beta }{\rightarrow }}3+1}

يمكن للكائن الناتج أن يشكل إغلاقًا : إذ يمكنه الوصول إلى متغيرات نطاقاته المعجمية المحيطة به في أي وقت. والكتل كائنات من الدرجة الأولى .

يمكن تنفيذ الكتل البرمجية عن طريق إرسال رسالة القيمة إليها . توجد صيغ مركبة لتوفير معلمات للكتلة، على سبيل المثال، value:value:و valueWithArguments:.

كان التمثيل الحرفي للكتل ابتكارًا سمح، من جهة، بجعل بعض الشفرات البرمجية أكثر قابلية للقراءة بشكل ملحوظ؛ فقد مكّن من كتابة الخوارزميات التي تتضمن التكرار بطريقة واضحة وموجزة. يمكن كتابة الشفرة التي تُكتب عادةً باستخدام الحلقات في بعض اللغات بإيجاز في لغة سمول توك باستخدام الكتل، وأحيانًا في سطر واحد. ولكن الأهم من ذلك، أن الكتل تسمح بالتعبير عن بنية التحكم باستخدام الرسائل وتعدد الأشكال ، نظرًا لأن الكتل تؤجل الحساب ويمكن استخدام تعدد الأشكال لاختيار البدائل. لذا، تُكتب عبارة if-then-else في سمول توك وتُنفذ على النحو التالي:

expr ifTrue: [ العبارات المراد تقييمها إذا كان expr صحيحًا ] ifFalse: [ العبارات المراد تقييمها إذا لم يكن expr صحيحًا ] 

الأساليب الصحيحة للتقييم

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock ^ قيمة trueAlternativeBlock     

أساليب خاطئة للتقييم

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock ^ قيمة falseAlternativeBlock     
positiveAmounts := allAmounts select: [ : anAmount | anAmount isPositive ] 

يرتبط هذا بالبرمجة الوظيفية ، حيث تُجرّد أنماط الحساب (هنا الاختيار) إلى دوال من الرتبة العليا . على سبيل المثال، تُكافئ الرسالة select: على مجموعة بيانات دالة filter من الرتبة العليا على دالة مناسبة . [ 38 ]

هياكل التحكم

لا تحتوي هياكل التحكم على صيغة خاصة في لغة سمول توك. بل تُنفَّذ كرسائل تُرسَل إلى الكائنات. على سبيل المثال، يُنفَّذ التنفيذ الشرطي بإرسال الرسالة ifTrue: إلى كائن منطقي، مع تمرير كتلة التعليمات البرمجية المراد تنفيذها فقط إذا كانت قيمة الكائن المنطقي المُستقبِل صحيحة. تُنفِّذ كلتا الفئتين الفرعيتين من الكائن المنطقي ifTrue:، حيث تُقيِّم الفئة الفرعية True كتلة التعليمات البرمجية دائمًا، بينما لا تُقيِّمها الفئة الفرعية False أبدًا.

يوضح الكود التالي ذلك:

النتيجة := أ > ب إذا كانت القيمة صحيحة: [ 'أكبر' ] إذا كانت القيمة خاطئة: [ 'أصغر من أو يساوي' ] 

تُستخدم الكتل أيضًا لتنفيذ هياكل تحكم مُعرَّفة من قِبل المستخدم، ومُعدِّدات، وزوار، ومعالجة الاستثناءات ، وسلوك قابل للتوصيل، والعديد من الأنماط الأخرى. على سبيل المثال:

| aString vowels | aString := 'This is a string' . vowels := aString select: [ : aCharacter | aCharacter isVowel ] .

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

يستجيب كائن String للرسالة "select:" بالتكرار عبر عناصره (عن طريق إرسال الرسالة "do:" إلى نفسه)، وتقييم كتلة التحديد ("aBlock") مرة واحدة مع كل حرف تحتويه كوسيط. عند التقييم (عن طريق إرسال الرسالة "value: each")، تُجيب كتلة التحديد (المشار إليها بواسطة المعامل "aBlock"، والمُعرّفة بواسطة الصيغة الحرفية "[:aCharacter | aCharacter isVowel]") بقيمة منطقية، والتي تُرسل بعد ذلك "ifTrue:". إذا كانت القيمة المنطقية هي القيمة true، يُضاف الحرف إلى سلسلة نصية تُعاد. ولأن دالة "select:" مُعرّفة في الفئة المجردة Collection، يُمكن استخدامها أيضًا على النحو التالي:

| rectangles aPoint collisions | rectangles := OrderedCollection with: ( Rectangle left: 0 right: 10 top: 100 bottom: 200 ) with: ( Rectangle left: 10 right: 10 top: 110 bottom: 210 ) . aPoint := Point x: 20 y: 20 . collisions := rectangles select: [ : aRect | aRect containsPoint: aPoint ] .

تستخدم آلية معالجة الاستثناءات الكتل كمعالجات (على غرار معالجة الاستثناءات بأسلوب CLOS):

[ عملية ما ] على: خطأ do: [ : ex | handler - code ex return ] 

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

الصفوف الدراسية

هذا تعريف لفئة الأسهم: [ 39 ]

فئة الكائن الفرعية : #MessagePublisher أسماء متغيرات المثيل: '' أسماء متغيرات الفئة: '' قواميس المجموعة: '' الفئة: 'أمثلة سمول توك'

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

طُرق

عندما يستقبل كائن ما رسالة، يتم استدعاء دالة مطابقة لاسم الرسالة. يحدد الكود التالي دالة النشر، وبالتالي يحدد ما سيحدث عندما يستقبل هذا الكائن رسالة "النشر".

نشر نص الحلقة : "مرحباً بالعالم!"

توضح الطريقة التالية كيفية استقبال وسائط متعددة وإرجاع قيمة:

الضرب الرباعي: i1 و: i2 "تضرب هذه الطريقة العددين المعطاين ببعضهما البعض، ثم تضرب الناتج في 4." | mul | mul := i1 * i2 . ^ mul * 4

اسم الدالة هو #quadMultiply:and:. يتم تحديد القيمة المُعادة باستخدام ^المعامل .

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

إنشاء فئات

الكود التالي:

ناشر الرسائل الجديد

يُنشئ (ويُعيد) نسخة جديدة من فئة MessagePublisher. وعادةً ما يتم تعيين هذه النسخة إلى متغير:

الناشر := ناشر الرسائل الجديد

ومع ذلك، من الممكن أيضاً إرسال رسالة إلى كائن مؤقت ومجهول الهوية:

ناشر الرسائل الجديد

بيئة تطوير متكاملة

يُعدّ نظام Smalltalk من أوائل الأنظمة التي بُنيت على بيئة تطوير متكاملة . يضمّ النظام مجموعة واسعة من الأدوات لدعم تطوير البرمجيات، بالإضافة إلى أنشطة أخرى كالرسومات والموسيقى. كان Smalltalk أول نظام يُطبّق فيه نموذج سطح المكتب الحديث القائم على النوافذ والأيقونات والقوائم والمؤشرات ( WIMP ). مع أن المؤشرات كانت موجودة سابقًا، إلا أن Smalltalk كان أول نظام يُطبّق النوافذ المتداخلة والقوائم المنبثقة. سنستعرض فيما يلي خمسًا من أهم أدوات البرمجة المتاحة. الصور المعروضة للأدوات مأخوذة من نظام Squeak لعام 2024.

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

متصفح

تُنظّم الأنظمة المشتقة من Smalltalk-80 الفئات ضمن "فئات النظام"، مثل Kernel-Numbers` Kernel-Objects<data>` Collections-Abstractو` Collections-Sequenceable<data>` و`<data>`، إلخ. وضمن هذه الفئات، تُنظّم الدوال ضمن فئات مُسمّاة مثل accessing`<data> arithmetic` و` instance creation<data>` و`<data>`، إلخ. ومن هذا المنطلق، يظهر المتصفح الكلاسيكي ذو الأجزاء الخمسة، حيث تحتوي الأجزاء الأربعة في النصف العلوي من النافذة على قائمة فئات النظام من الأعلى إلى اليسار. عند تحديد فئة، تُعرض في النافذة الثانية قائمة الفئات ضمن تلك الفئة. وعند تحديد فئة أخرى، تُعرض في النافذة الثالثة قائمة فئات الرسائل ضمن الفئة المُحددة. وعند تحديد فئة ثالثة، تُعرض في الجزء الأخير مُحدِّدات الدوال ضمن الفئة المُحددة في الفئة المُحددة. عند تحديد أحد المُحدِّدات في الجزء الرابع، يُعرض مصدر تلك الدالة في الجزء الخامس. إذا تم تحديد فئة فقط دون دالة، يعرض الجزء الخامس نموذجًا لتعريف دالة جديدة. أما إذا تم تحديد فئة نظام دون تحديد فئة، فيُعرض نموذج لإنشاء فئة ضمن تلك الفئة. تتيح قوائم منبثقة متنوعة إمكانية الاستعلام عن الأداة، مثل البحث عن فئة بالاسم، أو العثور على جميع مرسلي رسالة محددة، أو جميع منفذي الرسالة، وما إلى ذلك. وبهذه الطريقة، يُعد المتصفح أداة لقراءة التعليمات البرمجية واستكشاف النظام، بالإضافة إلى كونه أداة لكتابة التعليمات البرمجية.

متصفح نظام Squeak على المضاعف المشترك الأصغر للكسور: طريقة

مساحة العمل

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

مساحة العمل

نص

السجل هو مساحة عمل خاصة مرتبطة بالسجل العام. لذا، فإن تقييم الأسباب 80658175170943878571660636856403766975289505440883277824000000000000 متبوعًا بسطر جديد، سيؤدي إلى ظهورها في نافذة السجل. وبالتالي، يُستخدم السجل كمكان لإصدار رسائل التسجيل، على الرغم من أنه يمكن أن يعمل أيضًا كمساحة عمل.Transcriptprint:52factorial;cr;flush

مفتش

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

مُفتش الصرير على نسخة من فئة المستطيل

مُنبّه/مُصحّح الأخطاء

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

يؤدي إرسال الرسالة self haltإلى حدوث استثناء يفتح نافذة إشعار، مما يوفر إمكانية وضع نقطة توقف بسيطة (عادةً ما توفر نقاط التوقف أكثر من مجرد إيقاف التنفيذ، ولكنها كانت أول ميزة من نوعها). كما توفر مساحات العمل مُقيِّم "تصحيح الأخطاء" الذي يفتح مصحح أخطاء على التعبير المحدد عند أول رسالة مُرسلة ضمن هذا التعبير. لذا، 52 factorialيؤدي تحديد "تصحيح الأخطاء" من القائمة المنبثقة إلى فتح مصحح أخطاء مع تحديد "سياق التنفيذ" factorialوتظليل المُحدِّد. يوفر مصحح الأخطاء أزرارًا لتنفيذ "الدخول خطوة بخطوة" و"التجاوز خطوة بخطوة" وما إلى ذلك. وبالتالي، باختيار "الدخول خطوة بخطوة"، يمكن استكشاف عملية التقييم 52 factorial. وبهذه الطريقة، يوفر مصحح الأخطاء مُفتِّشًا للعملية، مما يسمح باستكشاف عملية حسابية متوقفة.

إذا نتج استثناء عن إرسال doesNotUnderstand: أو subclassResponsibility، فسيتضمن المُشعِر زر "إنشاء"، مما يسمح للمبرمج باختيار مكان في التسلسل الهرمي للمُستقبِل لتعريف "مسودة أولية" للدالة المراد تنفيذها. إعادة تعريف دالة في المُصحِّح تُعيد السياق المُحدد إلى أول عبارة (لا يُمكن تعديل الوسائط في Smalltalk، لذا تُعيد هذه العملية حالة التنفيذ إلى بداية الدالة). بهذه الطريقة، يدعم المُصحِّح البرمجة المباشرة، حيث يُعرِّف الدوال أثناء سير العملية الحسابية. هذه طريقة برمجة مُنتجة وممتعة للغاية. كل شيء في النظام في متناول يديك. لديك القدرة الكاملة على استخدام مساحات العمل لتقييم التعبيرات الفرعية، والمتصفح للبحث عن التعليمات البرمجية الداعمة أثناء البرمجة.

مُنبّه صوت الصرير لخطأ #demonstrate:programmingIn: MessageNotUnderstood

يؤدي النقر على زر "التصحيح" إلى فتح نافذة "المُنبِّه" في وضع التصحيح، مما يسمح بفحص مسار الاستدعاءات وتعديلها ومتابعة التنفيذ من أي استدعاء للدالة. في هذه الحالة، أنشأ "المُنبِّه" نموذجًا للدالة المفقودة، والذي يمكن للمبرمج تعديله وتجميعه ثم متابعة الحساب.

برنامج Squeak Debugger يعرض البرمجة المباشرة في برنامج تصحيح الأخطاء

مثال "مرحباً بالعالم"

يُستخدم برنامج "Hello world" في جميع كتب تعليم لغات البرمجة تقريبًا كأول برنامج يُتعلّم لعرض أبسط قواعد اللغة وبيئتها. بالنسبة للغة Smalltalk، كتابة البرنامج في غاية البساطة. في الكود التالي، تُرسَل الرسالة "show:" إلى الكائن "Transcript" مع السلسلة النصية "Hello, world!" كوسيط. يؤدي استدعاء الدالة "show:" إلى عرض أحرف وسيطها (السلسلة النصية "Hello, world!") في نافذة "transcript" (الطرفية).

نص الحلقة : "مرحباً بالعالم! "

لعرض نتائج هذا المثال، يجب فتح نافذة "النسخة النصية".

الاستمرارية القائمة على الصور

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

مع ذلك، لا تُميّز العديد من أنظمة سمول توك بين بيانات البرنامج (الكائنات) والتعليمات البرمجية (الفئات). في الواقع، تُعتبر الفئات كائنات. لذا، تُخزّن معظم أنظمة سمول توك حالة البرنامج كاملةً (بما في ذلك كائنات الفئات وغير الفئات) في ملف صورة . يُمكن تحميل هذه الصورة بواسطة الآلة الافتراضية لسمول توك لاستعادة نظام شبيه بسمول توك إلى حالة سابقة. [ 40 ] استُلهم هذا من لغة FLEX، التي ابتكرها آلان كاي ووصفها في أطروحته لنيل درجة الماجستير. [ 41 ]

تتشابه صور Smalltalk مع ملفات تفريغ الذاكرة الأساسية (القابلة لإعادة التشغيل) ويمكنها توفير نفس وظائف ملفات تفريغ الذاكرة الأساسية، مثل تصحيح الأخطاء المؤجل أو عن بُعد مع إمكانية الوصول الكامل إلى حالة البرنامج وقت حدوث الخطأ. [ 42 ]

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

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

مستوى الوصول

كل شيء في لغة Smalltalk-80، ما لم يتم تخصيصه لتجنب هذه الإمكانية، قابل للتعديل من داخل البرنامج قيد التشغيل. هذا يعني، على سبيل المثال، أنه يمكن تغيير بيئة التطوير المتكاملة (IDE) في نظام قيد التشغيل دون إعادة تشغيله. في بعض التطبيقات، يمكن أيضًا تغيير بنية اللغة أو آلية جمع البيانات المهملة أثناء التشغيل. حتى أن العبارة true become: falseصالحة في Smalltalk، على الرغم من أن تنفيذها غير مستحسن إلا لأغراض العرض التوضيحي (انظر الآلة الافتراضية ، واستمرارية البيانات القائمة على الصور ، والنسخ الاحتياطية ).

مجموعة مُجمّعة في الوقت المناسب

تُترجم برامج Smalltalk عادةً إلى بايت كود ، والذي يُفسَّر بعد ذلك بواسطة آلة افتراضية أو يُترجم ديناميكيًا إلى كود الآلة الأصلي. تُخزَّن نتائج عمليات البحث السابقة عن الرسائل مؤقتًا في كود آلة ذاتي التعديل، مما ينتج عنه عمليات إرسال عالية الأداء تتفوق على استدعاءات الدوال غير المباشرة في استدعاءات الأساليب الافتراضية في لغة C++.

قائمة التطبيقات

أوبن سمول توك

تُعدّ OpenSmalltalk VM ( OS VM ) تطبيقًا عالي الأداء نسبيًا لآلة Smalltalk الافتراضية، والتي بُنيت عليها العديد من لهجات Smalltalk الحديثة مفتوحة المصدر. [ 43 ] [ 44 ] وتستمد OS VM من مترجم Squeak الأصلي Back-to-the-Future [ 45 ] (BTTF) الذي طوّره دان إنجلز، وتيد كايلر، وجون مالوني، والعديد من المساهمين الآخرين. وكما هو الحال مع BTTF VM، تُحوّل OS VM من نظام Smalltalk الذي طُوّرت فيه (باستخدام مجموعة فرعية من Smalltalk تُسمى Slang) إلى شفرة مصدرية بلغة C الأصلية، [ 46 ] والتي تُجمّع بدورها وفقًا لمنصة وبنية محددة للأجهزة، مما يُتيح عمليًا تنفيذ صور Smalltalk عبر منصات متعددة. وتختلف OS VM عن BTTF VM في

  • تقديم مُترجم JIT إلى لغة الآلة الأصلية، بما في ذلك تقنيات تخزين مؤقت متطورة لأساليب لغة الآلة
  • استخدام "ربط السياق بالمكدس" لتقليل النفقات العامة لكائنات السياق بشكل كبير
  • يدعم كلاً من تمثيل كائنات BTTF الأصلي، وSpur، وهو مخطط أكثر كفاءة وأصلي 32 بت و64 بت مع جامع قمامة محسّن بشكل كبير، وتثبيت الكائنات، والتحويل الكسول

اللهجات البارزة للغة Smalltalk المستندة إلى نظام التشغيل VM [ 47 ] هي:

  • Squeak ، وهي لغة Smalltalk الأصلية مفتوحة المصدر التي بُنيت عليها آلة OpenSmalltalk الافتراضية [ 47 ] : 2 ، والمشتقة من Smalltalk-80 v1 من Xerox PARC
  • فارو سمول توك، وهي لغة مفتوحة المصدر ومتعددة المنصات ، مشتقة من سكويك
  • كروكيه ، نسخة موزعة من لغة سمول توك لمشروع كروكيه
  • Cuis Smalltalk مشتق من Squeak

آحرون

انظر أيضاً

مراجع

  1. "مخططات Alto I" (ملف PDF) . Bitsavers . ص  54. تم الاطلاع عليه بتاريخ 21 يوليو 2016 .
  2. "تاريخ الحواسيب والحوسبة، ميلاد الحاسوب الحديث، الحاسوب الشخصي، زيروكس ألتو" . تم الاطلاع عليه بتاريخ 19-04-2016 .
  3. 1 2 3 4 5 6 7 8 كاي، آلان؛ رام، ستيفان (23-07-2003). "رسالة بريد إلكتروني بتاريخ 23-07-2003" . الدكتور آلان كاي يتحدث عن معنى "البرمجة الكائنية التوجه".تم الاطلاع عليه بتاريخ 2009-01-03 .
  4. 1 2 3 4 كاي، آلان. "التاريخ المبكر للغة سمول توك" . مؤرشف من الأصل بتاريخ 30-09-2007 . تم الاطلاع عليه بتاريخ 13-09-2007 .
  5. "معيار ANSI Smalltalk" . Smalltalk.org. 2004. مؤرشف من الأصل بتاريخ 16 فبراير 2006. تم الاطلاع عليه بتاريخ 2 مارس 2021 .
  6. "استطلاع مطوري Stack Overflow لعام 2017" .
  7. "استطلاع مطوري Stack Overflow لعام 2018" .
  8. "الإصدارات" . Smalltalk.org. مؤرشف من الأصل بتاريخ 2015-09-08 . تم الاطلاع عليه بتاريخ 2007-09-13 .
  9. تيسلر، لاري (سبتمبر 1977). دليل لغة نواة سمول توك (ملف PDF) (تقرير). مركز أبحاث زيروكس بالو ألتو. ص 3. تاريخ الاسترجاع: 23 يناير 2026 . 
  10. هيويت، كارل (2010-08-09). "نموذج الفاعل للحوسبة: أنظمة معلومات قوية قابلة للتوسع". arXiv : 1008.1459 [ cs.PL ].
  11. 1 2 3 إنجلز، دانيال (2020). "تطور لغة سمول توك: من سمول توك-72 إلى سكويك" . وقائع مؤتمر ACM للغات البرمجة . 4 : 1-101 . doi : 10.1145/3386335 . S2CID 219603700 . 
  12. "دعوة شركة تيكترونيكس للمؤتمر الدولي الأول لمطوري لغة سمول توك-80" (ملف PDF) . أرشيف وثائق سمول توك لشركة تيكترونيكس . 27 أغسطس 1981.
  13. "قائمة الحضور في المؤتمر الدولي الأول لمطوري لغة Smalltalk-80" (ملف PDF) . أرشيف وثائق Smalltalk لشركة Tektronix . 24 سبتمبر 1981.
  14. "تقديم حديقة حيوانات سمول توك" . CHM . 17 ديسمبر 2020.
  15. "ملاحظات إصدار VI" (ملف PDF) . 20 نوفمبر 1981.
  16. "معيار ANSI Smalltalk" . Smalltalk.org. مؤرشف من الأصل بتاريخ 2015-09-07 . تم الاطلاع عليه بتاريخ 2007-09-13 .
  17. "هوبز" . مؤرشف من الأصل في 19 أبريل 2003.
  18. "التاريخ" . شركة سيجول للبرمجيات. مؤرشف من الأصل بتاريخ 2002-08-06 . تم الاطلاع عليه بتاريخ 2007-09-13 .
  19. "أسئلة وأجوبة حول الانتقال إلى لغة سمول توك في برنامج فيجوال إيدج" .
  20. كانت لغة Simula أيضًا لغة كائنية التوجه وسبقت (وتم الاعتراف بها كتأثير على) Smalltalk ولكنها كانت لغة محاكاة، وليست لغة برمجة للأغراض العامة.
  21. كانون، هوارد. "النكهات: منهج غير هرمي للبرمجة الكائنية التوجه" (ملف PDF) . softwarepreservation.computerhistory.org . تاريخ الاطلاع: 8 فبراير 2026 .
  22. "حول لغة روبي" . ruby-lang.org . تم الاطلاع عليه بتاريخ 17 ديسمبر 2013 .
  23. "من أين أتت إعادة هيكلة الكود؟" . sourcemaking.com . تم الاطلاع عليه بتاريخ 17 ديسمبر 2013 .
  24. "DARPA – ARPA" . livinginternet.com . تم الاطلاع عليه في 16 ديسمبر 2013. لتلبية هذه الحاجة، أنشأت ARPA مكتب IPTO في عام 1962 بتفويض لبناء شبكة حاسوب قابلة للاستمرار لربط أجهزة الحاسوب الرئيسية لوزارة الدفاع في البنتاغون وجبل شايان ومقر قيادة الطيران الاستراتيجي.
  25. "دور إنجلبارت في شبكات الحاسوب المبكرة" . dougengelbart.org . تم الاطلاع عليه بتاريخ 17 ديسمبر 2013 .
  26. كراسنر، جلين؛ بوب، ستيفن (أغسطس-سبتمبر 1988). "دليل استخدام نموذج واجهة المستخدم Model-View-Controller في Smalltalk -80". مجلة البرمجة الكائنية التوجه .
  27. "تأثيرنا" . cincomsmalltalk.com . تم الاطلاع عليه بتاريخ 16 ديسمبر 2013 .
  28. "تم حقنهم، وفحصهم، واكتشاف إصابتهم، وإهمالهم، واختيارهم" . ذا ويكلي سكويك . 29-04-2014 . تم الاسترجاع في 15-04-2024 .
  29. كاي، آلان (10 أكتوبر 1998). "النماذج الأولية مقابل الفئات (بريد إلكتروني على قائمة Squeak)" .
  30. غولدبيرغ، أديل ؛ روبسون، ديفيد (1989). سمول توك - 80 اللغة . أديسون ويسلي. الصفحات 31، 75-89 . ISBN  0-201-13688-0.
  31. كلارك، أ.ن. (18 سبتمبر 1997). "الفئات الوصفية والانعكاس في سمول توك". arXiv : 1804.07272 [ cs.SE ].
  32. ^ دوكاس، ستيفان؛ لينهارد، أدريان. رينجلي، لوكاس. "Seaside - إطار تطبيق الويب لتدفق التحكم المتعدد" (PDF) . scg.unibe.ch . معهد مجموعة تكوين البرمجيات لتكنولوجيا المعلومات والرياضيات بجامعة برن، سويسرا . تم الاسترجاع 16 ديسمبر 2013 .
  33. فوت، برايان؛ جونسون، رالف (1-6 أكتوبر 1989). "ميزات انعكاسية في سمول توك-80" . وقائع مؤتمر حول أنظمة ولغات وتطبيقات البرمجة كائنية التوجه . ص 327-335 . doi : 10.1145/74877.74911 . ISBN  0-89791-333-7. S2CID 14207536 . تم الاسترجاع في 16 ديسمبر 2013 . 
  34. سميث، برايان سي (1982-01-01). "الانعكاس الإجرائي في لغات البرمجة" . تقرير فني من معهد ماساتشوستس للتكنولوجيا (MIT-LCS-TR-272) . تم الاطلاع عليه بتاريخ 16 ديسمبر 2013 .
  35. بيك، ماريانو مارتينيز؛ بوراقادي، نوري؛ دينكر، ماركوس؛ دوكاس، ستيفان؛ فابريس، لوك (23 أغسطس 2011). "الوكلاء الفعالون في سمول توك". وقائع ورشة العمل الدولية حول تقنيات سمول توك . ACM. الصفحات 1-16 . doi : 10.1145/2166929.2166937 . hdl : 20.500.12210/28011 . ISBN  978-1-4503-1050-5.
  36. ^ دوكاس ، ستيفان (2001). "صرير: بناء جملة بسيط / صرير: بناء جملة بسيط!" (بي دي إف) . برمجة! مجلة التنمية . 1 . تم الاسترجاع في 15 يناير 2024 .
  37. دوكاس، ستيفان. "التصميم الموجه للكائنات باستخدام سمول توك - لغة كائنية خالصة وبيئتها" (ملف PDF) . مجموعة تأليف البرمجيات (جامعة برن) . تم الاطلاع عليه بتاريخ 15 يناير 2024 .
  38. غولدبيرغ، أديل ؛ روبسون، ديفيد (1989). سمول توك - 80 اللغة . أديسون ويسلي. ص 17-37 . ISBN  0-201-13688-0.
  39. غولدبيرغ، أديل ؛ روبسون، ديفيد (1989). سمول توك - 80 اللغة . أديسون ويسلي. ص 39-53 . ISBN  0-201-13688-0.
  40. "الاستمرارية القائمة على الصور" . book.seaside.st . تم الاطلاع عليه بتاريخ 17 ديسمبر 2013 .
  41. كاي، ألين (1968). "FLEX - لغة مرنة قابلة للتوسيع" . رسالة ماجستير من جامعة يوتا .
  42. فاولر، مارتن. "صورة الذاكرة" . martinfowler.com . مؤرشف من الأصل بتاريخ 7 أكتوبر 2011. تم الاطلاع عليه بتاريخ 17 ديسمبر 2013 .
  43. "opensmalltalk-vm" ، OpenSmalltalk ، GitHub، 2020-11-03 ، تم الاطلاع عليه بتاريخ 2020-11-08
  44. إليوت ميراندا؛ كليمنت بيرا؛ إليسا غونزاليس بوكس؛ دان إنغالز (2018). عقدان من تطوير آلات سمول توك الافتراضية: تطوير الآلات الافتراضية الحية من خلال أدوات المحاكاة؛ الآلات الافتراضية وتطبيقات اللغة، مؤتمر VMIL 2018، بوسطن، الولايات المتحدة (تقرير). hal.archives-ouvertes.fr. doi : 10.1145/3281287.3281295 . مؤرشف من الأصل بتاريخ 5 نوفمبر 2022.
  45. إنغالز، دان؛ كاهلر، تيد؛ مالوني، جون؛ والاس، سكوت؛ كاي، آلان (1997). "العودة إلى المستقبل: قصة سكويك، لغة سمول توك عملية مكتوبة بذاتها" . إشعارات ACM SIGPLAN . 32 (10). مكتبة ACM الرقمية: 318-326 . doi : 10.1145/263700.263754 .
  46. "عامية" . صرير . تم الاسترجاع في 2020-11-08 .
  47. 1 2 ميراندا، إليوت؛ بيرا، كليمنت؛ غونزاليس بوكس، إليسا؛ دان، إنغالز (8 أكتوبر 2018). "عقدان من تطوير Smalltalk VM: تطوير VM مباشر من خلال أدوات المحاكاة" (PDF) .
  48. "Strongtalk: لغة Smalltalk مفتوحة المصدر عالية الأداء مع نظام أنواع اختياري" . تم الاطلاع عليه بتاريخ 25-11-2021 .

للمزيد من القراءة