פרדיגמות | תכנות פונקציונלי, תכנות פרוצדורלי, תכנות השתקפותי, מֶטַא־תכנות |
---|---|
תאריך השקה | 1985 |
מתכנן | ריצ'רד סטולמן, גיא לואיס סטיל ג'וניור |
מפתח | מיזם GNU |
טיפוסיות | דינאמית, חזקה |
מימושים | GNU Emacs |
הושפעה על ידי | Common Lisp, Maclisp |
רישיון | GNU GPLv3 |
סיומת | .el .elc |
https://www.gnu.org/software/emacs/emacs.html | |
Emacs Lisp הוא ניב של שפת התכנות Lisp המשמש כשפת תסריט עבור עורכי Emacs (משפחת עורכי טקסט הכוללת בה את GNU Emacs ו־XEmacs, ופיצולים רבים אחרים). רוב הפונקציונליות של העורך עצמו נכתבה בניב זה על פני מפרש Lisp וליבה שנכתבו ב־C. הניב מכונה לפעמים Elisp, למרות שקיים ניב Lisp קדום יותר עם אותו שם, אך אין קשר בין השניים.[דרוש מקור]
ריצ'רד סטולמן בחר את Lisp כשפת הרחבה כששכתב מחדש את Emacs עבור מיזם GNU ב־1985 כדי לשחרר אותו מחדש תחת הרישיון הציבורי הכללי של GNU. עורך הטקסט המקורי של Emacs פותח במעבדות MIT לבינה מלאכותית בסביבות תחילת שנות ה־70 לאור המגבלות של העורך TECO שהיה בשימוש אז.
בתחילת שנות ה־80 הופיע עורך Emacs במכונות ה־Lisp הידוע כ־Zmacs. סטולמן בחר ב־Lisp כשפת ההרחבה שלו מאחר שהכיר בתכונות החזקות שלה, כולל היכולת לטפל בפונקציות כנתונים. למרות ש־Lisp עוד לא עברה תקנון כ־Common Lisp, הניב Scheme כבר היה קיים בזמן שסטולמן היה משכתב את Gosling Emacs לתוך GNU Emacs. הוא בחר שלא להשתמש ב־Scheme לאור הביצועים הנמוכים שלה על מחשבים תעשייתיים (בניגוד למחשבים זעירים שהיו ביתם המסורתי של עורכי Emacs לאורך ההיסטוריה), מאחר שהוא רצה ניב Lisp חסכוני עם ביצועים שניתן לשפר אותם בקלות.[1]
משתמשי Emacs נעזרים ב־Emacs Lisp בעיקר כדי לתכנת רוטינות והנחיות מותאמות אישית לעורך עצמו, או כדי לשנות את ההתנהגות הקיימת של העורך ואת רכיביו, שגם הם כתובים בניב זה.
קיימת אפשרות נוספת והיא להשתמש בעורך ההעדפות של Emacs המכונה Customize שמלווה בממשק ידידותי למשתמש. העורך שומר את כל ההגדרות והשינויים בקוד Lisp, והוא בעצמו גם כתוב באותו ניב.
מכיוון שרוב מוחלט מהרכיבים של Emacs כתובים ב־Lisp, ניתן לראות את השינויים בזמן אמת בלי צורך להפעיל מחדש את העורך תודות לתכונות הדינמיות של השפה.
Emacs מאפשר קליטת קוד Lisp מקבצים חיצוניים בלי צורך להדר אותם, מה שהופך אותו לעורך שכל משתמש יכול להרחיב בקלות ולשתף משתמשים אחרים בקוד Lisp בעזרת מערכת ניהול החבילות של Emacs כגון Elpa או Melpa.
Emacs Lisp יכולה גם לשמש כשפת תסריט כללית מעבר לעורך עצמו, בדומה ל־bash המצוי ברוב מערכות Unix או בדומה לשפות תסריט עיליות כגון Perl ופייתון על ידי זימון המפרשן של Emacs במצב אצווה "Batch mode" דרך שורת הפקודה. אין ממשק משתמש גרפי כאשר המפרש של Emacs Lisp רץ במצב אצווה, המפרש מבצע את התסריט, מציג פלט ויוצא.
Emacs Lisp הוא ניב די שונה משאר ניבי ה־Lisp המצויים כיום כגון Clojure, Common Lisp ו־Scheme, וקרוב ביותר לניב Maclisp אך קיימת גם השפעה מאוחרת יותר מ Common Lisp.[2] הניב תומך בפרדיגמות תכנות אימפרטיבי פונקציונלי ו־פרוצדורלי.
מאפיין בולט של Emacs Lisp הוא השימוש שלה בתחום הכרזה (scope) דינמי ולא לקסיקלי כברירת מחדל. כלומר, פונקציה עשויה להתייחס למשתנים מקומיים בהיקף שהיא נקראת ממנו (מהפונקציה שזימנה אותה), אך לא בהיקף שבו היא הוגדרה סמנטית בקוד המקור כמו ברוב השפות.