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

תוכן שנמחק תוכן שנוסף
מ ←‏תקינה: ניסוח
מ ויקיזציה, ניסוח, הגהה
שורה 1:
'''Scheme'''
 
{{שפת תכנות
}}
'''Scheme''' היא [[שפת תכנות]] וניב מזערי ממשפחת שפות ה־[[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> }}
 
השפה פותחה ב[[שנות השבעיםה-70 של המאה ה-20]] במעבדת [[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>}} השפהScheme תפסהקיבלה השראה משפת התכנות [[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> }}
היא [[שפת תכנות]] וניב מזערי ממשפחת שפות ה־[[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>
 
כללי התחביר (Syntax) של השפה הם מעטים לכןולכן היא קלה (יחסית) ללימוד. Scheme נלמדת בעיקר באוניברסיטאות ומוסדות חינוך, מכיוון שבעזרתה נוח להמחיש עקרונות יסודיים מתחום [[מדעי המחשב]] וכן להדגים מודלים שונים לפיהם פועלים [[מהדר]]ים ו[[מפרש (תוכנה)|מפרשים]]. כיוםעם השפהזאת, החל מתחילת המאה ה-21 היא מוחלפת באטיות בשפות אחרות דוגמת [[Python]].{{הערה|1=[http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/ מאמר בנושא המעבר ל-Python ב-MIT]}}
השפה פותחה ב[[שנות השבעים]] במעבדת [[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>
 
קל לזהות את תחבירה של שפה זו, אשר בדומה לרוב ניביםהניבים של Lisp, מורכב מביטויים עטופים בסוגריים הנקראים ביטויי-S (באנגלית S-expressions). התחביר מודגם בתוכנית הבאה, המחשבת [[עצרת]].:
כללי התחביר (Syntax) של השפה הם מעטים לכן היא קלה (יחסית) ללימוד. Scheme נלמדת בעיקר באוניברסיטאות ומוסדות חינוך, מכיוון שבעזרתה נוח להמחיש עקרונות יסודיים מתחום [[מדעי המחשב]] וכן להדגים מודלים שונים לפיהם פועלים [[מהדר]]ים ו[[מפרש (תוכנה)|מפרשים]]. כיום השפה מוחלפת באטיות בשפות אחרות דוגמת [[Python]].{{הערה|1=[http://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/ מאמר בנושא המעבר ל-Python ב-MIT]}}
 
קל לזהות את תחבירה של שפה זו, אשר בדומה לרוב ניבים של Lisp, מורכב מביטויים עטופים בסוגריים הנקראים ביטויי-S (באנגלית S-expressions). התחביר מודגם בתוכנית הבאה המחשבת [[עצרת]].
<syntaxhighlight lang="scheme">
(define (factorial n)
(if (= n 0)
1
1
(* n (factorial (- n 1)))))
</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
שורה 42 ⟵ 37:
* 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>}}
 
== ראו גם ==
שורה 61 ⟵ 56:
 
{{קצרמר|תוכנה}}
 
 
 
[[קטגוריה:שפות תכנות]]