عشر سنوات من البرمجة في Erlang


انضممت إلى مجتمع إرلانج منذ حوالي 10 سنوات ، في منتصف المرحلة الأولى من الضجيج. قيل لنا إن Erlang هو مستقبل المنافسة والتزامن. إن تنفيذها بهذه اللغة هو الأسهل والأسرع ، وما زلت تحصل على توزيع مجاني. في ذلك الوقت ، بدا المستقبل غير معقول. حصل الجهاز الظاهري مؤخرًا على دعم SMP ، ولكن من أجل استخدام جميع المعالجات فعلاً ، كان عليك تشغيل العديد من الأجهزة الافتراضية على نفس الكمبيوتر.

أريد أن أفكر في العقد الماضي. سأتحدث في هذا المقال عن مراحل الضجيج فيما يتعلق بإرلانج ، وسلم الأفكار في اللغة وتأثيرها المحتمل على توزيع اللغة ، وعن التغييرات التي مررت بها خلال هذه السنوات العشر. في الختام ، سوف أشارك أفكاري حول ما لم يجلبه إرلانج إلى مجتمع المبرمجين ككل.

مرحلة الضجيج


تتكون دورة الضجيج من مراحل دورة حياة منتج أو تقنية. هذا مفهوم تسويقي ، وليس مفهومًا علميًا ، ولكنه غالبًا ما يساعد في وصف جوهر ما يحدث. ما يهمني أكثر هو مرحلة الضجيج ، نوع من الاندفاع الذهبي الذي يغطي مجتمع المبرمجين. ربما واجهتك هذا أكثر من مرة ، وجميع هذه المراحل مرتبطة ببعض التطبيق القاتل الذي يسارع الجميع لاستخدامه.

الأمثلة التي تتبادر إلى الذهن فورًا هي Ruby on Rails و How to Build a Blog Engine في 15 دقيقة (العبارة "انظر إلى كل ما لا أفعله!" ما زالت مضحكة) أو Go with Kubernetes (لقد عملوا معًا قبل ذلك ، و ثم كان هناك طفرة مباشرة). وهذا يشمل إكسير وفينيكس.

خلال مرحلة الضجيج ، هناك تدفق لا يصدق من القادمين الجدد الذين يرغبون في معرفة ما تدور حوله كل هذه الضجة. يبقى شخص ما ، معظم إجازة. يمكنك البقاء لعدة أشهر أو سنوات ، وفي حالات نادرة تجد نفسك منزلًا لعقود. ومع ذلك ، فإن الغالبية العظمى هي دفق مستمر من الأشخاص المتسللين الذين ينتقلون من التكنولوجيا إلى التكنولوجيا ، ويبحثون عن فرص للاستفادة من حقيقة أنهم أول من يستخدمون إطار عمل أو لغة أو مجموعة أدوات.

في أغلب الأحيان تحتاج إلى إنشاء "تطبيق قاتل" حقيقي ، وسوف يصل الناس إلى النظام البيئي الخاص بك. تطبيق القاتل يحفز الإثارة. إذا قمت بكتابتها ، سوف يأتون إليك. وإذا أمكنك الاحتفاظ بجزء صغير منها والاحتفاظ بها نشطة ، فستكون لديك مجتمع نشط في المستقبل المنظور. هذا يذكرنا إلى حد ما بفكرة المطر بعد المحراث :

الرب يقود المحراث ... بعد هذا التعديل الرائع ، الذي هو سيطرة الرجل الوحيدة على الطبيعة ، تصب الغيوم أمطارًا غزيرة ... [المحراث] هي أداة تفصل الحضارة عن الهمجية ، وتحول الصحراء إلى مزارع وحدائق. ... باختصار ، المطر يتبع المحراث.

كان جوهر النظرية هو أن للسكن البشري والزراعة تأثير لا رجعة فيه على مناخ المناطق القاحلة وشبه القاحلة ، مما يجعل هذه المناطق أكثر رطوبة. أصبحت هذه النظرية واسعة الانتشار في سبعينيات القرن التاسع عشر كمبرر لاستيطان السهول الكبرى ، وهي منطقة كانت تُعرف سابقًا باسم الصحراء الأمريكية الكبرى. في تلك السنوات ، استخدمت هذه النظرية لتبرير التوسع في محاصيل القمح في الأراضي الهامشية في جنوب أستراليا.

إذا استطعنا إطلاق مشروع كبير ، فسيظهر المطورون ، وسيصبح الاكتفاء الذاتي. أعتقد أن هذه الفكرة خاطئة بشكل واضح ، وذلك لأن إرلانج كان لديه عشرات التطبيقات القاتلة خلال أكبر مرحلة من الضجيج ، لكن المجتمع لا يزال صغيرًا. فيما يلي أمثلة لهذه التطبيقات:

  • ejabberd (2002 ، أول إصدار ثابت في عام 2005): كان أحد أكثر خوادم الدردشة ، إن لم يكن أكثرها قابلية للتوسعة. لقد حقق Ejabberd نجاحًا كبيرًا ، ولا يزال إلى حد ما ذا صلة. اليوم على StackOverflow لا تزال هناك أسئلة حول الوحدات النمطية لهذا الخادم. حوالي عام 2011 ، كان متشعبًا إلى MongooseIM ، ولا يزال كلا الحلين مدعومين.
  • CouchDB (2005): واحدة من قواعد البيانات الأكثر شعبية مكتوبة في Erlang ، والتي كانت تستند إلى نظرية CAP . إنه يشير إلى وقت ظهور مستودعات متعددة الوسائط. على الرغم من أن MongoDB استحوذ على الجزء الأكبر من السوق ، إلا أن CouchDB له خلفاء روحيين بين محركات التخزين مثل BarrelDB ، الذي لا يزال مدعومًا.
  • RabbitMQ (2007): خادم انتظار الرسائل الذي سحق معظم سوق AMQP. تتطور وتتنافس مع شركة Kafka غالبًا عندما يتعلق الأمر بتدفق الأحمال ، على الرغم من أن هذه المنتجات لديها إمكانيات وتطبيقات مختلفة.
  • محادثة فيسبوك (2008): تم كتابة الإصدار الأولي من محادثة فيسبوك باللغة Erlang. لعدد من الأسباب الداخلية (الاستقرار ، وعدد كبير من مبرمجي C ++ وعدد من الحلول الثابتة) تمت إعادة كتابته لاحقًا في C ++.
  • WhatsApp (2009 ، الذي تم شراؤه في عام 2014): عندما تخلص Facebook من نظام الدردشة Erlang ، قاموا بشراء WhatsApp ، والذي تطلب فقط 50 مهندسًا مقابل 900 مليون مستخدم لدعمهم. إنه يعيش حتى يومنا هذا ، والأكثر من ذلك ، عزز فريق WhatsApp علاقاته مع مجتمعي Erlang و Elixir.
  • رياك (2009): أحد أفضل أمثلة القوة التوضيحية في عالم الأنظمة الموزعة. كان Riak تخزينًا موزعًا موثوقًا به من النوع ذي القيمة الأساسية. هذا هو منتج Basho الذي لا يزال يعمل في أنظمة الرعاية الصحية وغيرها من أجزاء البنية التحتية الحيوية. في وقت لاحق Basho أفلست (إلى حد كبير بسبب انتهاكات الواجبات الائتمانية ، والتي "بأقصى سرعة أدت الشركة إلى الانهيار" ). ثم اشترى Bet365 جميع عناوين IP الخاصة به ، وافتتحها بسخاء ، ومنذ ذلك الحين ، كانت قاعدة البيانات تعيش في عالم مفتوح المصدر ، على الرغم من أنها تمر اليوم بأوقات عصيبة.

تم إصدار العديد من هذه المنتجات خلال الجولة الأولى من كتاب Joe Armstrong's Programming Erlang . ونتيجة لذلك ، نشأ انفجار في شعبية اللغة ، واكتسب إيرلانغ الكثير من المعجبين. كان هناك تأثير كبير حتى حقيقة أن أخبار هاكر أجبرت جميع المناقشات على Innards of Erlang . ومع ذلك ، بقيت قلة وفية لهذه اللغة.

الآن أعتقد أن التطبيقات القاتلة يتم إنشاؤها بواسطة أشخاص يشكلون المرحلة الأولى من الضجيج ، وليس العكس. يوجد دائمًا جزء صغير من الأشخاص الذين يبحثون عن تقنيات مثيرة للاهتمام قبل الآخرين ، ويقررون ما إذا كانوا يحبونهم ، ثم يصنعون شيئًا ما ، وإذا كنت تحصل على تطبيق قاتل ، فإنه يحفز تطوير مرحلة أقوى من الضجيج. سينخرط الناس في عبادة الشحن ، وستنتج المشاريع الناجحة المقلدين. كذلك ، فإن الوضع القياسي هو مرحلة "اختراع العجلة" ، عندما يقضي الجميع وقتهم في إعادة اختراع الأشياء القائمة ، وهناك موجة من الرسائل حول "تنفيذ X ، ولكن بلغة Y".

ومع ذلك ، مجرد إنشاء تطبيق قاتل لا يكفي. الغريب أن كل هذه المنتجات ، مثل RabbitMQ و Ejabberd ، على الرغم من شعبيتها ، لديها مجتمع مستخدم أكبر بكثير من مجتمع المطورين. الآلاف والآلاف من الشركات التي تستخدم هذه المنتجات لا تسهم بالضرورة بشكل كبير في مجتمع Erlang.

هذا يرجع جزئيا إلى حقيقة أن معظم تطبيقات القاتل Erlang تستخدم في البنى التحتية المتخصصة. لقد قمت بإنشاء مكون موثوق به للغاية في شكل صندوق أسود يستخدمه الجميع ، وإذا كان يعمل بشكل جيد ، فلن ينظر أحد إلى الداخل. قدم العشرات من المطورين الأساس لآلاف من المنتجات والخدمات الأخرى. البنية التحتية المتخصصة ، بحكم تعريفها ، لا تحتاج إلى عدد كبير من الناس لضمان تأثيرها على نطاق واسع. تحتوي دائمًا على عدد قليل من المطورين ومجتمع صغير مقارنة بالتقنيات التي تكون أقرب إلى المنتج النهائي ، على سبيل المثال ، أطر الويب ، أو حتى البنى التحتية المعممة الأكثر المستخدمة في مشاريع النشر الصغيرة المناسبة لأي شركة.

ولكن حتى مع كل هذا ، من الواضح أن إرلانج أخطأ في الحديث عن الكثير من الأشخاص الذين مروا به خلال مرحلة الضجيج.

درج الأفكار


لن أتخبط عما كان يمكن أو كان ينبغي القيام به. بدلاً من ذلك ، أريد أن أتحدث عن أنماط التعلم الشائعة التي واجهتها في مجتمع Erlang على مدار سنوات تدريسي وبرمجة هذه اللغة. ألاحظ الأنماط نفسها اليوم في مجتمع Elixir ، وقد يشير هذا إلى مستقبل مماثل له.

لديّ نظرية مفادها أن موضوع تقني مثل لغة البرمجة (ونظامه الإيكولوجي) له عدة مستويات من التعقيد توجد فيها مفاهيم مختلفة. لقد استخدمت هذه النظرية في مشروع " تعلم أنت بعض إرلانج" . يتم تقديمه في الرسم التخطيطي ، والذي أسميته دوائر التسعة إيرل .

بالطبع ، هذه فكرة مثيرة للسخرية ، لا أعتقد أن دراسة التكنولوجيا هي معاناة لا نهاية لها (على الأقل لا ينبغي أن تكون). أنا فقط أحب التورية. ببساطة ، هناك دائمًا نوع من المسار أو التسلسل "الرئيسي" لأولئك الذين تتعلمهم عند دراسة التكنولوجيا - هذا هو "سلم الأفكار" ، وكلما كان المفهوم أعلى على هذا السلم ، كلما كان تحقيقه أكثر قيمة وصعوبة ، كلما قل عدد الأشخاص اعرفها

كيف يبدو سلم الأفكار في إرلانج:

  1. البرمجة الوظيفية.
  2. العمليات المعزولة والقدرة التنافسية.
  3. القدرة التنافسية الموثوقة (الروابط ، الشاشات ، المهلات).
  4. مبادئ مكتب المدعي العام وغيرها من أنظمة التجريد.
  5. كيفية هيكلة النظم وفقا لمبادئ مكتب المدعي العام.
  6. كيفية جمع الإصدارات والعمل معهم (النشر).
  7. كيفية منع تعطل النظام والعمل معه.

إذا تعرفت فقط على Erlang واشترت كتابًا للمبتدئين ، فربما تقضي الأيام الأولى في الخطوة الأولى من السلم: التعرف على البرمجة الوظيفية ، والثبات (القابلية للتغيير) ، العودية ، وغيرها من المفاهيم المشابهة. عاجلاً أم آجلاً سوف تحصل على القدرة التنافسية والتوازي والعمليات والمراسلة. بعدهم مباشرة ، سوف تبدأ في التعرف على الروابط والشاشات ، ومعالجة حالات الفشل ، وما الذي يقوم به إرلانج على ما هو عليه. خلال مرحلة الضجيج الكبيرة ، تضمنت الخطوتان الثانية والثالثة فرصًا تبدو لمعظم المراقبين غير معقولة. إذا كنت بحاجة إلى معرفة شيء ستستخدمه في جميع المشاريع المستقبلية ، فيمكنك اختيار إحدى ميزات Erlang هذه.

يمكنك الانتقال إلى خطوات أخرى لاحقًا ، ولكن فقط إذا كنت تلتزم ببرنامج التدريب خطوة بخطوة. على وجه الخصوص ، يمكن وصف OTP (المرحلة الرابعة) بأنها "ما هو كل شيء". القدرة التنافسية والبرمجة الوظيفية جيدة ، لكن الإطار العام المقدم مع OTP كان فريدًا بالفعل ويحتاج إلى استخدامه. مع مرور الوقت ، سيعمل الكثيرون معه ، ويجدون أنه بإمكانهم إنشاء أعمال تجريدية باردة ، لكنهم لن يحبون مقاربة التنظيم.

في الواقع ، لإنشاء تطبيقات مثل Ejabberd ، كان يكفي للتغلب على الخطوة الرابعة. في تلك الأيام ، كان النظام الإيكولوجي يشبه الغرب المتوحش ، وكانت معرفة مكتب المدعي العام مملوكة من قبل متخصصين يعملون في شركة إريكسون ، بالإضافة إلى أكثرهم تحفيزية. لم يصل معظمهم إلى المرحلة الخامسة ، إلا إذا أرسلوا شيئًا إلى الإنتاج ثم واجهوا مشاكل ، أو إذا لم يبحثوا عن حل أفضل. كان تحقيق الخطوة السادسة نادرًا حتى 2015-2016 ، ثم ظهر Relx ، الأمر الذي سهّل عملية تجميع الإصدارات وتطورها. لم يصل أي شخص تقريبًا إلى الخطوة السابعة ، ويعتقد الكثير من الأشخاص أنه لا ينبغي لهم إجراء تحديث ساخن لعقدة Erlang ، ومن الناحية المثالية ، لن تحتاج أبدًا إلى استخدام SSH لتصحيح الأخطاء في الإنتاج.

في الممارسة العملية ، لا يصعد الجميع سلم الأفكار بنفس الترتيب ؛ يتم عكس خطواتها في بعض الكتب (على سبيل المثال ، في Erlang و OTP in Action ). لا حرج في ذلك ، فقد اخترع الدرج تمامًا كتوضيح.

حجم المجتمعات يتغير في الأمواج. خلال مراحل الضجيج ، يمكن أن يزداد الحجم لبعض الوقت بعشرات أو مئات المرات ، وسيكون كل هؤلاء الأشخاص فضوليين ويتركونهم. يجلس معظم المشاركين على الخطوة الأولى من الدرج ونادراً ما يتركونها وراءهم. يرتفع البعض إلى المرحلة الثانية ، حتى أقل إلى الثالثة ، وهكذا ، حتى تصل إلى دائرة ضيقة من الخبراء على أعلى مستوى.

أعتقد أن تسلق الخطوات الثلاث الأولى لإرلانج كان سهلاً. للصعود إلى المركز الرابع ، كان من الضروري التطوير لعدة سنوات ، والشعور بالحاجة إلى مزيد من الدراسة. في الخطوة الخامسة هي بالفعل صعبة للغاية. كانت مجموعة أدوات Erlang ونظامها الإيكولوجي فقراء. تحمل أفراد المجتمع هذه البيئة القاحلة ، وكانوا غير مبالين بمحنة القادمين الجدد. لجعل المقالة أقصر (جيدًا ، طويلًا ، لكن ليس طويلًا بشكل سخيف) ، انظر حديثي عن النظام البيئي للغات في مؤتمر مستخدم Erlang:


إذا كتبت على Elixir ، فمن المحتمل أن ترى في أي خطوة من هذه الدرج المركب الذي تقف فيه ، ويمكنك أن تتخيل بالفعل ما هي النسب التي يتم توزيع المجتمع عليها. يتكلم الكثير من المشاركين بطلاقة في Phoenix وحدها ، ولكن نادراً ما يرتفع عن الخطوة الرابعة ، ويعلق الكثيرون في الخطوة الثالثة والدنيا. وغالبا ما يكون هذا كافيا. أنا لا ألوم ، ولكن فقط مشاركة الملاحظة. مثل أي شخص صعد خطوات كثيرة (وربما هناك عدة خطوات أخرى أمامي ، مثل "ترقيع جهاز افتراضي" أو أي شيء آخر) ، أرى أن هؤلاء الأشخاص لا يعرفون الكثير. لكن بصراحة ، قد تكون كل هذه المعلومات عديمة الفائدة لهم. وهذا جيد.

ما أريد أن أقوله حوله: أعتقد أننا ، كمجتمع ، من المحتمل أن نشاهد الكلبات تحتنا ، مما يجعل سلم الأفكار من الصعب للغاية إتقانه فوق المستوى الأساسي. تحتاج بعض الموضوعات إلى الدراسة ببطء ، وفي بعض المواضيع ، يقود المكفوفين المكفوفين لأن Erlang صغير جدًا بحيث لا يوجد لدينا سوى عدد قليل جدًا من الأشخاص الذين يمكنهم مشاركة كل الخبرة الضرورية. أصبح الأمر أكثر بساطة اليوم ، وإذا لم تأت إلى Erlang في مرحلة الضجيج ، فربما تحصل على المساعدة ، لأن عددًا أقل من الناس يطلبون ذلك في نفس الوقت.

أود أن أعتقد أنه إذا بدأت المرحلة الثانية من الضجيج في عالم إرلانج غدًا ، فسنكون قادرين على قبول القادمين الجدد بشكل أفضل من الموجة الكبيرة ، عندما أتيت. وآمل أن تؤدي هذه التجربة ، إلى جانب تعاون أوثق بين مجتمعي إرلانج وإكسير ، إلى مضاعفة فرصنا في توسيع نطاق استخدام هذه اللغات بنجاح.

ما الذي تغير


Erlang لا يسبح في القارورة ، في انتظار سحبها إلى النور. انها تتطور باستمرار. هذا يرجع جزئياً إلى المنافسة والاقتراحات المقدمة من مجتمع Elixir ، والذي ، لحسن الحظ ، يتوقع من أدواته أكثر بكثير مما اعتاد مستخدمي Erlang عليه. وجزئيا يتم تحديد التنمية من خلال الاحتياجات الملحة للصناعة ورغبات المجتمع الأكاديمي.

أعتقد أن شخصًا ما سيكون سعيدًا بهذه التغييرات التي حدثت منذ عام 2009 أو حتى قبل ذلك:

  • الدعم متعدد النواة يعمل الآن بشكل جيد. في السابق ، إذا كان هناك أكثر من 2-4 نوى ، فإن النظام يعتمد على جميع أنواع الاختناقات التي لا تخضع لمطور التطبيق. ثم أصبح من الممكن استخدام 12-16 النوى. اليوم لا أعرف حتى الحد الأقصى ، لكنني كتبت وأديرت مداخن عملت على أكثر من 32 قلبًا دون أي مشاكل.
  • تتبعات المكدس لديها الآن أرقام الأسطر. من غير المعقول تقريبًا العودة إلى الماضي ، قبل ظهور الأرقام. في تلك السنوات ، لم تكن "كتابة وظائف قصيرة ذاتية التوثيق" مسألة هندسة ، بل مسألة بقاء. يمكنك الآن تصحيح برامج Erlang دون مهارات تصحيح خارقة للطبيعة ، على الرغم من أنها لن تؤذيها أبدًا.
  • جودة دعم Unicode مقبولة حاليًا. تحتوي الوحدة النمطية للسلاسل على الخوارزميات الأكثر أهمية ، وتقوم الوحدة النمطية unicode بعمل ممتاز مع معظم أنواع التحويلات والتطبيع. هناك طرق نموذجية للعمل مع نقاط الكود ، UTF-8 ، UTF-16 ، و UTF-32. لا يزال الدعم المحلي يترك الكثير مما هو مرغوب فيه ، ولكن كل شيء آخر يعمل. الوحدات النمطية مثل re (وحدة نمطية للعمل مع التعبيرات العادية) وجميع الوظائف عالية المستوى للعمل مع الملفات لا تواجه أي مشاكل عند العمل مع Unicode.
  • يتم دعم الخرائط (التي يتم تنفيذها كـ HAMT ) مع بناء جملة مطابق لنمط واضح. بمساعدة تحليل نوع Dialyzer يتم تطبيقها عليهم ، مما يسمح باستخدامها في تلك الحالات التي تتطلب في وقت سابق استخدام السجلات الكثير من الجهد.
  • تستخدم الأجهزة الافتراضية الآن آليات ممتازة للعمل مع الوقت ، فهي تتعامل مع تغيير في النطاق الزمني ، وأنواع مختلفة من الساعات وأكثر من ذلك. ومع ذلك ، فإن العمل مع المناطق الزمنية ووقت التنسيق يكون أفضل بمساعدة المكتبات التي طورها المجتمع.
  • تمت إضافة أدوات عالية الأداء مثل الذرات والعدادات والمصطلحات الدائمة للمساعدة في تحسين الآليات المختلفة التي تقوم عليها أدوات المراقبة والمكتبات الأساسية منخفضة المستوى.
  • أصبحت جميع عمليات معالجة الإشارات غير متزامنة ، بما في ذلك العمل مع المنافذ ، مما أنقذنا من العديد من الاختناقات.
  • تمت إعادة كتابة المحول البرمجي ولا يزال يتم إعادة كتابته لتحسين التحليل والأداء رفيع المستوى باستخدام SSA.
  • كان هناك نوع خاص من أجهزة الجدولة للاستخدام في NIF - أدوات جدولة متسخة ، الأمر الذي سهل التكامل مع الشفرة المكتوبة في c أو حتى الصدأ ، يدعم كل من وحدة المعالجة المركزية (CPU) وعمليات I / O المكثفة. ( ), .
  • .
  • .
  • OTP- gen_statem , .
  • .
  • crypto NIF ( ) drivers.
  • driver NIF, .
  • drivers NIF.
  • SSL TLS. Heroku, , ++ (, 5 ) ( 10-30 99- ).
  • ETS.
  • production- Erlang.
  • ( rebar3 ), Erlang.
  • , . Elixir, Efene, LFE, Luerl, Clojerl Gleam Alpaca.
  • Erlang.

, . , OTP Ericsson 13-16 ( 22!), Erlang . , Ericsson. Erlang Elixir, Erlang VM , Erlang Ecosystem Foundation , , , (observability — ), , ..

, , , , , , , , , Erlang . .

Erlang


, , 2007-2009, , . Erlang , . , , BEAM Conf. (Property-Based Testing), Erlang Elixir . , . , .

? , , , . , Elixir. , , , . , . , . . , . Erlang, , .

, Erlang . , , Erlang-, Erlang-: , , . , .

Erlang -, Elixir-.

, , Erlang . , . Erlang , . , .

, . ? ? , - ? , , ? ? , ? « - »?

, , « ». , Erlang . , . junior senior-, , , , .

, 15 ( , ), . , النظم ، وخلقها وجعلها في حالة صالحة للعمل. كل شخص لديه الدافع الخاصة بهم.

لا أستطيع أن أتخيل أنني سأحصل على الكثير في مجتمع آخر. كانت هذه السنوات العشر مذهلة. من الغريب أن مجتمع إرلانج لا يزال صغيراً ولم يتم الكشف عن إمكاناته. هذا يعني أن هناك العديد من الفرص للمشاركة في كل شيء ، للتواصل وجهاً لوجه مع أشخاص مليئين بالحكمة والذين يرغبون في مشاركتها ، والعثور على مكانهم.

PS. شكرا لترجمة بريد رو المجموعة. مجتمع Erlang في Telegram (Evgeny M.، Sergey Ivanov، Vladimir Sekisov، Greg)

Source: https://habr.com/ru/post/ar460115/


All Articles