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

תוכן שנמחק תוכן שנוסף
מאין תקציר עריכה
מאין תקציר עריכה
שורה 16:
}}
 
'''Erlang (אֶרְלַנְג)''' היא שפת תכנות כללית ו[[תכנות פונקציונלי|פונקציונלית]] אשר נוצרה על ידי מדעני המחשב ג'ו ארמסטרונג, רוברט וירדינג, ומייק ויליאמס ושוחררה לראשונה בשנת [[1986]]. Erlang תומכת הן בתכנות פונקציונלי והן ב[[עיבוד מקבילי|תכנות מקבילי]] ולפיכך נחשבת לשפה מרובת פרדיגמות תכנות. Erlang מתוכננת על מנת לתמוך בין היתר ב[[מערכת זמן אמת|מערכות זמן אמת]] (מערכות אשר חייבות לעמוד במגבלת זמן מסויימתמסוימת) מרושתות (Distributed). היא תומכת בין היתר בהצהרת קבועים, [[פקודת השמה|השמה]] ו[[מערכת טיפוסים|טיפוסיות]] דינמית. בנוסף, היא נחשבת ל-Fault Tolerant, כלומר, מסוגלת להמשיך לרוץ גם כאשר אחד מרכיביה נכשל, בהתאם לסגנון הקידוד "Let It Crash" ("תן לזה להתרסק"), המתבסס על ההנחה שקריסה של רכיב היא בלתי נמנעת, ולכן אין להשבית את כל המערכת בעקבות זאת.
 
ב-1986 כאשר היא שוחררהיצאה לאור לראשונה, הייתה Erlang תוכנה פרטית (Proprietary Software) בראשות תאגיד התקשורת וה[[טלקומוניקציה]] השוודי Ericsson. בשנת 1998 היא שוחררה כתוכנה חופשית ומגיעה עם ספריות העזר החופשיות '''OTP''' ( קיצור של '''Open Telecom Platform''').
 
== היסטוריה ==
שורה 56:
אלגוריתם המיון [[מיון מהיר|Quicksort]] ב-Erlang:<syntaxhighlight lang="erlang">
%% Sort a list of items
-module(qsort). % This is the file 'qsort.erl'
-export([qsort/1]). % A function 'qsort' with 1 parameter is exported (no type, no name)
 
qsort([]) -> []; % If the list [] is empty, return an empty list (nothing to sort)
qsort([Pivot|Rest]) ->
% Compose recursively a list with 'Front' for all elements that should be before 'Pivot'
% then 'Pivot' then 'Back' for all elements that should be after 'Pivot'
qsort([Front || Front <- Rest, Front < Pivot]) ++
[Pivot] ++
qsort([Back || Back <- Rest, Back >= Pivot]).
</syntaxhighlight>
 
שורה 71:
{{להשלים}}
ב-Erlang ישנם 8 סוגי נתונים פרימטיביים:
* '''Integers''' (מספרים שלמים) –
 
* '''Integers''' (מספרים שלמים) –
* '''Atoms''' – נכתבים כמחרוזות של תווים אלפאנומרים עוקבים, כאשר הראשון הוא אות קטנה (lowercase). משמשים על מנת לציין ערכים שונים.
* '''Floats''' – משתנים עשרוניים (Floating Point Numbers).
שורה 78 ⟵ 77:
* '''Binaries''' – אוסף של בתים (bytes). בית בהגדרתו הוא 8 סיביות, כלומר, 8 ספרות בינאריות.
* '''Pids''' – קיצור ל-Process Identifiers (מזהי תהליכים). Pid הוא הפניה לתהליך של Erlang והוא נוצר על ידי הפעולה <code>(...)spawn</code>.
* '''Ports''' – פורטים נוצרים על מנת לתקשר עם העולם החיצוני. הם נוצרים עם הפעולה המובנית <code>open_port</code>. הודעות יכולות להישלח ולהתקבל מפורטים, אך הן חייבות למלא אחר [[פרוטוקול תקשורת|פרוטוקול]] אשר נקרא "port protocol".
* '''Funs''' (קיצור של Functions) – פונקציות, פעולות. הן נוצרות בתחביר הבא: <code>fun(...) -> ... end</code>.
 
ושלושה סוגי נתונים מורכבים:
שורה 87 ⟵ 86:
 
ושתי צורות של [[סוכר תחבירי]]:
* '''Strings''' – רשימה של תווים המוגדרת בדרך כלל באמצעות גרשיים כפולים (מרכאותמירכאות), כקיצור לרשימה עם ערכי ה-unicode של התווים. לדוגמה, ניתן לייצג את המילה cat (שמשמעותה בעברית חתול) כך: <code>״cat״</code> וכך: <code>[99,97,116]</code>.
* '''Records''' – מאפשרים דרך נוחה לשייך תג לכל איבר ב-tuple, כלומר, לפנות לאלמנט ב-tuple באמצעות שם ולא מקום (מציין, אינדקס). תהליך אשר מתקיים לפני ההידור לוקח את הגדרת ה-Record ומחליף במקומו את המקום המתאים כאשר מתייחסים אליו.
 
שורה 97 ⟵ 96:
 
=== Let It Crash ("תן לזה לקרוס") ===
מתכנני Erlang הבינו כי על אף פי השלכותיהן השליליות, קריסות תוכנה הן בלתי נמנעות. לכן, במקום לטפל בקריסה נקודתית כמצב חירום אשר משהה את כל הפעילות הרגילה עד למציאת פתרון, הם חשבו שיהיה יותר רציונלי לטפל בקריסה נקודתית בדיוק כמו אירוע (event) אחר בזמן ריצה. לכן, כאשר תהליך ב-Erlang קורס, סיטואציה זו מדווחת רק כסוג אחר של הודעה.
 
==== ההשלכות על עיצוב Erlang ====
שורה 112 ⟵ 111:
ביישום טיפוסי ב-Erlang תהליכים מנוהלים בצורה של [[עץ בינארי|עץ]] פיקוח. ארכיטקטורה זו מבוססת על ההיררכיה של תהליכים, כאשר התהליך בעל המעמד הגבוה נקרא '''supervisor''' והוא אחראי על פיקוח וניהול של תהליכים שבחסותו ('''Child Proccesses'''). גם תהליך אשר נמצא בפיקוח על ידי תהליך אחר בעל מעמד גבוה יותר בהיררכיה, יכול לפקח על תהליכים משלו, וכך נוצרת היררכיה בעלת תהליכים רבים אשר מפקחים ומפוקחים. על העץ המפקח בין היתר נדרש לטפל במקרי קצה של התהליכים שבחסותו – כגון קריסה שלהם. במקרה של קריסה של אחד מהם יקבל העץ המפקח הודעה המכילה tuple שאיברו הראשון יהיה הערך מסוג הנתונים '''Atom''' (אטום) <code>'DOWN'</code>.
 
העץ המפקח אחראי להקשיב להודעות כאלו, ולאחר מכן גם לנקוט בפעולה המתאימה בהתאם לתוכן העבודה.
 
== מימוש ==
המימוש הרשמי של Erlang משתמש ב-BEAM – המכונה הוירטואליתהווירטואלית של Erlang.
 
BEAM כלולה בהפצה הרשמית של Erlang, שנקראת Erlang/OTP. היא מריצה [[Bytecode]] אשר מומר בזמן ריצה ל-[[Threaded code]] {{אנ|Threaded code}}. בנוסף המימוש הרשמי מכיל מהדר אשר נוצר על ידי HiPE (ראשי תיבות של Performance Erlang Project) באוניברסיטת אופסלה בשוודיה, וגם מפרש אשר ממיר ישירות מקוד מקור באמצעות עץ נתונים – abstract syntax tree. מאז אוקטובר 2001, המהדר נמצא באינטגרציה מלאה עם המימוש Erlang/OTP.
 
== ראו גם ==
שורה 132 ⟵ 131:
==הערות שוליים==
{{הערות שוליים|יישור=שמאל}}
[[קטגוריה:טלקומוניקציה]]
 
[[קטגוריה:שפות תכנות פונקציונליות]]
[[קטגוריה:טלקומוניקציה]]