LFE
יש לערוך ערך זה. ייתכן שהערך סובל מבעיות ניסוח, סגנון טעון שיפור או צורך בהגהה, או שיש לעצב אותו, או מפגמים טכניים כגון מיעוט קישורים פנימיים.
| ||
יש לערוך ערך זה. ייתכן שהערך סובל מבעיות ניסוח, סגנון טעון שיפור או צורך בהגהה, או שיש לעצב אותו, או מפגמים טכניים כגון מיעוט קישורים פנימיים. | |
פרדיגמות | תכנות פונקציונלי, מטא תכנות, Concurrent |
---|---|
תאריך השקה | 2008 |
מתכנן | Robert Virding |
מפתח | Robert Virding |
גרסה אחרונה | 1.3 (4 ביוני 2017) |
טיפוסיות | דינמית, חזקה |
הושפעה על ידי | Erlang, Common Lisp, Maclisp, Scheme, Elixir, Clojure, Hy |
השפיעה על | Joxa, Concurrent Schemer |
רישיון | Apache 2.0 |
סיומת |
lfe. hrl. |
http://lfe.io/ | |
LFE (קיצור של Lisp Flavored Erlang) היא שפת תכנות פונקציונלית בעלת מערכת איסוף זבל ממשפחת שפות Lisp, שתוכננה ופותחה על ידי רוברט וירדינג (Robert Virding) ושוחררה לראשונה בשנת 2008. היא בנויה על Core Erlang ועל BEAM, המכונה הווירטואלית של שפת התכנות Erlang.
תכונות
[עריכת קוד מקור | עריכה]LFE פותחה באמצעות Erlang כדי ליצור ניב Lisp שיתמוך ב-Fault Tolerance ( היכולת של מערכת לתפקד גם כאשר אחד מרכיביה כושל ) ובמערכות זמן אמת. בנוסף, היא תומכת בחישוב מבוזר. אחד היתרונות המשמעותיים ביותר בכתיבת קוד ב-LFE הוא שניתן לגשת לספריות ה-OTP של Erlang לצורך הפיתוח.
LFE היא שפה מרובת פרדיגמות, כלומר, היא תומכת במספר עקרונות תכנותיים:
תכנות פונקציונלי - תכנות פונקציונלי שם דגש על קריאה לפעולות ופישוטן כביטויים.
מטא תכנות - בפרדיגמה זו, ניתן ״לשכתב את השפה״, כלומר, לשנות ערכים ופעולות אשר מוגדרים בשפה.
Concurrent Computing - חישובים מסוימים מתרחשים במקביל, במקום באופן סדרתי (זה אחר זה).
ל-LFE ישנה מערכת איסוף זבל, כלומר, מערכת שבה סביבת הריצה של תוכנית מחשב משחררת באופן אוטומטי זיכרון שהוקצה דינאמית, ואין בו עוד צורך.
היסטוריה
[עריכת קוד מקור | עריכה]פיתוח LFE החל בשנת 2007, כאשר רוברט וירדניג החל ליצור אב טיפוס של שפת Lisp שרצה ב-Erlang. וירדינג הכריז על שחרור הגרסה הראשונה של LFE במרץ 2008. הגרסה הראשונה הייתה מוגבלת ולא היה מעטפת ( Shell ) של Lisp .
רציונל
[עריכת קוד מקור | עריכה]רוברט וירדינג הצהיר שיצר את LFE ממספר סיבות:
- היה לו ניסיון מוקדם של תכנות עם Lisp.
- הוא היה מעוניין לבצע מימוש של Lisp משלו בשפת התכנות Erlang.
- הוא היה סקרן לראות כיצד מימוש זה יבוצע ויראה.
- מאז שסייע בפיתוח Erlang, רצה וירדינג ליצור ניב Lisp אשר יוכל לרוץ על BEAM ( המכונה הווירטואלית של Erlang ) ויוכל לבצע אינטראקציה מלאה עם Erlang וספריות ה-OTP שלה.
- הוא רצה להתנסות בלבצע הידור של שפה אחרת ב-Erlang.
תחביר
[עריכת קוד מקור | עריכה]Symbolic Expressions
[עריכת קוד מקור | עריכה]כמו ניבי Lisp רבים, LFE היא שפה שבה כל הקוד והמידע נכתבים כביטויים, וישנה הפרדה מועטה עד לא קיימת בתחביר של הצהרה לעומת של ביטוי. כל ביטוי נכתב בתוך סוגריים, ונקראים Symbolic Expression, או בקיצור- S Expression.
רשימות
[עריכת קוד מקור | עריכה]ב-LFE, האיברים במבנה הנתונים רשימה (list) מופרדים על ידי רווח. רשימה מוגדרת על ידי המילה השמורה list בתחילת הביטוי ( כחלק מהכתיב התחילי של ניבי Lisp ), לדוגמה:
(list 1 2 'foo)
רשימה זו מורכבת מהמספרים 1 ו-2 ומה- symbol foo׳
.
דוגמאות קוד
[עריכת קוד מקור | עריכה]ניתן לתכנת בLFE באמצעות שורת פקודה (המכונה REPL-Read Evaluate Print Loop) או בקובץ (פרויקט).
דוגמה ליצירת משתנה מסוג רשימה בשורת הפקודה של LFE :
> (set my-list (lists:seq 1 6))
(1 2 3 4 5 6)
דוגמה לפונקציה בפרויקט שהפלט שלה הוא hello-world
' - מסוג symbol:
(defmodule my-test-lib
(export (my-fun 0)))
;;; -----------
;;; library API
;;; -----------
(defun my-fun ()
'hello-world)
המילה השמורה defmodule
( קיצור של define module ) יוצרת מודול, והמילה השמורה defun
( קיצור של define function ) יוצרת פעולה. על מנת לייצא את הפעולה, משתמשים בפעולה המובנית export
אשר לוקחת כפרטמטר את שם הפעולה ( my-fun
) וכן את מספר הפרמטרים ( 0
).
ציר זמן של ניבי Lisp
[עריכת קוד מקור | עריכה]1955 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2019 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 2, LISP 1.5, LISP 1 | ||||||||||||||
Maclisp | ||||||||||||||
Interlisp | ||||||||||||||
Lisp Machine Lisp | ||||||||||||||
Scheme | R5RS | R6RS | R7RS small | |||||||||||
NIL | ||||||||||||||
Franz Lisp | ||||||||||||||
Common Lisp | ||||||||||||||
Le Lisp | ||||||||||||||
T | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
PicoLisp | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
PLT Scheme | Racket | |||||||||||||
GNU Guile | ||||||||||||||
Visual LISP | ||||||||||||||
Qi, QiII | Shen | |||||||||||||
Clojure | ||||||||||||||
Arc | ||||||||||||||
LFE | ||||||||||||||
Hy |