چرا الیکسیر؟ (Elixir)

چرا الیکسیر؟ (Elixir)
الیکسیر تقریباً زبان برنامهنویسی جدیدی است که در بین توسعهدهندگان محبوبیت زیادی یافته است. خوزِه وَلیم [1] که سالها در جمعیت توسعهدهندگانِ Ruby بود این زبان را در سال 2010 ساخت. در آن زمان خوزه و همکارانش در Plataformatec در جستجوی راهی برای بهبود عملکرد برنامههای کاربردی Rails که بر چند CPU اجرا میشوند بودند. این نوع برنامههای کاربردی با مانع مشابهی مواجه میشدند: با مدل همزمانیِ Ruby. زبانیِ روبی برای بیشتر مواقع بسیار مناسب بود اما برای نوشتن کد همزمان مناسب نبود.
خوزه در تحقیقاتش در مورد فناوریهای دیگری که برای همزمانی مناسب بودند Erlang را پیدا کرد و به آن علاقهمند شد. چون ماشین مجازی اِرلنَگ [2] (که به BEAM معروف است) برای مشکلاتی مناسب بود که او درصدد حل آن بودند، خوزه معتقد شد که زبان ارلنگ فاقد سازههایی است که در دیگر زبانهای برنامهنویسی وجود دارند. همین موقع تصمیم گرفت الیکسیر را بسازد؛ الیکسیر، رویکرد مدرنی به برنامهنویسی تابعی بود که دههها تجربۀ جمعیت Erlang را بهکار میگرفت. برنامههایی که در الیکسیر نوشته میشوند در بایتکدِ [3] ارلنگ کامپایل میشوند و با ماشین مجازی اِرلَنگ [4] اجرا میشوند.
اگر برنامهنویسی تابعی برای شما جدید است، شاید نوشتن کد الیکسیر موجب تغییراتی در تفکر برنامهنویسی شما بشود؛ اما شاید اتفاق بدی نباشد. آلن پرلیس، دانشمند رایانۀ مشهور معتقد است که «زبانی که بر شیوۀ تفکر شما در مورد برنامهنویسی تأثیر نمیگذارد، ارزش یاد گرفتن ندارد».
ویژگیهایی هستند که در زبانهای برنامهنویسیِ محبوب مثل Ruby، Python، PHP و C# مشترکاند اما جزء Elixir نیستند، مثلِ کلاسها، اشیاء و حلقهها. منظور این نیست که در الیکسیر نمیتوان مخفی سازی [5] انجام داد، کدهای ناهمبسته [6] نوشت، یا در مجموعهها تکرار کرد؛ بلکه این کارها بهطور متفاوتی انجام میشود.
حتی با برخی از ویژگیهای الیکسیر مانند توابع کلاس اول، انطباق الگویی [7]، عملگر پایپ [8] (|>) و عملکر کانز [9] (|) و نیز تکنیکهایی مثل بازگشت (ریکِرژن [10] ) میتوانیم برنامههایی را بنویسیم که واقعاً مثل زبانهای غیرتابعی (یا حتی بیشتر از آنها) خوانشپذیر باشند.
اگر مایلید با الیکسیر بیشتر آشنا شوید، خط دید پیشنهاد میکند که دوره های رایگان الیکسیر را در وبگاه CodeSchool امتحان کنید. در این دوره این زبان بهسرعت معرفی میشود و سه ویژگی اصلی آن پوشش داده میشود: توابع، عملگر پایپ و انطباق الگویی.
[1] José Valim
[2] Erlang Virtual Machine
[3] Bytecode
[4] Erlang Virtual Machine
[5] encapsulation
[6] Decoupled
[7] Pattern matching
[8] pipe
[9] Cons
[10] recursion