
لماذا تحقق Elixir / Phoenix نسبة عالية من التبني في صناعة تطوير البرمجيات؟ ما هي أفضل حالات استخدام هذه اللغة؟ هل هناك أي عيوب عند استخدامه؟ تحدثنا إلى Sergiy Kukunin ، وهو مطور متكامل في
Spotlight وخبير Elixir ، للعثور على إجابات لهذه الأسئلة وغيرها.
إيفان: لماذا أصبح إكسير شائعًا جدًا؟
سيرجي: يتميز Elixir بمبادئ نادراً ما تتحقق بلغات أخرى. أيضا ، لأنه يعتمد على Erlang الذي يستخدم لبناء شبكات الاتصالات السلكية واللاسلكية. نتيجة لذلك ، لدينا أداة موثوق بها للغاية للمشاريع ذات الأحمال الكبيرة التي ثبتت بمرور الوقت.
هذا أمر ضروري ، كما في السنوات الأخيرة التقدم التكنولوجي الأجهزة تتباطأ. وصل أداء وحدة أساسية واحدة من وحدة المعالجة المركزية إلى الحد الفعلي البالغ 5 جيجا هرتز. الشيء الوحيد الذي توصلت إليه الشركات المصنعة لزيادة أداء الأجهزة هو استخدام المزيد والمزيد من النوى.
المشكلة في هذا النهج هي أنك تحتاج إلى برنامج قادر على العمل مع نوى متعددة بشكل متوازٍ. لغات البرمجة الكلاسيكية غير مناسبة لمثل هذه المهام. عندما نتحدث عن تعدد مؤشرات الترابط ، على سبيل المثال ، C ، فإننا نعلم أن هناك ذاكرة مشتركة والعديد من مؤشرات الترابط التي قد تتنافس على الموارد. في مثل هذه الظروف ، يكون من الصعب إنشاء رمز موثوق للمشاريع عالية التحميل بسبب ظروف السباق العشوائية وأخطاء التجزئة.
يعمل Elixir على حل هذه المشكلة بفعالية من خلال إدخال نهج جديد في تعدد مؤشرات الترابط.
ما هي المزايا الأساسية لهذه التكنولوجيا؟
السمة الأساسية الأولى للغة القادمة من طبيعتها الوظيفية هي الثبات. بمجرد قيامنا بإنشاء وتحميل بنية البيانات (لا توجد كائنات في اللغات الوظيفية) ، لا يمكننا تغييرها ، إلا عن طريق إعادة إنشائها من الصفر مرة أخرى.
من ناحية ، ترفع هذه الخصوصية حد الدخول لاستخدام Elixir ، حيث لا يمكنك اختيار جزء واحد من التطبيق ومحاولة تسجيل شيء هناك بشكل متكرر ، وينتهي به الأمر إلى تشغيل كل شيء. من ناحية أخرى ، فإن هذا يجعل المهندس يخطط بنية التطبيق بشكل أكثر شمولاً.
جهاز Elixir الظاهري هو حرفيًا نظام تشغيل صغير ، حيث تحتوي كل عملية على مساحة ذاكرة خاصة بها. لا يمكن لأي عملية أخرى الدخول إليها ، واقتراض مواردها. كل ما يمكن القيام به هو إرسال رسالة إلى عملية أخرى ، مع عدم التحكم في كيفية معالجة الرسالة. أيضًا ، نظرًا لأنها لغة وظيفية ، لا توجد هياكل بيانات لا يمكن نقلها بين العمليات ، حتى عبر الشبكة (على عكس النهج المستخدم في اللغات الموجهة للكائنات).
يصعب كتابة كود Elixir نظرًا للقيود المتعددة التي يطبقها وقت التشغيل ، ويستغرق الأمر وقتًا أطول من تكوين شيء باستخدام Java. ومع ذلك ، فإن الموثوقية الإجمالية للتطبيق عالية جدًا.
هل هناك أي بدائل لإكسير؟
النهج الأكثر مماثلة هو coroutines المستخدمة في لغة الذهاب. أيضًا ، توفر نشرات Python والألياف في روبي طريقة مماثلة ، ولكن لا يوجد وقت تشغيل قوي وسريع متاح لتشغيلها. يجب أن يقرر المطور كيفية تشغيل هذه coroutines ، في حين أن Erlang يعالج ذلك بنفسه.
أي أداة لها عيوبها. ما هم لإكسير؟
يعد Elixir اليوم أداة جاهزة للإنتاج ، لكن النظام البيئي العام للغات ما زال صغيراً بعض الشيء. على وجه الخصوص ، هذا يعني أنه لا يمكنك تسجيل الدخول إلى Stack Overflow والعثور على إجابة على أي من أسئلتك المحتملة ، كما يمكنك القيام به على Ruby ، على سبيل المثال. نعم ، هناك كتب ودروس وبعض المدونات ، لكنك ستحتاج باستمرار إلى إجراء البحوث والتجارب لحل الكثير من المهام اليومية. هذا هو العيب الرئيسي بالنسبة لي.
أيضًا ، من الصعب اختبار تطبيقات Elixir نظرًا لأن اختبارات الوحدات أقل فائدة ، وتحتاج إلى التركيز أكثر على تطبيقات التكامل. ومع ذلك ، يجب أن تتذكر أن جميع وظائف Elixir تقريبًا نظيفة ، مما يجعل اختبارات الوحدة أكثر بساطة: يوجد مخرج واحد لكل إدخال.
هل يمكنك وصف الحالة عند استخدام Elixir يوفر الحد الأقصى من النتائج؟
إذا لم تكن لديك أي حاجة حقيقية لدعم الأحمال الكبيرة بملايين الطلبات التي تتم معالجتها بواسطة تطبيقك ، فإن Elixir ليس أداة يجب أن تهتم باستخدامها. ومع ذلك ، فإن Elixir هو الحل الأمثل للمشاريع ذات الأحمال الكبيرة الحقيقية. لا يمكنك حتى كتابة كل تطبيقك باستخدامه ، ولكن استخدام Elixir لأهم أجزاء النظام سيكون دائمًا فكرة جيدة.
في عصر الإنترنت الديناميكي عندما يتوقع المستخدمون سرعات عالية جدًا واستجابة فورية من قبل أي موقع ويب ، خاصة الموارد المتعلقة بالمحتوى. إذا كان لديك ، على سبيل المثال ، منفذ وسائط على الإنترنت به الكثير من الاتصالات المتزامنة من آلاف القراء الذين يرغبون في تلقي تحديثات الأخبار على الفور ، فإن الانتقال إلى Elixir سيجعل حياتك أسهل كثيرًا.
تجربة شخصية: في أحد المشروعات ، كان لدينا تطبيق ويب Node.js كان قادرًا على الحفاظ على ما يصل إلى 20.000 اتصال في وقت واحد. بعد الانتقال إلى Elixir ، ارتفع هذا الرقم إلى 80،000 مع عدم وجود تغييرات في منطق العمل أو smth. كانت هذه النتيجة ممكنة فقط بسبب تحسين كفاءة اللغة التي استخدمناها.
يسمح Elixir بصنع أشياء لم تكن متصورة قبل بضع سنوات ، مثل إنشاء ألعاب عبر الإنترنت يتم عرضها بالكامل على جانب الخادم باستخدام مآخذ الويب. يوجد مثال على لعبة Snake على الويب المكتوبة على Elixir مع عدم وجود كود JavaScript على الإطلاق.
ومع ذلك ، يجب أن يفهم المطورون أنه لا توجد رصاصة فضية. لا يمكن أن يوفر لك Elixir أكثر من الجهاز الظاهري Erlang الذي كان يحق له في البداية. إنه يترجم بناء جملة جديدًا حتى يتمكن المترجم القديم الجيد الذي أنشأته إريكسون في أواخر التسعينيات من فهمه. هذا مثال مثالي على كيف يمكن للتكنولوجيا التي أثبتت كفاءتها إلى جانب التكنولوجيا الجديدة أن تفتح إمكانيات جديدة للمطورين ، ولكن هناك دائمًا بعض القيود.
ما هي نصيحتك عند البدء في استخدام إكسير؟ ما هي التكنولوجيا التي يجب على المرء أن يدرسها ويعمل بشكل أسرع؟
حسنًا ، يحتوي بناء جملة Elixir على بعض العناصر المشتركة مع روبي. تختلف اللغات تمامًا ، لكن من الجيد دائمًا رؤية الرموز والعناصر التي اعتدت عليها. أبسط شيء هو استخدام بعض أطر تطوير الويب الجديدة المتوافقة مع Elixir. إطار الويب الأكثر شعبية لـ Elixir هو Phoenix. يجب عليك بالتأكيد تجربته ، خاصة إذا كنت معتادًا على استخدام روبي أون ريلز. سيؤدي ذلك إلى تبسيط التطوير مع الاستمرار في جعل التطبيق أسرع وأكثر موثوقية.