محادثة قصيرة

محادثة قصيرة
نموذجموجه نحو الكائنات
صمم بواسطةأديل غولدبرغ ، دان إينغلس ، آلان كاي
المطوربيتر دويتش ، أديل جولدبرج، دان إنجالز، تيد كيهلر ، آلان كاي، ديانا ميري ، سكوت والاس وزيروكس بارك
ظهرت لأول مرة1972 ؛ منذ 52 عامًا (بدأ التطوير عام 1969) ( 1972 )
إصدار مستقر
Smalltalk-80 الإصدار 2 / 1980 ؛ منذ 44 عامًا ( 1980 )
الانضباط في الطباعةالأشياء ، ولكن في بعض التنفيذات، قوية أو ديناميكية
نِطَاقمعجمي (ثابت)
لغة التنفيذمحادثة قصيرة
منصةزيروكس ألتو ( 74181 ) [1] [2]
نظام التشغيلمتعدد المنصات
التنفيذات الرئيسية
أمبر ، دولفين سمول توك ، جيم ستون/إس ، جنو سمول توك ، فارو ، سمول توك/إكس، سكويك ، كويس سمول توك، في إيه سمول توك ، فيجوال وركس
متأثر بـ
Lisp ، [3] Simula ، [3] Euler ، [3] IMP ، [3] Planner ، [3] Logo ، [4] Sketchpad ، [3] ARPAnet ، [3] Burroughs B5000 [3]
متأثر
AppleScript ، Common Lisp Object System ، Dart ، Dylan ، Erlang ، Etoys ، Go ، Groovy ، Io ، Ioke، Java ، Lasso ، Logtalk ، Newspeak ، NewtonScript ، Object REXX ، Objective-C ، PHPPython ، Raku ، Ruby ، Scala ، Scratch ، Self ، Swift
  • محادثة صغيرة في ويكي الكتب

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

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

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

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

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

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

تاريخ

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

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

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

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

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

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

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

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

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

التأثيرات

كانت Smalltalk واحدة من العديد من لغات البرمجة الموجهة للكائنات المستندة إلى Simula . [18] Smalltalk هي أيضًا واحدة من أكثر لغات البرمجة تأثيرًا. [ بحاجة لمصدر ] تأثرت جميع لغات البرمجة الموجهة للكائنات التي جاءت بعد ذلك تقريبًا - Flavors ، [19] CLOS ، Objective-C ، Java ، Python ، Ruby ، [20] والعديد من اللغات الأخرى - بلغة Smalltalk. كانت Smalltalk أيضًا واحدة من أكثر اللغات شيوعًا لأساليب تطوير البرامج الرشيقة ، وتطوير التطبيقات السريع (RAD) أو النماذج الأولية، وأنماط تصميم البرامج . [21] جعلت البيئة عالية الإنتاجية التي توفرها منصات Smalltalk منها مثالية للتطوير السريع والتكراري.

نشأ Smalltalk من برنامج أكبر للأبحاث الممولة من وكالة مشاريع الأبحاث المتقدمة (ARPA) والتي حددت في نواح كثيرة عالم الحوسبة الحديث. بالإضافة إلى Smalltalk، تم تطوير نماذج أولية عاملة لأشياء مثل النص التشعبي وواجهات المستخدم الرسومية والوسائط المتعددة والفأرة والتواجد عن بعد والإنترنت بواسطة باحثي ARPA في الستينيات. [22] [23] كما وصف آلان كاي (أحد مخترعي Smalltalk) جهاز كمبيوتر لوحي أطلق عليه اسم Dynabook والذي يشبه أجهزة الكمبيوتر اللوحية الحديثة مثل iPad. [4]

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

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

يستخدم Smalltalk العديد من الأوامر التي تتناغم مع اللاحقة "-ect". وقد استوحيت هذه الفكرة من سطر من مونولوج " مذبحة مطعم أليس " الذي ألفه أرلو جوثري عام 1967 ، حيث خضع جوثري لسلسلة من "الحقن والتفتيش والكشف والإصابة والإهمال والاختيار". [26]

البرمجة الشيئية

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

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

يمكن لكائن Smalltalk القيام بثلاثة أشياء على وجه التحديد:

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

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

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

Smalltalk هي لغة برمجة "خالصة" موجهة للكائنات، وهذا يعني أنه على عكس C++ و Java ، لا توجد أنواع بدائية. يتم تمثيل جميع القيم ككائنات وتستخدم الحسابات على الأعداد الصحيحة إرسال الرسائل تمامًا مثل أي كائن آخر. في Smalltalk، تعد الأنواع مثل الأعداد الصحيحة والقيم المنطقية والأحرف أيضًا كائنات، بمعنى أنها حالات من الفئات المقابلة، ويتم استدعاء العمليات عليها عن طريق إرسال الرسائل. من أجل الكفاءة والعمومية، يتم تنفيذ الأعداد الصحيحة بواسطة أربع فئات، Integer، وهي الفئة العليا المجردة لجميع الأعداد الصحيحة، SmallInteger، التي تناسب حالاتها كلمة الآلة، على سبيل المثال وجود نطاق موقّع من 61 بت في تنفيذ 64 بت، LargePositiveInteger وLargeNegativeInteger، حيث يكون الأخيران متجهين من البايتات. وبالتالي، يمكن لـ Smalltalk تقييم 52 عاملًا لإنتاج 80658175170943878571660636856403766975289505440883277824000000000000. يكون الانتقال من الأعداد الصحيحة الصغيرة إلى الكبيرة شفافًا للمبرمج؛ ولا تتطلب المتغيرات إعلانات النوع. وهذا يجعل النظام موجزًا ​​ومرنًا. يمكن للمبرمج تغيير أو توسيع (من خلال التصنيف الفرعي ) الفئات التي تنفذ ما قد يكون قيمًا بدائية في لغات أخرى، بحيث يمكن تعريف سلوك جديد لمثيلاتها - على سبيل المثال، لتنفيذ هياكل تحكم جديدة - أو حتى لتغيير سلوكها الحالي. يتم تلخيص هذه الحقيقة في العبارة الشائعة "في Smalltalk كل شيء هو كائن"، والتي قد يتم التعبير عنها بدقة أكبر على أنها "كل القيم كائنات"، حيث أن المتغيرات ليست كذلك.

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

انعكاس

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

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

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

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

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

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

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

بناء الجملة

إن بناء جملة Smalltalk-80 بسيط إلى حد ما، ويعتمد على عدد قليل من الإعلانات والكلمات المحجوزة. في الواقع، تم حجز ست "كلمات رئيسية" فقط في Smalltalk: trueو falseو nilو selfو superو و thisContext. وتُسمى هذه المتغيرات الزائفة بشكل صحيح ، وهي معرفات تتبع قواعد معرفات المتغيرات ولكنها تشير إلى الارتباطات التي لا يمكن للمبرمج تغييرها. والمتغيرات trueالزائفة و falseو و هي حالات مفردة . ويشير و إلى مستقبل الرسالة داخل طريقة يتم تنشيطها استجابةً لتلك الرسالة، ولكن يتم البحث عن sends to في الفئة العليا للفئة التي تحدد الطريقة بدلاً من فئة المستقبل، مما يسمح للطرق في الفئات الفرعية باستدعاء طرق بنفس الاسم في الفئات العليا. يشير إلى سجل التنشيط الحالي. إن بنيات اللغة المضمنة الوحيدة هي إرسال الرسائل والتعيين وإرجاع الطريقة والبنية النحوية الحرفية لبعض الكائنات. منذ نشأتها كلغة للأطفال من جميع الأعمار، تستخدم قواعد لغة Smalltalk القياسية علامات الترقيم بطريقة تشبه اللغة الإنجليزية أكثر من لغات الترميز السائدة. يتم تنفيذ بقية اللغة، بما في ذلك هياكل التحكم للتقييم الشرطي والتكرار، فوق البنيات المضمنة بواسطة مكتبة فئة Smalltalk القياسية. (لأسباب تتعلق بالأداء، قد تتعرف التطبيقات على بعض هذه الرسائل وتتعامل معها على أنها خاصة؛ ومع ذلك، فهذا مجرد تحسين ولا يتم ترميزه في قواعد اللغة.) nilselfsupersuperthisContext

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

exampleWithNumber:  x 
    | y | 
    true  &  false  not  & ( nil  isNil ) ifFalse: [ self  halt ] . 
    y  :=  self  size  +  super  size . 
    #( $a  #a  'a'  1  1.0 ) 
        do: [ : each  | 
            Transcript  show: ( each  class  name ) ; 
                       show:  ' ' ] . 
    ^ x  <  y

حرفية

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

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

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

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

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

أ

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

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

لتضمين علامة اقتباس في سلسلة، قم بإفلاتها باستخدام علامة اقتباس ثانية:

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

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

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

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

تتم كتابة الرموز على هيئة # متبوعة بسلسلة حرفية . على سبيل المثال:

# 'فو'

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

#فو

المصفوفات:

#( 1  2  3  4 )

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

#(( 1  2  3  4 )  [ 1  2  3  4 ]  'أربعة'  4.0  #أربعة)

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

تدعم العديد من التنفيذات بناء الجملة الحرفي التالي لـ ByteArrays:

# [ 1  2  3  4 ]

يعرف ByteArray مكون من أربعة أعداد صحيحة.

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

[... بعض  أكواد Smalltalk  ... ]

يتطلب ما يلي وسيطتين ويقارن بين أي كائنين يمكنهما فهم "أقل من"، على سبيل المثال، الأرقام والسلاسل

[ : أ  : ب |  أ  <  ب ]

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

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

إعلانات المتغيرات

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

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

| الفهرس |

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

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

| حروف العلة المؤشرية |

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

تكليف

يتم تعيين قيمة للمتغير من خلال :=بناء الجملة ' '. لذا:

الحروف المتحركة  :=  'aeiou'

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

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

رسائل

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

يرسل المثال التالي الرسالة "factorial" إلى الرقم 42:

42  عاملي

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

aRatherBigNumber  :=  42  عاملي

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

2  مرفوعة إلى:  4

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

'مرحبا بالعالم'  indexOf:  $o  startingAt:  6

الذي يجيب على مؤشر الحرف 'o' في سلسلة المستقبل، ويبدأ البحث من المؤشر 6. محدد هذه الرسالة هو "indexOf:startingAt:"، ويتكون من قطعتين أو كلمات رئيسية .

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

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

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

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

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

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

3  +  4

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

3  >  4

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

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

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

التعبيرات

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

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

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

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

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

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

( 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 هي قائمة المعلمات التي يمكن للكود أن يأخذها. وهذا يعني أن كود Smalltalk:

[ : س  |  س  +  1 ]

يمكن فهمها على أنها:

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

و

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

يمكن تقييمها على أنها

أو بعبارات لامدا على النحو التالي:

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

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

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

expr  ifTrue: [ عبارات  لتقييم  ما إذا كان expr ] ifFalse : [  عبارات لتقييم ما إذا لم يكن expr ]
      

طرق التقييم الصحيحة

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

طرق خاطئة للتقييم

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

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

هياكل الرقابة

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

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

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

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

| aString أحرف العلة | 
aString  :=  'هذه سلسلة' . 
أحرف العلة  :=  aString  select: [ : aCharacter  |  aCharacter  isVowel ] .

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

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

| مستطيلات aPoint تصادمات | 
مستطيلات  :=  OrderedCollection 
  مع: ( مستطيل  يسار:  0  يمين:  10  أعلى:  100  أسفل:  200 )
   مع: ( مستطيل  يسار:  10  يمين:  10  أعلى:  110 أسفل  :  210 ) . 
aPoint  :=  نقطة  x:  20  ص:  20. تصادمات := مستطيلات حدد: [ : aRect | 
مستطيل يحتوي على نقطة: aPoint ] .       

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

[
   بعض  العمليات 
] في: خطأ  do: [ : ex  | 
  معالج - كود 
  ex  return
]

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

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

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

الفئة الفرعية للكائن  :  #MessagePublisher 
    instanceVariableNames:  '' 
    classVariableNames:  '' 
    poolDictionaries:  '' 
    category:  'Smalltalk Examples'

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

طُرق

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

نشر 
    نص  العرض:  'مرحبا بالعالم!'

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

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

اسم الطريقة هو #quadMultiply:and:. يتم تحديد قيمة الإرجاع باستخدام ^المشغل.

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

إنشاء مثيلات للفئات

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

MessagePublisher  جديد

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

الناشر  :=  MessagePublisher  جديد

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

MessagePublisher  نشر جديد 

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

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

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

المتصفح

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

مساحة العمل

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

مساحة العمل

نص

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

مفتش

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

المُخطر/المُصحح

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

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

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

مثال على Hello World

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

نص  العرض:  "مرحبا بالعالم!" .

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

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

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

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

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

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

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

مستوى الوصول

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

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

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

قائمة التنفيذات

أوبن سمول توك

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

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

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

  • Squeak ، برنامج Smalltalk مفتوح المصدر الأصلي الذي تم بناء OpenSmalltalk VM من أجله [45] : 2  ، والذي يشتق من Smalltalk-80 v1 من Xerox PARC
  • Pharo Smalltalk، لغة مفتوحة المصدر ومتعددة المنصات ، مشتقة من Squeak
  • Croquet ، وهي آلة افتراضية Smalltalk مرتبطة بـ Squeak لمشروع Croquet
  • Cuis Smalltalk مشتق من Squeak

آحرون

انظر أيضا

مراجع

  1. ^ "Alto I Schematics" (PDF) . Bitsavers . ص 54 . تم الاسترجاع في 21 يوليو 2016 .
  2. ^ "تاريخ الحاسبات والحوسبة، ولادة الحاسب الحديث، الحاسب الشخصي، زيروكس ألتو" . تم استرجاعه في 2016-04-19 .
  3. ^ abcdefgh Kay, Alan; Ram, Stefan (2003-07-23). ​​"E-Mail of 2003-07-23". دكتور آلان كاي يتحدث عن معنى "البرمجة الموجهة للكائنات". تم الاسترجاع بتاريخ 2009-01-03 .
  4. ^ abc Kay, Alan. "The Early History of Smalltalk" . تم الاسترجاع في 2007-09-13 .
  5. ^ "ANSI Smalltalk Standard". Smalltalk.org. 2004. مؤرشف من الأصل في 2006-02-16 . تم الاسترجاع في 2021-03-02 .
  6. ^ "استطلاع رأي مطوري Stack Overflow لعام 2017".
  7. ^ "استطلاع رأي مطوري Stack Overflow لعام 2018".
  8. ^ "الإصدارات". Smalltalk.org. مؤرشف من الأصل في 2015-09-08 . تم الاسترجاع في 2007-09-13 .
  9. ^ "دعوة شركة تيكترونيكس لحضور المؤتمر الدولي الأول لمنفذي سمول توك-80" (PDF) . أرشيف وثائق سمول توك من شركة تيكترونيكس . 27 أغسطس 1981.
  10. ^ "قائمة الحضور للمؤتمر الدولي الأول لمنفذي Smalltalk-80" (PDF) . أرشيف وثائق Tektronix Smalltalk . 24 سبتمبر 1981.
  11. ^ "مقدمة عن Smalltalk Zoo". CHM . 17 ديسمبر 2020.
  12. ^ "ملاحظات الإصدار السادس" (PDF) . 20 نوفمبر 1981.
  13. ^ ab Ingalls, Daniel (2020). "The evolution of Smalltalk: from Smalltalk-72 through Squeak". Proceedings of the ACM on Programming Languages . 4 : 1–101. doi : 10.1145/3386335 . S2CID  219603700.
  14. ^ "ANSI Smalltalk Standard". Smalltalk.org. مؤرشف من الأصل في 2015-09-07 . تم الاسترجاع في 2007-09-13 .
  15. ^ "هوبز". مؤرشف من الأصل في 19 أبريل 2003.
  16. ^ "التاريخ". Seagull Software. مؤرشف من الأصل في 2002-08-06 . تم الاسترجاع في 2007-09-13 .
  17. ^ "الأسئلة الشائعة حول انتقال VisualAge Smalltalk".
  18. ^ كانت لغة Simula أيضًا موجهة للكائنات وسبقت (وتم الاعتراف بها كتأثير على) Smalltalk ولكنها كانت لغة محاكاة وليست لغة برمجة للأغراض العامة.
  19. ^ كانون، هوارد. "النكهات: نهج غير هرمي للبرمجة الموجهة للكائنات" (PDF) . softwarepreservation.org . تم الاسترجاع في 17 ديسمبر 2013 .
  20. ^ "حول روبي". ruby-lang.org . تم الاسترجاع في 17 ديسمبر 2013 .
  21. ^ "من أين جاءت إعادة الهيكلة؟". sourcemaking.com . تم الاسترجاع في 17 ديسمبر 2013 .
  22. ^ "DARPA – ARPA". livinginternet.com . تم الاسترجاع في 16 ديسمبر 2013 . لتلبية هذه الحاجة، أنشأت ARPA IPTO في عام 1962 بتفويض لبناء شبكة كمبيوتر قابلة للبقاء لربط أجهزة الكمبيوتر الرئيسية لوزارة الدفاع في البنتاغون وجبل شايان ومقر القيادة الاستراتيجية.
  23. ^ "دور إنجلبارت في الشبكات الحاسوبية المبكرة". dougengelbart.org . تم الاسترجاع في 17 ديسمبر 2013 .
  24. ^ كراسنر، جلين؛ بوب، ستيفن (أغسطس-سبتمبر 1988). "كتاب طبخ لاستخدام نموذج واجهة المستخدم Model-View-Controller في Smalltalk -80". مجلة البرمجة الشيئية .
  25. ^ "تأثيرنا". cincomsmalltalk.com . تم الاسترجاع في 16 ديسمبر 2013 .
  26. ^ "تم حقنها وفحصها واكتشافها وإصابتها وإهمالها واختيارها". The Weekly Squeak . 2014-04-29 . تم استرجاعها في 2024-04-15 .
  27. ^ كاي، آلان (10 أكتوبر 1998). "النماذج الأولية مقابل الفئات (البريد الإلكتروني على قائمة Squeak)".
  28. ^ جولدبرج، أديل ؛ روبسون، ديفيد (1989). Smalltalk-80 The Language . أديسون ويسلي. ص 31، 75-89. ISBN 0-201-13688-0.
  29. ^ Clark, AN (18 سبتمبر 1997). "الفئات الفوقية والانعكاس في Smalltalk". arXiv : 1804.07272 [cs.SE].
  30. ^ دوكاس ، ستيفان. لينهارد، أدريان. رينجلي، لوكاس. "Seaside - إطار تطبيق الويب لتدفق التحكم المتعدد" (PDF) . scg.unibe.ch . معهد مجموعة تكوين البرمجيات لتكنولوجيا المعلومات والرياضيات بجامعة برن، سويسرا . تم الاسترجاع 16 ديسمبر 2013 .
  31. ^ Foote, Brian; Johnson, Ralph (1–6 October 1989). "Reflective facilities in Smalltalk-80". وقائع مؤتمر حول أنظمة البرمجة الموجهة للكائنات واللغات والتطبيقات . ص 327–335. doi : 10.1145/74877.74911 . ISBN 0-89791-333-7. S2CID  14207536 . تم الاسترجاع في 16 ديسمبر 2013 .
  32. ^ سميث، بريان سي (1982-01-01). "التأمل الإجرائي في لغات البرمجة". تقرير تقني صادر عن معهد ماساتشوستس للتكنولوجيا (MIT-LCS-TR-272) . تم استرجاعه في 16 ديسمبر 2013 .
  33. ^ ماريانو مارتينيز بيك. بورقادي، نوري؛ دنكر، ماركوس. دوكاس، ستيفان؛ فابريس ، لوك (2011/08/23). وكلاء فعالون في Smalltalk . ايه سي ام. ص. 1-16. دوى :10.1145/2166929.2166937. اتش دي ال : 20.500.12210/28011 . رقم ISBN 978-1-4503-1050-5.
  34. ^ دوكاس ، ستيفان (2001). "صرير: بناء جملة بسيط / صرير: بناء جملة بسيط!" (بي دي إف) . برمجة! مجلة التنمية . 1 . تم الاسترجاع في 15 يناير 2024 .
  35. ^ Ducasse, Stéphane. "Object-Oriented Design with Smalltalk — a Pure Object Language and its Environment" (PDF) . مجموعة تكوين البرمجيات (جامعة برن) . تم الاسترجاع في 15 يناير 2024 .
  36. ^ جولدبرج، أديل ؛ روبسون، ديفيد (1989). Smalltalk-80 The Language . أديسون ويسلي. ص 17-37. ISBN 0-201-13688-0.
  37. ^ جولدبرج، أديل ؛ روبسون، ديفيد (1989). Smalltalk-80 The Language . أديسون ويسلي. ص 39-53. ISBN 0-201-13688-0.
  38. ^ "المثابرة المستندة إلى الصور". book.seaside.st . تم الاسترجاع في 17 ديسمبر 2013 .
  39. ^ كاي، ألين (1968). "FLEX – لغة مرنة قابلة للتمديد". أطروحة ماجستير في جامعة يوتا .
  40. ^ فاولر، مارتن. "صورة الذاكرة". martinfowler.com . مؤرشف من الأصل في 2011-10-07 . تم الاسترجاع في 17 ديسمبر 2013 .
  41. ^ "opensmalltalk-vm"، OpenSmalltalk ، Git hub، 2020-11-03 ، تم الاسترجاع 2020-11-08
  42. ^ إليوت ميراندا؛ كليمنت بيرا؛ إليزا جونزاليس بويكس؛ دان إنجالز (2018). عقدان من تطوير الآلات الافتراضية الصغيرة: تطوير الآلات الافتراضية المباشرة من خلال أدوات المحاكاة؛ الآلات الافتراضية وتنفيذات اللغة VMIL 2018، بوسطن، الولايات المتحدة (تقرير). hal.archives-ouvertes.fr. doi :10.1145/3281287.3281295. مؤرشف من الأصل في 2022-11-05.
  43. ^ إنجالز، دان؛ كايلر، تيد؛ مالوني، جون؛ والاس، سكوت؛ كاي، آلان (1997). "العودة إلى المستقبل: قصة سكويك، محادثة صغيرة عملية مكتوبة في حد ذاتها". إشعارات ACM SIGPLAN . 32 (10). مكتبة ACM الرقمية: 318-326. doi : 10.1145/263700.263754 .
  44. ^ "Slang". Squeak . تم الاسترجاع في 2020-11-08 .
  45. ^ من ميراندا، إليوت؛ بيرا، كليمنت؛ جونزاليس بويكس، إليزا؛ دان، إنجالز (8 أكتوبر 2018). "عقدان من تطوير الآلات الافتراضية باستخدام Smalltalk: تطوير الآلات الافتراضية المباشرة من خلال أداة المحاكاة" (PDF) .
  46. ^ "Strongtalk: برنامج Smalltalk مفتوح المصدر عالي الأداء مع نظام نوع اختياري" . تم الاسترجاع في 2021-11-25 .

قراءة إضافية

  • جولدبرج، أديل (ديسمبر 1983). Smalltalk-80: بيئة البرمجة التفاعلية . أديسون ويسلي. ISBN 0-201-11372-4.
  • جولدبرج، أديل ؛ كاي، آلان ، محرران (مارس 1976). دليل تعليمات Smalltalk-72 (PDF) . بالو ألتو، كاليفورنيا: مركز أبحاث زيروكس في بالو ألتو . تم الاسترجاع في 2011-11-11 .
  • جولدبرج، أديل ؛ روبسون، ديفيد (مايو 1983). Smalltalk-80: اللغة وتطبيقها . أديسون ويسلي. ISBN 0-201-11371-6.
  • جولدبرج، أديل ؛ روبسون، ديفيد (11 يناير 1989). Smalltalk 80: The Language . Addison-Wesley. ISBN 0-201-13688-0.
  • كاي، آلان سي. (مارس 1993). "التاريخ المبكر لـ Smalltalk" (PDF) . إشعارات ACM SIGPLAN . 28 (3). ACM : 69–95. doi :10.1145/155360.155364. مؤرشف من الأصل (PDF) في 3 مايو 2023.
  • كراسنر، جلين، محرر (أغسطس 1983). Smalltalk-80: Bits of History, Words of Advice. Addison-Wesley. ISBN 0-201-11669-3.
  • نيرشتراس، أوسكار؛ دوكاس، ستيفان؛ بوليت، داميان؛ بلاك، أندرو ب. (2009-10-07). صرير بالمثال. كيهرساتز، سويسرا: سكوير براكيت أسوشيتس. رقم ISBN 978-3-9523341-0-2.
  • نيرشتراس، أوسكار؛ دوكاس، ستيفان؛ بوليت، داميان؛ بلاك، أندرو ب. (23 فبراير 2010). Pharo by Example. Kehrsatz، سويسرا: Square Bracket Publishing. ISBN 978-3-9523341-4-0. تم أرشفة النسخة الأصلية في 21 أكتوبر 2009.
  • وينستون، باتريك هنري (3 سبتمبر 1997). على Smalltalk . معهد ماساتشوستس للتكنولوجيا، الولايات المتحدة الأمريكية: أديسون ويسلي. ISBN 978-0-201-49827-1.
  • براور، يوهانس (2015). برمجة سمول توك – التوجه نحو الكائنات من البداية . سبرينغر. رقم ISBN 978-3-658-06823-3.
  • "إصدار خاص عن Smalltalk". بايت 6 ( 8). ماكجرو هيل. أغسطس 1981. تم الاسترجاع في 2013-10-18 .
    • جولدبرج، أديل (أغسطس 1981). "تقديم نظام Smalltalk-80". بايت 6 ( 8). ماكجرو هيل . تم الاسترجاع في 2013-10-18 .
    • إنجالز، دان (أغسطس 1981). "مبادئ التصميم وراء Smalltalk". بايت 6 ( 8). ماكجرو هيل . تم الاسترجاع في 2011-11-11 .
    • تيسلر، لاري (أغسطس 1981). "بيئة Smalltalk". بايت 6 ( 8). ماكجرو هيل . تم الاسترجاع في 2016-05-02 .
  • كتب Smalltalk مجانية عبر الإنترنت
  • كويس سمول توك
  • فارو سمول توك
  • صرير حديث قصير
  • برنامج Cincom Smalltalk ObjectStudio
  • سينكوم سمول توك فيجوال ووركس
  • دولفين سمول توك
  • جنو سمالتالك
  • حديث صغير/X
  • حديث قوي
  • أمبر سمول توك
  • محادثة صغيرة على الخط الأحمر
  • محادثة قصيرة قرمزية
  • محادثة صغيرة في في ايه
  • أحجار كريمة
  • GLASS (GemStone، وLinux، وApache، وSeaside، وSmalltalk)
  • سمول توك إم تي
  • محاكي Smalltalk-78 عبر الإنترنت
  • آلة افتراضية متعددة المنصات من OpenSmalltalk لـ Squeak وPharo وCuis وNewspeak
  • تنفيذات Smalltalk-80 Bluebook في C++: بواسطة dbanay وrochus-keller على GitHub
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=حديث قصير&oldid=1254778846"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate