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

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
מ הוספת {{תב|אתר רשמי}} בקישורים חיצוניים על סמך ויקינתונים, במידה וחסרה תבנית (תג)
הרחבת מקיפה של הערך. הרחבה, עריכה, עדכון, הוספת מקורות, ויקיזציה (תיבת מידע), קישורים פנימיים.
שורה 1: שורה 1:
'''Scheme'''
'''Scheme''' היא [[שפת תכנות]] שפותחה ב[[שנות השבעים]] על ידי [[גיא סטיל]] (.Guy Lewis Steele, Jr) ו[[ג'רלד סאסמן]] (Gerald Jay Sussman) ומהווה [[דיאלקט]] מודרני של שפת [[Lisp]] הוותיקה. השפה תומכת במספר פרדיגמות תכנות שהעיקרית מביניהן היא פרדיגמת [[תכנות פונקציונלי|התכנות הפונקציונלי]].

{{שפת תכנות
}}

היא [[שפת תכנות]] וניב מזערי ממשפחת שפות ה־[[Lisp]]. השפה Scheme נבדלת משאר ניבי Lisp התעשייתיים בכך שהיא מצוידת עם ספריית ליבה קטנה בלבד. בדומה לשאר הניבים, Scheme מצטיינת ביכולת ההרחבה העצמית שלה למרות זעירותה.<ref>{{קישור כללי|כתובת=https://groups.csail.mit.edu/mac/projects/scheme/|כותרת=The Scheme Programming Language|אתר=groups.csail.mit.edu|תאריך_וידוא=2020-07-07}}</ref>

השפה פותחה ב[[שנות השבעים]] במעבדת [[CSAIL]] של [[המכון הטכנולוגי של מסצ'וסטס|MIT]] ל[[בינה מלאכותית]] על ידי [[גיא סטיל|גיא לוּאִיס סְטִיל]] ו[[ג'רלד סאסמן|גֶ'רָלְד גֵ'יי סאַסְמן]] שגם הפיצו על אודותיה באותה התקופה בסדרת פרסומי מאמרים שלעת ימים נודעו בשם "[[Scheme#מאמרי ה־למדא|'''מאמרי הלַמְדָּא''']]" ("'''Lambda Papers'''").<ref name=":0">{{קישור כללי|כתובת=https://web.archive.org/web/20180625085633/http://library.readscheme.org/|כותרת=Bibliography of Scheme-related Research|אתר=web.archive.org|תאריך=2018-06-25|תאריך_וידוא=2020-07-07}}</ref> השפה תפסה השראה משפת התכנות [[ALGOL]] והשאילה ממנה את ההיקף הלקסיקלי (lexical scope), והייתה לניב הראשון מבין משפחת שפות ה־Lisp עם היקף לקסיקלי.<ref>{{צ-מאמר|שם=The First Report on Scheme Revisited|קישור=https://doi.org/10.1023/A:1010079421970|כתב עת=Higher-Order and Symbolic Computation|שנת הוצאה=1998-12-01|עמ=399–404|כרך=11|doi=10.1023/A:1010079421970|מחבר=Gerald Jay Sussman, Guy L. Steele}}</ref>


כללי התחביר (Syntax) של השפה הם מעטים לכן היא קלה (יחסית) ללימוד. Scheme נלמדת בעיקר באוניברסיטאות ומוסדות חינוך, מכיוון שבעזרתה נוח להמחיש עקרונות יסודיים מתחום [[מדעי המחשב]] וכן להדגים מודלים שונים לפיהם פועלים [[מהדר]]ים ו[[מפרש (תוכנה)|מפרשים]]. כיום השפה מוחלפת באיטיות בשפות אחרות דוגמת [[Python]].{{הערה|1=[http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/ מאמר בנושא המעבר ל-Python ב-MIT]}}
כללי התחביר (Syntax) של השפה הם מעטים לכן היא קלה (יחסית) ללימוד. Scheme נלמדת בעיקר באוניברסיטאות ומוסדות חינוך, מכיוון שבעזרתה נוח להמחיש עקרונות יסודיים מתחום [[מדעי המחשב]] וכן להדגים מודלים שונים לפיהם פועלים [[מהדר]]ים ו[[מפרש (תוכנה)|מפרשים]]. כיום השפה מוחלפת באיטיות בשפות אחרות דוגמת [[Python]].{{הערה|1=[http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/ מאמר בנושא המעבר ל-Python ב-MIT]}}


קל לזהות את תחבירה של שפה זו, אשר בדומה לרוב הדיאלקטים של Lisp, מורכב מביטויים עטופים בסוגריים הנקראים S-expressions. התחביר מודגם בתוכנית הבאה המחשבת [[עצרת]]:
קל לזהות את תחבירה של שפה זו, אשר בדומה לרוב ניבים של Lisp, מורכב מביטויים עטופים בסוגריים הנקראים ביטויי-S (באנגלית S-expressions). התחביר מודגם בתוכנית הבאה המחשבת [[עצרת]].
<syntaxhighlight lang="scheme">
<syntaxhighlight lang="scheme">
(define (factorial n)
(define (factorial n)
שורה 10: שורה 17:
(* n (factorial (- n 1)))))
(* n (factorial (- n 1)))))
</syntaxhighlight>
</syntaxhighlight>

=== תקינה ===
Scheme עברה מספר [[תקן|תקינות]] ובינהן:<ref>{{קישור כללי|כתובת=https://schemers.org/Documents/Standards/|כותרת=schemers.org: Documents: Standards|אתר=schemers.org|תאריך_וידוא=2020-07-07}}</ref>

* שנת '''1990''', תקן '''1178-1990''' ('''R1995''') של ה־[[IEEE]]. התקן אינו נגיש באופן חופשי ברשת.
* שנת '''1991''', תקן '''R4RS'''.<ref>{{צ-מאמר|מחבר=William Clinger, Jonathan Rees ועוד 16 מחברים נוספים.|שם=Revised 4 Report on the Algorithmic Language Scheme|כתב עת=|קישור=https://people.csail.mit.edu/jaffer/r4rs.pdf|שנת הוצאה=1991|שפה=אנגלית|מו"ל=}}</ref>
* שנת '''1998''', תקן '''R5RS'''.<ref>{{קישור כללי|כתובת=https://schemers.org/Documents/Standards/R5RS/|כותרת=schemers.org: Documents: Standards: R5RS|אתר=schemers.org|תאריך_וידוא=2020-07-07}}</ref> התקן הכי נפוץ ביישומי השפה.
* שנת '''2007''', תקן '''R6RS'''.<ref>{{קישור כללי|כתובת=http://www.r6rs.org/|כותרת=R6RS|אתר=www.r6rs.org|תאריך_וידוא=2020-07-07}}</ref> התקן הביא חידושים ושכלל את השפה לשימוש תעשייתי ומחסרי. עם זאת, התקן שנוי במחלקות בקרב מתכנתיה מכיוון שנטען כי התקן החדש המתאפיין ברוח התעשייתית חרג מהפילוסופיה המינימליסטית המקורית של שפת התכנות Scheme.<ref>{{קישור כללי|כתובת=http://www.r6rs.org/ratification/electorate.html|כותרת=R6RS Electorate|אתר=www.r6rs.org|תאריך_וידוא=2020-07-07}}</ref>
* שנת '''2013''', תקן '''R7RS'''.<ref>{{קישור כללי|כתובת=https://small.r7rs.org/|כותרת=R7RS-small archive|אתר=small.r7rs.org|תאריך_וידוא=2020-07-07}}</ref> התקן נוצר כתוצאה מהמחלוקת שנוצרה מסביב לתקן הקודם, לפי נטען שהוא חורג מהעקרונות המינימליסטיים של השפה. התקן בא לפצל את השפה לתקן נפרד "זעיר" של השפה, הנועדה בעיקר למטרות חינוך ומחקר, בזמן שהתקן הקודם משמש צרכים תעשייתים ומסחריים יותר.<ref>{{קישור כללי|כתובת=http://scheme-reports.org/2009/position-statement.html|כותרת=Position statement|אתר=scheme-reports.org|תאריך_וידוא=2020-07-07}}</ref> מכיוון שהתקן זעיר מקודמו, הוא לא שומר בהכרח על תאימות מלאה מולו, אלא מפצל את שימוש השפה לזרם נפרד ברוח המקורית של השפה.

=== מאמרי הלמדא ===
בין השנים 1975–1980 סאסמן ו־סטיל פיתחו את החידושים שלהם מסביב לשימוש ב[[תחשיב למדא|תחשיב הלמדא]] בתכנות, ועוד חידושים מתקדמים נוספים כגון [[מיטוב]] [[רקורסיית זנב]] בשפות תכנות, ופרסמו אותם בסדרת מאמרים שלעת ימים נודעו בשם "מאמרי הלמדא".<ref name=":0" />

==== רשימת המאמרים ====

* 1975: Scheme: An Interpreter for Extended Lambda Calculus
* 1976: Lambda: The Ultimate Imperative
* 1976: Lambda: The Ultimate Declarative
* 1977: Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO
* 1978: The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two)
* 1978: RABBIT: A Compiler for SCHEME
* 1979: Design of LISP-based Processors, or SCHEME: A Dialect of LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode
* 1980: Compiler Optimization Based on Viewing LAMBDA as RENAME + GOTO
* 1980: Design of a Lisp-based Processor

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

Scheme הייתה מבין השפות הראשונות שאימצו את העקרון שכל מבנה בשפה הוא [[מבנה מדרגה ראשונה (תכנות)|מדרגה ראשונה]], כלומר התייחסות שווה לפונקציות, מחלקות, משתנים, ותהליכונים כערכים נגישים בזכרון מתוך השפה עצמה והשימוש בהם כערכים שאפשר לקלוט למשתנים, לשנות, ולהעביר בין פונקציות. תכונה שאפשר למצוא בשפת התכנות [[Lua]]<ref>{{צ-מאמר|מחבר=Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes|שם=The Evolution of Lua|כתב עת=|עמ=2|קישור=https://www.lua.org/doc/hopl.pdf}}</ref> שאינה ניב Lisp, אבל תפסה השראה חזקה מ־Scheme.

Scheme תרמה רבות בחזרה לשפות האחיות שלה ממשפחת השפות של Lisp, ובמיוחד ל־[[Common Lisp]], עבורה גיא סטיל בעצמו השתתף במאמץ הפיתוח והעיצוב.<ref>{{קישור כללי|כתובת=http://www.lispworks.com/documentation/HyperSpec/Body/01_ab.htm|הכותב=Kent Pitman|כותרת=Common Lisp HiperSpec|אתר=LispWorks|מידע נוסף=הכותב השתייך לקבוצת העבודה X3J13 האחראית על עיצוב השפה Common Lisp.|תאריך=1996–2005|שפה=אנגלית|ציטוט=Initially spearheaded by White and Gabriel, the driving force behind this grassroots effort was provided by Fahlman, Daniel Weinreb, David Moon, Steele, and Gabriel.}}</ref>


== ראו גם ==
== ראו גם ==

גרסה מ־12:20, 7 ביולי 2020

Scheme

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

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

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

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

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

(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] התקן הביא חידושים ושכלל את השפה לשימוש תעשייתי ומחסרי. עם זאת, התקן שנוי במחלקות בקרב מתכנתיה מכיוון שנטען כי התקן החדש המתאפיין ברוח התעשייתית חרג מהפילוסופיה המינימליסטית המקורית של שפת התכנות Scheme.[9]
  • שנת 2013, תקן R7RS.[10] התקן נוצר כתוצאה מהמחלוקת שנוצרה מסביב לתקן הקודם, לפי נטען שהוא חורג מהעקרונות המינימליסטיים של השפה. התקן בא לפצל את השפה לתקן נפרד "זעיר" של השפה, הנועדה בעיקר למטרות חינוך ומחקר, בזמן שהתקן הקודם משמש צרכים תעשייתים ומסחריים יותר.[11] מכיוון שהתקן זעיר מקודמו, הוא לא שומר בהכרח על תאימות מלאה מולו, אלא מפצל את שימוש השפה לזרם נפרד ברוח המקורית של השפה.

מאמרי הלמדא

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

רשימת המאמרים

  • 1975: Scheme: An Interpreter for Extended Lambda Calculus
  • 1976: Lambda: The Ultimate Imperative
  • 1976: Lambda: The Ultimate Declarative
  • 1977: Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO
  • 1978: The Art of the Interpreter or, the Modularity Complex (Parts Zero, One, and Two)
  • 1978: RABBIT: A Compiler for SCHEME
  • 1979: Design of LISP-based Processors, or SCHEME: A Dialect of LISP, or Finite Memories Considered Harmful, or LAMBDA: The Ultimate Opcode
  • 1980: Compiler Optimization Based on Viewing LAMBDA as RENAME + GOTO
  • 1980: Design of a Lisp-based Processor

השפעה

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

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

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

ראו גם

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

ויקישיתוף מדיה וקבצים בנושא 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. ^ מאמר בנושא המעבר ל-Python ב-MIT
  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. ^ Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes, The Evolution of Lua, עמ' 2
  13. ^ Kent Pitman, Common Lisp HiperSpec, LispWorks, הכותב השתייך לקבוצת העבודה X3J13 האחראית על עיצוב השפה Common Lisp., ‏1996–2005 (באנגלית)
ערך זה הוא קצרמר בנושא תוכנה. אתם מוזמנים לתרום לוויקיפדיה ולהרחיב אותו.