Smalltalk

סמולטוק (Smalltalk) היא שפת תכנות מונחית-עצמים טהורה - השפה הראשונה שמימשה את רוב המאפיינים המקובלים של תכנות מונחה-עצמים. בנוסף, סמולטוק היא בעלת טיפוסיות דינמית ויכולת התבוננות פנימה (Reflective). פיתוח בשפה מבוצע לרוב בסביבת פיתוח משולבת בעלת ממשק משתמש גרפי, אליה תוכננה השפה מלכתחילה.

תוכנות בסמולטוק על פי רוב עוברות הידור ל-Bytecode, מעין שפת-מכונה-אבסטרקטית, המפורשת בזמן-ריצה על ידי מכונה וירטואלית. מנגנון זה נקרא "הידור Just-In-Time" (JIT), והוא נפוץ בשפות מודרניות רבות (כגון ג'אווה ו-#C).

== היסטוריה ==
סמולטוק פותחה במהלך שנות ה-70, כחלק מעבודה של צוות ב-Xerox PARC. חלק מיעודה המקורי של סמולטוק היה כשפה ללימוד תכנות, ומכאן ככל הנראה מקור שמה הלא יומרני. סמולטוק הושפעה רבות מהחידושים המהפכניים שבאו לעולם לראשונה בתוכנה Sketchpad ובשפת התכנות Simula, ומאפיינים רבים של השפה הם המשך ישיר למאפיינים המצויים בהן. הגרסה הפופולרית הראשונה של השפה נקראה Smalltalk-80, והיא קנתה לה קהילה של משתמשים הממשיכים לפתח אותה באופן פעיל גם בימים אלה.

שיא השימוש בסמולטוק היה מסוף שנות ה-80 ועד אמצע שנות ה-90. השפה השפיעה רבות על פיתוח שפות תבנית, תבניות עיצוב וארכיטקטורה, הידור דינאמי, מכונות וירטואליות ועוד.

== תכנות מונחה עצמים ==
הטרמינולוגיה של סמולטוק שונה מעט מזו המקובלת כיום בשפות מונחות-עצמים המקובלות בתעשייה (למעט שפת Ruby, שירשה חלק מהטרמינולוגיה הזאת), בשל הבדלים מהותיים בין השפות בהתנהגות של אובייקטים.

אובייקט בסמולטוק יכול לבצע בדיוק שלושה דברים:
# להחזיק מצב (אוסף של התייחסויות לאובייקטים אחרים - "שדות" או "משתני מופע").
# לקבל הודעה מאובייקט אחר.
# במהלך עיבוד של הודעה, לשלוח הודעה לאובייקט אחר.
המצב שאובייקט מחזיק הוא תמיד פרטי לאובייקט. אובייקטים אחרים יכולים לתשאל או לשנות את המצב הזה אך ורק באמצעות שליחה של בקשות (הודעות) לאובייקט לעשות זאת. כל הודעה עשויה להישלח לכל אובייקט: כאשר מתקבלת הודעה, האובייקט המקבל מחליט האם ההודעה הזאת היא ראויה, וכיצד להגיב לה. 

סמולטוק היא שפת תכנות מונחית-עצמים "טהורה". משמעות הדבר היא כי, בניגוד לשפת ג'אווה או ++C, אין כל הבדל בין ערכים שהם אובייקטים לבין ערכים שהם טיפוסים פרימיטיביים, בסיסיים. בסמולטוק, ערכים פרימיטיביים כגון מספרים שלמים, ערכי-אמת או תווים, גם הם אובייקטים, במובן שהם מופעים (Instance) של מחלקות מתאימות, ופעולות עליהם מבוצעות באמצעות שליחה של הודעות. מתכנת יכול לשנות את המחלקות שמממשות את הערכים הפרימיטיביים, כך שתוגדר התנהגות חדשה עבור מופעים שלהן. למשל, על מנת לממש מבנה בקרת-זרימה או לשנות את התנהגותם של המבנים הקיימים (בסמולטוק גם פקודות תנאי או לולאות ממומשות כאובייקטים). נפוץ לסכם עובדה זאת במשפט "בסמולטוק כל דבר הוא אובייקט", אם כי מדויק יותר לומר כי כל הערכים הם אובייקטים.

כיוון שכל ערך הוא אובייקט, מחלקות גם הן אובייקטים, והן מופעים של מטה-מחלקות. מטה-מחלקות גם הן אובייקטים, והן מופע של המחלקה Metaclass. בלוקים של פקודות וביטויים גם הם אובייקטים.

== קישורים חיצוניים ==

* [http://www.smalltalk.org/ Smalltalk.org] - קידום השפה
* [http://www.whysmalltalk.com/ Why Smalltalk?] - קהילת מפתחים
* [https://web.archive.org/web/20100307175234/http://www.smalltalk-central.com/ Smalltalk Central] - אתר מרכזי בקהילה
* [https://web.archive.org/web/20070305011128/http://video.google.com/videoplay?docid=-7466310348707586940&q=smalltalk מצגת וידאו] של Smalltalk-80
* [http://www.underwar.co.il/document-details.asp?id=232 מדריך שפת Smalltalk], באתר UnderWarrior

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
קטגוריה:שפות תכנות
קטגוריה:הנדסת תוכנה
קטגוריה:תוכנות שהושקו ב-1972