الیکسیر (زبان برنامهنویسی)
الیکسیر (به انگلیسی: Elixir) یک زبان برنامهنویسی تابعی، همروند با کارایی عمومی است که بر روی ماشین مجازی ارلنگ (BEAM) اجرا میشود. الیکسیر بر روی ارلنگ ساخته شدهاست تا بتواند امکان نوشتن برنامههای توزیعشده، مقاوم در برابر خطا، زنده و بدون وقفه را ارائه کند، اما با گسترش این امکانات، ویژگیهای برنامهنویسی متا با استفاده از ماکروها و چندریختی از طریق پروتکلها را نیز فراهم میکند.
پارادایم برنامهنویسی | پارادایم برنامهنویسی: برنامهنویسی تابعی، concurrent، رایانش توزیعشده، process-oriented |
---|---|
ظهوریافته در | ۲۰۱۱ |
انتشار پایدار | ۱٫۵٫۱
۱ اوت ۲۰۱۷ |
dynamic، وابستگی زیاد و کم به نوع | |
بنسازه رایانش | ارلنگ |
پروانه | مجوز آپاچی |
.ex, .exs | |
وبگاه | |
متأثر از | |
ارلنگ، روبی (زبان برنامهنویسی)، کلوژر | |
تأثیر گذاشته بر | |
LFE |
تاریخچه
خوزه ولیم (José Valim) سازنده زبان برنامهنویسی الیکسیر است، یک پروژه تحقیق و توسعه در شرکت Plataformatec. هدف او فراهم کردن گسترشپذیری و بهرهوری بیشتر در ماشین مجازی ارلنگ بود، به شکلی که با ابزارها و اکوسیستم ارلنگ سازگار باقی بماند.
ویژگیها
- یک زبان که به بایتکد ماشین مجازی ارلنگ (BEAM) کامپایل میشود.
- همه چیز یک عبارت است.
- توابع ارلنگ به دلیل کامپایل به بایتکد ارلنگ و برعکس، میتوانند بدون داشتن هیچ تأثیری بر روی سرعت اجرا فراخوانی شوند.
- برنامهنویسی متا امکان تغییر مستقیم AST را فراهم میکند.
- امکان چندریختی از طریق مکانیزمی که «پروتکل» نامیده میشود. مانند کلوژر، پروتکلها یک مکانیزم توزیع پویا را فراهم میکنند.
- پشتیبانی از مستندات از طریق docstringهای مشابه پایتون.
- برنامهنویسی همروند بدون اشتراک چیزی از طریق انتقال پیام (مدل Actor)
- همروندی کم حجم با استفاده از ابزارهای و مکانیزمهای ارلنگ و سینتکس ساده (برای مثال Task)
- انطباق الگو
- پشتیبانی از یونیکد و رشتههای UTF-8.
مثالها
مثالهای مقابل میتوانند در یک پوسته iex، یا با ذخیره کردن در یک پرونده و تایپ دستور elixir <filename>
از طریق خط فرمان اجرا شوند.
مثال Hello World کلاسیک:
iex> IO.puts "Hello World!"
Hello World!
ادراک
iex> for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
[1, 9, 25]
انطباق الگو
iex> [1, a] = [1, 2]
iex> a
2
iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"
ماژولها
defmodule Fun do
def fib(0), do: 0
def fib(1), do: 1
def fib(n) do
fib(n-2) + fib(n-1)
end
end