Scheme

שפת תכנות

Scheme היא שפת תכנות וניב מזערי ממשפחת שפות ה־Lisp. היא נבדלת משאר ניבי Lisp התעשייתיים בכך שהיא מצוידת בספריית ליבה קטנה בלבד. בדומה לשאר הניבים, Scheme מצטיינת ביכולת ההרחבה העצמית שלה למרות זעירותה.[1]

Scheme
פרדיגמות תכנות פונקציונלי, metaprogramming, תכנות פרוצדורלי, תכנות אימפרטיבי עריכת הנתון בוויקינתונים
תאריך השקה 1975 עריכת הנתון בוויקינתונים
מתכנן גיא ל. סטייל, ג'ראלד ג'יי סוסמן עריכת הנתון בוויקינתונים
הושפעה על ידי LISP, ALGOL, MDL עריכת הנתון בוויקינתונים
סיומת scm, ss עריכת הנתון בוויקינתונים
www.scheme-reports.org
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

היסטוריה עריכה

השפה פותחה בשנות ה־70 של המאה ה־20 במעבדת CSAIL של MIT לבינה מלאכותית על ידי גיא לוּאִיס סְטִיל וגֶ'רָלְד גֵ'יי סאַסְמן שאף כתבו אודותיה בסדרת מאמרים שנודעו אחר כך בשם "מאמרי הלַמְדָּא" ("Lambda Papers").[2] Scheme קיבלה השראה משפת התכנות ALGOL והשאילה ממנה את תחום ההכרה הלקסיקלי (lexical scope), והייתה לניב הראשון מבין משפחת שפות ה־Lisp עם תחום הכרה לקסיקלי.[3]

בין השנים 1975–1980 סאסמן ו־סטיל פיתחו את החידושים שלהם מסביב לשימוש בתחשיב הלמדא בתכנות, ועוד חידושים מתקדמים נוספים כגון מיטוב רקורסיית זנב בשפות תכנות, ופרסמו אותם בסדרת מאמרים שלעת ימים נודעו בשם ”מאמרי הלמדא.“[2]

עיצוב עריכה

Scheme הייתה הניב הראשון מבין ניבי ה־Lisp לבחור בהיקף משתנים לקסיקלי,[א][דרוש מקור] כלומר היקף המשתנים שפונקציות יכלו לראות ולגשת אליהם היה לפי מבנה התכנה בקוד המקור (כפי שנהוג ברוב שפות התכנות העכשוויות), ולא חיפוש משתנים בעזרת המחסנית בזיכרון (ה־Call stack) בזמן הריצה כפי שהיה נהוג בשפות Lisp קודם לכן.

Scheme הייתה מבין השפות הראשונות שאימצו את העיקרון שכל מבנה בשפה הוא מדרגה ראשונה,[דרוש מקור] כלומר התייחסות שווה לפונקציות, מחלקות, משתנים, ותהליכונים כערכים נגישים בזיכרון מתוך השפה עצמה והשימוש בהם כערכים שאפשר לקלוט למשתנים, לשנות, ולהעביר בין פונקציות. תכונה שאפשר למצוא בשפת התכנות Lua[4] שאינה ניב Lisp, אבל תפסה השראה חזקה מ־Scheme.[דרוש מקור]

Scheme תרמה רבות בחזרה לשפות האחיות שלה ממשפחת השפות של Lisp, ובמיוחד ל־Common Lisp, עבורה גיא סטיל בעצמו השתתף במאמץ הפיתוח והעיצוב.[5]

תחביר עריכה

כללי התחביר של השפה מעטים ולכן היא קלה יחסית ללימוד. Scheme נלמדת בעיקר באוניברסיטאות ומוסדות חינוך, מכיוון שבעזרתה נוח להמחיש עקרונות יסודיים מתחום מדעי המחשב וכן להדגים מודלים שונים לפיהם פועלים מהדרים ומפרשים. עם זאת, החל מתחילת המאה ה־21 היא מוחלפת באטיות בשפות אחרות דוגמת Python.[6]

קל לזהות את תחבירה של שפה זו, אשר בדומה לרוב הניבים של Lisp, מורכב מביטויים עטופים בסוגריים הנקראים ביטויי־S. התחביר מודגם בתוכנית הבאה, המחשבת עצרת:

(define (factorial n)
    (if (= n 0)
    1
    (* n (factorial (- n 1)))))

תקינה עריכה

Scheme עברה מספר תקינות וביניהן:[7]

  • שנת 1990, תקן 1178-1990 (R1995) של ה־IEEE. התקן אינו נגיש באופן חופשי ברשת.
  • שנת 1991, תקן R4RS.[8]
  • שנת 1998, תקן R5RS.[9] התקן הכי נפוץ ביישומי השפה.
  • שנת 2007, תקן R6RS.[10] התקן הביא חידושים ושכלל את השפה לשימוש תעשייתי ומסחרי. עם זאת, התקן שנוי במחלקות בקרב מתכנתיה כיוון שהרוח התעשייתית שלו חורגת מהפילוסופיה המינימליסטית המקורית של שפת התכנות.[11]
  • שנת 2013, תקן R7RS.[12] התקן נוצר כתוצאה מהמחלוקת שאפפה את התקן הקודם. הוא נועד לפצל את השפה לתקן "זעיר", שנועד בעיקר למטרות חינוך ומחקר, במקביל לתקן הקודם שמשמש צרכים תעשייתיים ומסחריים.[13] מכיוון שהתקן זעיר מקודמו, הוא לא שומר בהכרח על תאימות מלאה מולו, אלא מפצל את שימוש השפה לזרם נפרד ברוח המקורית של השפה.

ראו גם עריכה

לקריאה נוספת עריכה

מאמרי הלמדא עריכה

קישורים חיצוניים עריכה

  מדיה וקבצים בנושא Scheme בוויקישיתוף

ביאורים עריכה

  1. ^ באנגלית: ”lexical scope,“ בניגוד להיקף משתנים דינמי, ”dynamic scope.“

הערות שוליים עריכה

  1. ^ The Scheme Programming Language, groups.csail.mit.edu
  2. ^ 1 2 Bibliography of Scheme-related Research, web.archive.org, ‏2018-06-25
  3. ^ Gerald Jay Sussman, Guy L. Steele, The First Report on Scheme Revisited, Higher-Order and Symbolic Computation 11, 1998-12-01, עמ' 399–404 doi: 10.1023/A:1010079421970
  4. ^ Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, The Evolution of Lua, עמ' 2
  5. ^ Kent Pitman, Common Lisp HiperSpec, LispWorks, הכותב השתייך לקבוצת העבודה X3J13 האחראית על עיצוב השפה Common Lisp., ‏1996–2005 (באנגלית)
  6. ^ MIT replaces Scheme with Python, www.johndcook.com
  7. ^ schemers.org: Documents: Standards, schemers.org
  8. ^ William Clinger, Jonathan Rees ועוד 16 מחברים נוספים, Revised 4 Report on the Algorithmic Language Scheme, 1991
  9. ^ schemers.org: Documents: Standards: R5RS, schemers.org
  10. ^ |R6RS, www.r6rs.org
  11. ^ R6RS Electorate, www.r6rs.org
  12. ^ R7RS-small archive, small.r7rs.org
  13. ^ Position statement, scheme-reports.org