Scheme
שגיאת לואה ביחידה יחידה:תבנית_מידע בשורה 261: תבנית שפת תכנות ריקה. Scheme היא שפת תכנות וניב מזערי ממשפחת שפות ה־Lisp. היא נבדלת משאר ניבי Lisp התעשייתיים בכך שהיא מצוידת בספריית ליבה קטנה בלבד. בדומה לשאר הניבים, Scheme מצטיינת ביכולת ההרחבה העצמית שלה למרות זעירותה.[1]
היסטוריה
השפה פותחה בשנות ה־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] מכיוון שהתקן זעיר מקודמו, הוא לא שומר בהכרח על תאימות מלאה מולו, אלא מפצל את שימוש השפה לזרם נפרד ברוח המקורית של השפה.
ראו גם
קישורים חיצוניים
שגיאות פרמטריות בתבנית:ויקישיתוף בשורה
פרמטרי חובה [ שם ] חסרים
לקריאה נוספת
מאמרי הלמדא
- Gerald J. Sussman, Guy L. Steele, SCHEME: An Interpreter for Extended Lambda Calculus, 1975-12-01
- Guy Lewis Steele, Gerald Jay Sussman, Lambda: The Ultimate Imperative, 1976-03-01
- Guy Lewis Steele, LAMBDA: The Ultimate Declarative, 1976-11-01
- Guy Lewis Steele, Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO, 1977-10-01
- Guy Lewis Steele, Gerald Jay Sussman, The Art of the Interpreter of the Modularity Complex (Parts Zero, One, and Two), 1978-05-01
- Guy Lewis Steele, RABBIT: A Compiler for SCHEME, 1978-05-01
- 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
- Compiler Optimization Based on Viewing LAMBDA as RENAME plus GOTO, 1980[דרוש מקור]
- Design of a Lisp-based Processor, 1980[דרוש מקור]
ביאורים
- ^ באנגלית: ”lexical scope,“ בניגוד להיקף משתנים דינמי, ”dynamic scope.“
הערות שוליים
- ^ The Scheme Programming Language, groups.csail.mit.edu
- ^ 2.0 2.1 Bibliography of Scheme-related Research, web.archive.org, 2018-06-25
- ^ 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
- ^ Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, The Evolution of Lua, עמ' 2
- ^ Kent Pitman, Common Lisp HiperSpec, LispWorks, הכותב השתייך לקבוצת העבודה X3J13 האחראית על עיצוב השפה Common Lisp., 1996–2005 (באנגלית)
- ^ MIT replaces Scheme with Python, www.johndcook.com
- ^ schemers.org: Documents: Standards, schemers.org
- ^ William Clinger, Jonathan Rees ועוד 16 מחברים נוספים, Revised 4 Report on the Algorithmic Language Scheme, 1991
- ^ schemers.org: Documents: Standards: R5RS, schemers.org
- ^ |R6RS, www.r6rs.org
- ^ R6RS Electorate, www.r6rs.org
- ^ R7RS-small archive, small.r7rs.org
- ^ Position statement, scheme-reports.org
32646063Scheme