Scheme

מתוך ויקיפדיה, האנציקלופדיה החופשית
Scheme
Lambda lc.svg
פרדיגמות תכנות פונקציונלי, תכנות פרוצדורלי, metaprogramming עריכת הנתון בוויקינתונים
שנה 1975 עריכת הנתון בוויקינתונים
מתכנן גיא ל. סטייל, Gerald Jay Sussman עריכת הנתון בוויקינתונים
הושפעה על ידי LISP, ALGOL, MDL עריכת הנתון בוויקינתונים
סיומת scm, ss עריכת הנתון בוויקינתונים
www.scheme-reports.org
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית OOjs UI icon info big.svg

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

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

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

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

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

תקינה[עריכת קוד מקור | עריכה]

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

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

מאמרי הלמדא[עריכת קוד מקור | עריכה]

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

רשימת מאמרי הלמדא
שנה כותרת מקור
1975
Scheme: An Interpreter for Extended Lambda Calculus
[12]
1976
Lambda: The Ultimate Imperative
[13]
1976
Lambda: The Ultimate Declarative
[14]
1977
Debunking the 'Expensive Procedure Call' Myth, or,
Procedure Call Implementations Considered Harmful, or,
Lambda: The Ultimate GOTO
[15]
1978
The Art of the Interpreter of the Modularity Complex (Parts Zero, One, and Two)
[16]
1978
RABBIT: A Compiler for SCHEME
[17]
1979
Design of LISP-based Processors, or
SCHEME: A Dialect of LISP, or
Finite Memories Considered Harmful, or
LAMBDA: The Ultimate Opcode
[18]
1980
Compiler Optimization Based on Viewing LAMBDA as RENAME plus GOTO
[דרוש מקור]
1980
Design of a Lisp-based Processor
[דרוש מקור]

השפעה[עריכת קוד מקור | עריכה]

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

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

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

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

Green globe.svg אתר האינטרנט של Scheme

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

הערות שוליים[עריכת קוד מקור | עריכה]

  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. ^ MIT replaces Scheme with Python, www.johndcook.com
  5. ^ schemers.org: Documents: Standards, schemers.org
  6. ^ William Clinger, Jonathan Rees ועוד 16 מחברים נוספים, Revised 4 Report on the Algorithmic Language Scheme, 1991
  7. ^ schemers.org: Documents: Standards: R5RS, schemers.org
  8. ^ |R6RS, www.r6rs.org
  9. ^ R6RS Electorate, www.r6rs.org
  10. ^ R7RS-small archive, small.r7rs.org
  11. ^ Position statement, scheme-reports.org
  12. ^ Gerald J. Sussman, Guy L. Steele, SCHEME: An Interpreter for Extended Lambda Calculus, 1975-12-01
  13. ^ Guy Lewis Steele, Gerald Jay Sussman, Lambda: The Ultimate Imperative, 1976-03-01
  14. ^ Guy Lewis Steele, LAMBDA: The Ultimate Declarative, 1976-11-01
  15. ^ Guy Lewis Steele, Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO, 1977-10-01
  16. ^ Guy Lewis Steele, Gerald Jay Sussman, The Art of the Interpreter of the Modularity Complex (Parts Zero, One, and Two), 1978-05-01
  17. ^ Guy Lewis Steele, RABBIT: A Compiler for SCHEME, 1978-05-01
  18. ^ Guy Lewis Steele, Gerald Jay Sussman, Design of LISP-based Processors, or SCHEME: A Dielectric LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode, 1979-03-01
  19. ^ Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, The Evolution of Lua, עמ' 2
  20. ^ Kent Pitman, Common Lisp HiperSpec, LispWorks, הכותב השתייך לקבוצת העבודה X3J13 האחראית על עיצוב השפה Common Lisp., ‏1996–2005 (באנגלית)