Elixir

Elixir היא שפת תכנות פונקציונלית וכללית, אשר תומכת בעיבוד מקבילי. היא שוחררה לראשונה בשנת 2011 ורצה על המכונה הווירטואלית BEAM של שפת התכנות Erlang.

Elixir רצה מעל Erlang ולפיכך חולקת אבסטרקציות זהות לבניית אפליקציות מרושתות וגם היא נחשבת ל-Fault Tolerant, כלומר, מסוגלת להמשיך לרוץ גם כאשר אחד מרכיביה נכשל, בהתאם לסגנון הקידוד "Let It Crash" ("תן לזה להתרסק"), המתבסס על ההנחה שקריסה של רכיב היא בלתי נמנעת, ולכן אין להשבית את כל המערכת בעקבות זאת. בנוסף, Elixir גם מספקת כלים פרודוקטיביים ועיצוב שניתן להרחיבו. עיצוב זה תומך במטא-תכנות באמצעות תוכניות מאקרו, ובפולימורפיזם באמצעות פרוטוקולים. Elixir נמצאת בשימוש של חברות כגון PagerDuty, Discord, Brex, E-MetroTel, Pinterest, Moz, Bleacher Report, The outline, Inverse, Divvy, Farmbot וכן לצורך בניית מערכות משובצות מחשב. הקהילה מארגנת אירועים שנתיים בארצות הברית, אירופה, ויפן, וכן אירועים קטנים וכנסים.

== היסטוריה ==
José Valim הוא היוצר של שפת התכנות Elixir. מטרותיו היו לאפשר יכולת הרחבה ופרודוקטיביות גבוהות יותר במכונה הווירטואלית של Erlang תוך כדי שמירה על תאימות עם Erlang .

José Valim התכוון ליצור שפת תכנות בשביל יישומים ואתרים גדולים. בהיותו מפתח בשפת התכנות Ruby, הוא השתמש בפיצ'רים של Ruby, Erlang, ו- Clojure על מנת ליצור יכולת עיבוד מקבילי גבוהה וכן זמן השהייה ( latency ) נמוך יותר. Elixir תוכננה על מנת לטפל בכמויות גדולות של מידע. מהירותה ויכולותיה הגבוהות מזכות את Elixir במקום מכובד בתעשיות הפיננסיות, הטלקומונקציה, והמסחר האלקטרוני (eCommerce).

== פיצ'רים ==

* מהודר לבייטקוד בשביל BEAM (המכונה הווירטואלית של Erlang).
* בשפה הכל מקבל יחס של ביטוי
* פעולות של Erlang יכולות להיקרא מתוך Elixir, ולהפך, מבלי להשפיע לרעה על זמן הריצה, בזכות ההידור לבייטקוד של Erlang.
* מטא-תכנות המאפשר גישה ישירה לעץ תחביר אבסטרקטי (Abstract Syntax Tree, או בקיצור AST).
* פולימורפיזם באמצעות מכניזם של "פרוטוקולים", אשר בוחרים איזה מימוש של תהליך פולימורפי להריץ בזמן ריצה.
* דגש על רקורסיה ועל פעולות מסדר גבוה יותר (פעולות אשר מקבלות פעולה כפרמטר, או מחזירות פעולה), במקום הגישה האיטרטיבית (שינוי ערכים באמצעות לולאה)
* עיבוד מקבילי באמצעות שימוש ב-Erlang.
* כלים מובנים לניהול ספריות וקובצי עזר חיצוניים, הידור קוד, הרצת מבחנים, סידור הקוד בפורמטים, ניפוי שגיאות (דיבוג), ועוד.
* תמיכה במחרוזות של Unicode ו- UTF-8 .

== דוגמאות קוד ==
את הדוגמאות הבאות ניתן להריץ בקונסולת <code>iex</code> או לשמור בקובץ ולהריצן בשורת הפקודה בתחביר הבא: <code><elixir <filename</code>.

תוכנית Hello World בסיסית:<syntaxhighlight lang="elixir">
iex> IO.puts("Hello World!")
Hello World!
</syntaxhighlight>ביצוע פעולות אחידות ומקוצרות לרשימה (List Comprehensions):<syntaxhighlight lang="elixir">
iex> for n <- [1,2,3,4,5], rem(n, 2) == 1, do: n*n
[1, 9, 25]
</syntaxhighlight>השלמת דפוסים:<syntaxhighlight lang="elixir">
iex> [1, a] = [1, 2]
iex> a
2

iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"
</syntaxhighlight>

== פרויקטים ידועים ב-Elixir ==
* Mix הוא כלי אוטומציה אשר מספק משימות לצורך יצירה, הידור, ובחינת פרויקטים, ניהול ספריות נתמכות (dependencies) וכדומה.
* Phoenix היא תשתית פיתוח בסביבת האינטרנט אשר כתובה ב-Elixir ומממשים את מודל ה-Model View Controller, (או בקיצור MVC) בצד השרת.
* Nerves היא פלטפורמה, תשתית, וסביבה המספקת כלים לצורך בניית מערכות ומכשירים משובצים מחשב.

== ראו גם ==
* תכנות פונקציונלי
* Erlang
* Ruby
* Clojure

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

* 

קטגוריה:שפות תכנות פונקציונליות