Smalltalk – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
השפיעה גם על go
תיקון קישור
שורה 13: שורה 13:
|ניבים=
|ניבים=
|הושפעה על ידי=[[Simula]], [[Lisp]], [[Logo]], [[Sketchpad]]
|הושפעה על ידי=[[Simula]], [[Lisp]], [[Logo]], [[Sketchpad]]
|השפיעה על=[[Objective-C]], [[Self]], [[Java]], [[PHP]] 5, [[Logtalk]], [[Dylan]], [[AppleScript]], [[Lisaac]], [[NewtonScript]], [[Python]], [[Ruby]], [[Groovy]], [[Scala]], [[Perl 6]], [[CLOS]], [[Falcon]], [[Io]], [[Ioke]], [[Fancy]],[[go]], [[Dart ]]
|השפיעה על=[[Objective-C]], [[Self]], [[Java]], [[PHP]] 5, [[Logtalk]], [[Dylan]], [[AppleScript]], [[Lisaac]], [[NewtonScript]], [[Python]], [[Ruby]], [[Groovy]], [[Scala]], [[Perl 6]], [[CLOS]], [[Falcon]], [[Io]], [[Ioke]], [[Fancy]],[[Go (שפת תכנות)|Go]], [[Dart ]]
|רישיון=
|רישיון=
|סיומת=st.
|סיומת=st.

גרסה מ־12:13, 25 ביוני 2017


שגיאות פרמטריות בתבנית:שפת תכנות

פרמטרים ריקים [ אתר ] לא מופיעים בהגדרת התבנית

פרמטרים [ שנה ] לא מופיעים בהגדרת התבנית

Smalltalk
פרדיגמות תכנות מונחה-עצמים
תאריך השקה 1972 עריכת הנתון בוויקינתונים
מתכנן אלן קיי, דן אינגולס, טד קלר, אדל גולדברג ואחרים
מפתח אלן קיי, Dan Ingalls, אדל גולדברג, Diana Merry עריכת הנתון בוויקינתונים
גרסה אחרונה ANSI Smalltalk (19 במאי 1998) עריכת הנתון בוויקינתונים
טיפוסיות דינמית, חזקה
מימושים Pharo, Squeak, GNU Smalltalk, VisualWorks, Dolphin Smalltalk, Smalltalk/X, VA Smalltalk
הושפעה על ידי Simula, Lisp, Logo, Sketchpad
השפיעה על Objective-C, Self, Java, PHP 5, Logtalk, Dylan, AppleScript, Lisaac, NewtonScript, Python, Ruby, Groovy, Scala, Perl 6, CLOS, Falcon, Io, Ioke, Fancy,Go, Dart
סיומת st.
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

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

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

היסטוריה

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

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

תכנות מונחה עצמים

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

אובייקט בסמולטוק יכול לבצע בדיוק שלושה דברים:

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

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

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

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

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