أي لغة - D أو Go أو Rust لديها احتمالات أفضل لاستبدال C ولماذا؟

على الرغم من وضعي والتحيز الواضح كواحد من المبدعين من D ، سأحاول الإجابة بصراحة ؛ اتبعت مسارات Go and Rust ، وأعلم تمامًا أين يتم غسل الملابس القذرة في D. أشجع الأشخاص الذين يشغلون مناصب مماثلة في مجتمعات Rust and Go على مشاركة آرائهم. لذلك هنا.

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

كل لغة لها عدد من المزايا الأساسية (أسميها "ترتيب من حيث الحجم" ، يشار إليها فيما يلي باسم "المكافأة 10x" ، لأنها مؤهلة في الدوري الرئيسي فيما يتعلق بالمناهج النموذجية) ، وعدد من المشاكل. يعتمد مستقبل هذه اللغات ونجاحها في التغلب على لغة C على كيفية نشر مكافآت 10x الخاصة بها بشكل استراتيجي وكيفية التغلب على مشكلاتهم.

اسمحوا لي أن تخلص من D أولا


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

  • سوء الاستقبال من قبل الجمهور بعد سنوات عديدة من الوجود الاسمي. يمكن أن ينتقد كبداء طويلون المجتمع مثل هذا البيان (D في شكله الحالي صغير نسبيًا ، والشعبية تنمو ، إلخ). لكن هذا الموقف مستمر ويؤثر على زيادة نمو شعبيتها وهذه حقيقة. نتيجة لذلك ، يشك المديرون والمهندسون في نشر لغة كانت خاسرة لفترة طويلة. علاوة على ذلك ، يعمل الوقت ضد D حتى لا توجد زيادة واضحة في الشعبية.
  • قصة حزينة من D المتعلقة بجمع القمامة (GC). يعد GC اختراعًا رائعًا ، لكن قرار استخدامه في D عزله على الفور عن الجمهور المستهدف الرئيسي - مبرمجو C و C ++. بالنسبة لهم ، بدا خط الحزب وكأنه "لا تريد GC؟ لا مشكلة! يمكنك أيضًا استخدام D مع RAII أو التحكم اليدوي! " على الرغم من حقيقة أن هذا صحيح بشكل عام ، إلا أن هذا النهج لم يكن مفيدًا من الناحية العملية نظرًا لعدم وجود دعم لهذه المكتبة القياسية ، مما يعني أن المستخدم المقصود يجب تجريده من السراويل القصيرة والبدء في إنشاء بنية أساسية أساسية. حتى بالنسبة لأولئك الذين لم يمانعوا في GC ، كانت جودة تنفيذه غير واضحة إلى حد ما. بشكل عام ، يمكننا القول أن D حصل على جميع أوجه القصور في GC ، لكنه لم يستغلها.
  • النقص التاريخي السائد في البصيرة. بعد حرمانه من دعم الشركات ، قاد D المجتمع إلى الأمام ، حيث أصبح من الأسهل العثور على مهندس ذكي من مدير المشروع أو قائد يتمتع بالجاذبية. بمرور الوقت ، كان لنجاح جهود D في الترويج وتعزيز الذات نتيجة سلبية. مؤرخة أول وثيقة تخطيط بتاريخ 1 يناير 2015 ، وجاء التكرار التالي (Vision / 2015H2 - D Wiki) بعد أربعة أشهر من الموعد المقرر ، وهو مثال رائع على السخرية من حيث التخطيط

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

أعتقد أن مكافآت 10x لـ D هي كما يلي (مرة أخرى ، عندما أقول 10 مرات ، فإن هذا العامية "أفضل من خلال أمر"):

  • في 10x ، يكون التجميع أسرع من C ++ للرمز القابل للمقارنة. لا يمكن إغلاق هذا الثقب بشكل أساسي في C ++ ، ومن الصعب للغاية القفز بأي لغة أخرى. (يُنقل Go بشكل أسرع قليلاً من D ، لكن الكود الناتج يكون أبطأ). إن تجربة استخدام لغة النظام التي يتم تجميعها بسرعة إلى رمز سريع تعد بمثابة تحول في الممارسات القديمة وواعدة للغاية. بالإضافة إلى قوة التجريد في D ، فإن ذلك يجعل D اختيارًا جيدًا لكتابة رمز محسّن للغاية لسبب بسيط هو أن التجربة رخيصة.
  • 10x أسرع من لغات البرمجة النصية مع وسائل راحة قابلة للمقارنة. D مناسب تمامًا للبرمجة اليومية للمهام اليومية. تبقى دورة التجميع / الإطلاق بنفس السرعة ، وتكون فوائد السرعة هائلة. أيضًا ، لا توجد مشكلة "واجه الحدود" - إذا أصبح البرنامج النصي كبيرًا ، في D هناك دائمًا ما يكفي من الأدوات اللغوية والوحدات. هناك ، بالطبع ، ذبابة في المرهم ، على سبيل المثال في بايثون هناك مكتبات جاهزة أكثر بكثير. لكن المكافأة 10x أمر أساسي هنا - لا تمتلك لغات النظام الكثير من السكر النحوي ، ولغات البرمجة النصية متخلفة بسرعة.
  • 10X أسهل في الدمج مع C و C ++ من أي لغة أخرى. يستخدم D نفس الهياكل في الذاكرة مثل C و C ++؛ ويبني عليها ، لكن قراءة الطبقات الأساسية تظل مجانية من حيث السرعة. يمكن الوصول إلى مكتبة C القياسية تمامًا دون أي عقوبات - لا من حيث السرعة ولا في بناء الجملة ، وعلى الرغم من الحاجة إلى بعض التحسينات لبساطة مماثلة من حيث مكتبة C ++ ، تتوفر العديد من مكتبات C بالفعل (https://github.com/D- البرمجة ...). يمكن القول حرفيًا أنه لا توجد لغة أخرى يمكنها تحقيق هذا المستوى من التكامل.
  • 10 مرات أفضل من أي لغة النظام الأخرى في الوراثة و metaprogramming. في D ، تشكل عملية الاستبطان الاستاتيكي والحوسبة المترجمة ( CTFE ) وتوليد الكود (المزج بين الكود) مزيج الكوكتيل Molotov ، الذي يصعب للغاية مزجه بشكل صحيح بلغات أخرى ، لا الجديدة ولا الناجيات ؛ في هذه اللعبة ، يعد تطبيق Go مجنونًا لدرجة أنه لا يقطع شريحة ؛ يتم فقدان C ++ 17 ميؤوس منها في غابة مظلمة. وصدأ يحاول فقط أن يثرثر.

الذهاب إلى الذهاب


يجب أن أؤكد أن هذا هو رأيي فقط ، ومع ذلك يستحق اهتمامكم. مشاكل Go هي كما يلي:

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

احصل على 10 مكافآت في تصوري كما يلي:

  • 10x في استراتيجية المهارة. بعد فترة وجيزة عندما تم تحديد موقع Go كلغة نظام ، تقرر تعيينه على خدمات الشبكة. لقد كانت خطوة تسويقية رائعة استفادت من قدرات فريق Go (بعض من أفضل مهندسي خدمات الشبكات في العالم). هذا سوق ساخن للغاية ، وأصبحت Go مجرد نفس من الهواء النقي للعالم ، والذي كان يسيطر عليه من قبل Java EE بشريطها الأحمر ولغات البرمجة البطيئة. Now Go هي اللاعب الرئيسي في هذا المجال وسيكون من الصعب التحرك.
  • 10x في المهارة الهندسية. لدى Go فريق قوي من المهندسين ، وهذا هو العامل الرئيسي الذي يؤثر على جودة اللغة ، وخاصة مكتبة الشبكة ومجموعة الأدوات. حتى الآن ، فإن الهندسة الجيدة قد عوّضت بالكامل عن ضعف اللغة.
  • 10x في مهارة العلامات التجارية. الكثير منا على استعداد للاعتراف بأن الدافع الرئيسي لاستخدام Go هو اتصاله بـ Google. هذا يعطيه سلطة الاحتراف والجودة والاستقرار. بالطبع ، ليست العلامة التجارية هي كل شيء ، ولكنها تجعل من Go لغة جيدة بالفعل. وقال انه لا ينبغي أن يكون جيدا خيالي. العلامة التجارية سوف تفعل الباقي.

أخيرًا وليس آخرًا ، راست


اسمحوا لي أن أذكرك مرة أخرى أن هذا هو رأيي فقط. أعتقد أن روست يواجه بعض المشكلات المثيرة للاهتمام:
  • شخصية متنافرة. بعد قراءة مقدار معين من كود Rust ، تظهر الحكايات مثل "Dude missed days of swinging swing" ، يتضح من رسوم كاريكاتورية مع أشخاص يحملون الجذع والساقين متقاطعتين (ترجمة تقريبية. باللغة الروسية ، "Colossus on clay feet" ، لكن غير دقيق) تأتي إدارة الذاكرة الدقيقة والآمنة في المرتبة الأولى وتمثل مركز العالم. وفجأة ، نادراً ما يكون هذا مجالًا للمشاكل ، مما يؤدي إلى حقيقة أن نسبة كبيرة من التخطيط والترميز يكرس ، في الواقع ، للعمل الكتابي (أي اللغات التي يعمل فيها GC تعمل تلقائيًا دون النظر). يعد إعادة استخدام الذاكرة بشكل آمن ومعروف مسبقًا مهمة خطيرة ، ولكنها ليست المهمة الوحيدة أو على الأقل ليست الأكثر أهمية في البرنامج. نتيجة لذلك ، ينفق Rust مبلغًا غير متناسب من موارد تصميم اللغة على ذلك. سيكون من المثير للاهتمام أن نرى كيف يتضخم الصدأ في جوانب أخرى من اللغة ؛ الخيار الوحيد هو توسيع اللغة ، ولكن السؤال هو مقدار التجريد الذي يمكن أن يساعد مع الحاجة غير السارة للسيطرة على الموارد على جميع المستويات.
  • بناء الجملة الأجنبية. بناء جملة Rust مختلف [عن الكل] ، لكن لا توجد ميزة واضحة في مثل هذا الغرابة. هذا يزعج الأشخاص الذين ينتمون إلى لغات عائلة Algol ، والذين يتعين عليهم التعامل مع بناء جملة مختلفة جذريًا ، بالإضافة إلى الحاجة إلى إدارة جميع الحسابات يدويًا باستخدام الموارد.

المكافآت 10x الصدأ هي:

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

في سطور


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

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

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


All Articles