في 7 أغسطس ، أصدرت مؤسسة Rust نتائج تقرير مسح الصدأ لعام 2022. ويظهر التقرير أن معدل تبني Rust مستمر في الزيادة. أشار أكثر من 90٪ من المشاركين في الاستطلاع إلى أنهم من مستخدمي Rust ؛ ويستخدم Rust في غالبية أعمال الترميز في ، بزيادة كبيرة قدرها 51.8 ٪ عن العام السابق.
ليس هناك شك في أن Rust أصبح بشكل متزايد محور اهتمام المطورين بفضل أمان الذاكرة الممتاز والأداء المتزامن. ومع ذلك ، من الصعب أيضًا تجاهل Go ، وهو لاعب "مخضرم" نسبيًا تم اختياره ذات مرة كلغة برمجة لهذا العام.
ولدت لغة Go في عام 2009 ، وقد جذبت اهتمامًا كبيرًا منذ نموذجها الفريد للتزامن ومزايا الأداء القوية. من الجدير بالذكر أنه ، مثل لغة Rust ، فإن مبتكر لغة Go "يكره" C ++ ، و Go هي أيضًا اللغة السائدة في السحابة الأصلية.
في استطلاع Stack Overflow 2022 للمطورين ، من بين 70 ألف رد على سؤال "لغة برمجة تجعل الناس يحبون ويكرهون" ، من الواضح أن المبرمجين يفضلون Rust ، وقال 86٪ منهم إنهم يحبون Rust ، و 64٪ قالوا إنهم يحبون Go. في مواجهة حالة Rust الساخنة ، سأل بعض المطورين أرواحهم: هل ما زال Go يستحق التعلم في عام 2023؟
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-b1ca7de4f1-dd1a6f-1c6801)
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-14405ab81d-dd1a6f-1c6801)
بالإضافة إلى ذلك ، في اليومين الماضيين ، أصبح اختيار Rust أو Go موضوعًا ساخنًا على Hacker News:
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-e890f21f3f-dd1a6f-1c6801)
قال أحد مستخدمي الإنترنت الذي يدعم Rust: "لقد أزعجني هذا الاختيار أيضًا لفترة طويلة. في النهاية ، فاز Rust. أولاً ، أشعر أن Rust أقرب إلى أشياء من عصر Pascal السابق ، ويمكنك التحكم في كل شيء ؛ ثانيًا ، إذا كانت الوسم والتقنيات ذات الصلة تفشيًا كبيرًا ، فسيكون Rust خيارًا أكثر أمانًا ؛ إذن ، لدينا بالفعل Python للتطوير السريع ، لذلك من المنطقي اختيار شيء أكثر تطرفًا ، و Go إلى حد ما في الوسط. أخيرًا ، يجب استخدام Rust في Core و High Profile ، لذلك من غير المحتمل القضاء عليه. "
قال مطور آخر لم يوافق على ذلك ، "لقد طورت في Go منذ ما يقرب من عشر سنوات ، لكنني حاولت مؤخرًا أيضًا تجربة Rust. أعتقد أن هناك حاليًا بعض التفضيلات الإلزامية والمضللة لـ Rust ، من تجربتي في من تجربتي في العديد من الشركات الناشئة ، بما في ذلك الحالية ، Go هي أفضل خيار لتطوير الواجهة الخلفية! لاحظ ، الأداء ، الوظيفة أو غير ذلك ... اللغتان متشابهتان للغاية! "
يجب أن أقول إن كلا من Go و Rust هما بالتأكيد لغات برمجة ممتازة. إنها حديثة وقوية ومتعددة الاستخدامات وتقدم أداءً رائعًا. لكن ليس من المنطقي حقًا المقارنة المباشرة بين Go و Rust ، من هو الأفضل ، لأن كل لغة برمجة تمثل سلسلة من المقايضات العميقة وراءها. سيتم تحسين اللغات المختلفة لتلبية الاحتياجات المختلفة ، لذلك عندما نختار لغة ، يجب أن نفكر أيضًا في نوع المشكلات التي نريد استخدامها لحلها. لذلك سنبدأ من السيناريوهات القابلة للتطبيق الخاصة بلغات Go and Rust ، ونناقش "طريقة" تصميم Go and Rust.
بينما يختلف Rust and Go اختلافًا كبيرًا في بناء الجملة والأسلوب ، كلاهما أدوات من الدرجة الأولى لبناء البرامج. لنبدأ التحليل المحدد أدناه.
الذهاب مقابل الصدأ: أوجه التشابه
يوجد الكثير من القواسم المشتركة بين Rust and Go ، وهذا هو سبب مقارنة الناس بين الاثنين. ما هي الأهداف المشتركة بينهما؟
Rust هي لغة برمجة متعددة النماذج منخفضة المستوى مكتوبة بشكل ثابت مع مزيد من التركيز على السلامة والأداء.
—جينتس درييمانيس
و:
Go هي لغة برمجة مفتوحة المصدر تجعل من السهل إنشاء برنامج بسيط وموثوق وفعال.
—golang.org
** أمان الذاكرة **
تعد كل من Go و Rust من بين ** لغات البرمجة الحديثة التي تركز على أمان الذاكرة **. على مدى عقود من تطوير اللغات القديمة مثل C و C ++ ، أصبح من الواضح أن أحد الأسباب الأساسية للأخطاء والأخطاء هو الوصول غير الآمن / غير الصحيح إلى الذاكرة.
قدم كل من So Rust and Go حلولًا مختلفة ، ولكن الهدف من كليهما هو أن تكون أكثر ذكاءً وأمانًا من حيث إدارة الذاكرة ، ومساعدة المطورين على كتابة البرامج الصحيحة بأداء ممتاز.
** سريع ومضغوط قابل للتنفيذ **
كلاهما لغتان مترجمة ، مما يعني أنه يمكن ترجمة البرامج مباشرة إلى كود آلة قابل للتنفيذ ، بحيث يمكن نشر البرامج كملف ثنائي واحد. على عكس اللغات المفسرة مثل Python و Ruby ، لا نحتاج إلى توفير مترجم فوري والكثير من المكتبات / التبعيات مع البرنامج. كانعكاس مباشر لهذه القوة الأساسية ، تميل برامج ** Rust and Go إلى العمل بشكل أسرع من اللغات المفسرة **.
** لغة الأغراض العامة **
تعد كل من Rust and Go من لغات البرمجة ذات الأغراض العامة القوية والقابلة للتوسيع والتي يمكنك استخدامها لتطوير جميع أنواع البرامج الحديثة - من تطبيقات الويب إلى الخدمات الصغيرة الموزعة ووحدات التحكم الدقيقة المضمنة وتطبيقات الأجهزة المحمولة والمزيد. ** يحتوي كلاهما على مكتبات قياسية ممتازة وأنظمة إيكولوجية مزدهرة تابعة لجهات خارجية ، بالإضافة إلى دعم تجاري قوي وقاعدة مستخدمين كبيرة. ** كان كلاهما موجودًا منذ سنوات وسيستمر في الازدهار في السنوات القادمة. سيكون Learning Go أو Rust استثمارًا معقولًا جدًا للوقت والطاقة هذه الأيام.
** أسلوب البرمجة العملي **
لا توجد لغات وظيفية بشكل مفرط (مثل Scala أو Elixir) ، كما أنها ليست موجهة بشكل كامل (مثل Java و C #). على العكس من ذلك ، على الرغم من أن كلا من Go و Rust لهما وظائف البرمجة الوظيفية والموجهة للكائنات ، إلا أنهما دائمًا ** يؤكدان على التوجه العملي ** - أي حل المشكلة بالطريقة الأنسب ، بدلاً من إجبار الجميع على استخدام طريقة محددة من خلال "الأيديولوجية". طريقة للقيام بالأشياء. ** ولكن إذا كنت تحب أسلوب البرمجة الوظيفية حقًا ، فهناك المزيد من خيارات الأدوات ذات الصلة على جانب Rust ، والتي تعد إحدى مزايا Rust over Go. **
يمكننا بالتأكيد أن نجادل حول ما يشكل حقًا لغة "موضوعية التوجه". ولكن لكي نكون منصفين ، فإن أسلوب البرمجة الموجهة للكائنات الذي يتوقعه مستخدمو C ++ أو Java أو C # غير موجود بالفعل في Go أو Rust.
—جاك موت
** تنمية هائلة **
يوفر كل من Rust and Go العديد من الميزات المفيدة للبرمجة واسعة النطاق ، بحيث يمكن لكل منهما التكيف مع احتياجات العالم الحقيقي لفرق التطوير الكبيرة وقواعد التعليمات البرمجية الكبيرة. ** على سبيل المثال ، ناقش المبرمجون C لسنوات حول مكان وضع الأقواس ، وما إذا كان يجب وضع مسافة بادئة للكود بعلامات تبويب أو مسافات ؛ لكن Rust and Go يستخدم بالفعل أدوات تنسيق قياسية (Go has gofmt ، Rust It is rustfmt) لحل هذه المشكلات تمامًا مشاكل. يقومون تلقائيًا بإعادة كتابة التعليمات البرمجية الخاصة بك باستخدام أسلوب مطابق.
لا يعني ذلك أن هذا التنسيق المحدد دقيق ، ولكن ** مبرمجو Rust and Go أكثر واقعية ويفضلون اختيار معيار موحد للتنفيذ. **
قد لا يكون أسلوب gofmt هو المفضل لدى الجميع ، ولكن لدى gofmt ما يناسب الجميع.
—روب بايك
تنعكس ميزة كبيرة أخرى لهاتين اللغتين في ** خط أنابيب البناء **. كلاهما يحتوي على أدوات إدارة التبعية والبناء المعيارية الممتازة والمدمجة والفعالة. هذا يعني أن المبرمجين ليسوا مضطرين للتعامل مع أنظمة بناء معقدة تابعة لجهات خارجية ، ولا يحتاجون إلى تعلم نظام جديد كل بضع سنوات.
لقد استخدمت Java و Ruby في وقت مبكر من مسيرتي المهنية ، لذا فإن كتابة كود Go and Rust كانت دائمًا مخيفة بعض الشيء وخارجة عن إرادتي. ولكن عندما دخلت إلى Google ورأيت خدمة مكتوبة بلغة Go ، شعرت بالارتياح حقًا لأنني وجدت أنه من السهل إنشاءها وتشغيلها.
الشيء نفسه ينطبق على الصدأ. على الرغم من أنني أجريت بحثًا فقط على المشاريع الصغيرة ، إلا أنني أستطيع أن أرى سهولة استخدامها. أتمنى أن تكون أنظمة البناء القابلة للتكوين بلا حدود شيئًا من الماضي ، والآن بعد أن أصبحت اللغات الجديدة مزودة بأدوات بناء مخصصة خاصة بها تعمل خارج الصندوق ، أليس هذا جيدًا؟
—سام روز
** الصدأ أم الانهيار؟ **
بعد الحديث عن العديد من القضايا ، وحقيقة أن كلتا اللغتين جيدتان التصميم وقويتان ، فهل هناك أي نتيجة في هذه المسابقة؟ أو بما أن كلاهما خياران ممتازان ، فلماذا لا يزال الناس غاضبين على وسائل التواصل الاجتماعي ، ويكتبون منشورات طويلة في المدونة ذات تعليقات طويلة تقول "الصدأ للأغبياء" أو "Go ليست لغة برمجة على الإطلاق" نوع من الكلمات القاسية؟
بالطبع ، بعض الناس يريدون فقط التنفيس عن مشاعرهم ، لكن من الواضح أن هذا لا يساعد في حل المشكلة الفعلية. على الأقل عندما يتعلق الأمر باللغة التي يجب استخدامها في المشروع ، أو اللغة التي يجب استخدامها لاقتحام عالم البرمجة ، من الواضح أن الأصوات العالية لا تساعد في اتخاذ القرار الصحيح.
دعنا نعود إلى مناقشة البالغين ونرى كيف أن Rust and Go لديها نقاط قوة ونقاط ضعف في ظل التحليل العقلاني.
** مواجهة الصدأ: الأداء **
كما ذكرنا سابقًا ، فإن كلا من البرامج التي تم إنشاؤها بواسطة Go و Rust تكون سريعة لأنه يتم تجميعها إلى رمز الجهاز الأصلي دون المرور عبر مترجم أو جهاز افتراضي. لكن ** أداء Rust لا يزال أفضل ** ، حتى أنه يمكن مقارنته بأداء C و C ++ ، والمعروفين بمعايير أداء الصناعة. وعلى عكس هذه اللغات القديمة ، يوفر Rust أيضًا أمانًا للذاكرة وآليات أمان التزامن ، بينما لا يؤثر كثيرًا على سرعة التنفيذ. يسمح Rust أيضًا للمطورين ببناء تجريدات معقدة دون تكبد عقوبة الأداء في وقت التشغيل.
في المقابل ، ** على الرغم من أن أداء برامج Go جيد أيضًا ، إلا أن تركيز التصميم ينصب بشكل أساسي على سرعة التطوير (بما في ذلك التجميع) ، بدلاً من درجة التنفيذ **. يفضل مبرمجو Go كودًا واضحًا وقابل للقراءة ، وبالتالي فإن سرعة التشغيل أبطأ قليلاً.
لا يقضي برنامج التحويل البرمجي Go أيضًا الكثير من الوقت في إنشاء كود الآلة الأكثر كفاءة ، فهو أكثر اهتمامًا بتجميع كميات كبيرة من التعليمات البرمجية بسرعة. ** لذلك في معايير وقت التشغيل ، غالبًا ما يكون برنامج Rust هو الذي يطغى على برنامج Go. **
أداء وقت تشغيل Rust هو أيضًا متسق للغاية ويمكن التنبؤ به لأنه لا يستخدم جمع البيانات المهملة. يعتبر جامع القمامة الخاص بـ Go فعالاً للغاية وهو مُحسَّن لإبقاء أوقات التوقف قصيرة قدر الإمكان (تصبح أوقات التوقف أقصر مع كل إصدار من Go). ولكن على أي حال ، فإن جمع البيانات المهملة يقدم دائمًا بعض عدم القدرة على التنبؤ في الطريقة التي يتصرف بها البرنامج ، وقد يكون هذا خطيرًا أو حتى غير مقبول تمامًا لتطبيقات معينة (مثل الأنظمة المضمنة).
نظرًا لأن هدف Rust هو منح المبرمج التحكم الكامل في الأجهزة الأساسية ، ** يمكن تحسين برامج Rust بشكل كبير للوصول إلى الحد الأقصى من الأداء النظري للجهاز. ** هذا يجعل Rust الخيار الأفضل لحالات استخدام معينة حيث تتفوق سرعة التنفيذ على كل شيء آخر ، مثل برمجة الألعاب ونواة نظام التشغيل ومكونات متصفح الويب وأنظمة التحكم في الوقت الفعلي.
** البساطة **
لا يهم مدى قوة لغة البرمجة إذا كان من الصعب تعلمها وإبعاد معظم الناس عنها. يبدو أن Go مصمم بشكل متعمد لتمييز نفسه عن اللغات ذات التعقيد المتزايد مثل C ++: ** يحتوي على القليل جدًا من بناء الجملة ، وعدد قليل جدًا من الكلمات الرئيسية ، ولا يحتوي حتى على العديد من الوظائف. **
هذا يعني أن لغة Go سهلة التعلم ، ويمكنك كتابة برامج مختلفة معها بعد قليل من الفهم.
Go هو حقًا سهل التعلم. لقد سمعت أن هذا مذكور كثيرًا من قبل ، ولكن بعد استخدامه ، ما زلت مندهشًا من السرعة التي يحسن بها الإنتاجية. بفضل لغة Go والوثائق والأدوات ذات الصلة ، كتبت كودًا مثيرًا للاهتمام وقابل للالتزام في يومين فقط.
الصدأ انطباعات Go للمبرمجين المبكرة
النقطة الأساسية هنا هي ** "البساطة" ** ثلاث كلمات. بالطبع ، البساطة لا تعني السهولة. لكن اللغة الصغيرة والبسيطة هي بالتأكيد أسهل في التعلم من اللغة الكبيرة والمعقدة. لا توجد طرق عديدة لتحقيق تأثير واحد ، لذا فإن كود Go عالي الجودة يبدو دائمًا كما هو. هذا له فائدة أخرى: يمكننا أن نفهم بسرعة ما تفعله خدمة لا نعرفها.
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-ec17a48e0c-dd1a6f-1c6801)
** علم الوجود الأساسي لـ Go صغير ، لكن المكتبة القياسية قوية جدًا. ** أي ، بالإضافة إلى بناء جملة Go ، يجب أن يأخذ منحنى التعلم لدينا أيضًا في الاعتبار هذا الجزء من المكتبة القياسية.
من ناحية أخرى ، فإن نقل الوظائف من اللغة إلى المكتبة القياسية يعني أن كل شخص يحتاج فقط إلى التركيز على تعلم المكتبات المتعلقة باحتياجات التطوير الحالية. ** تم تصميم Go أيضًا مع المراعاة الكاملة لاحتياجات تطوير البرامج على نطاق واسع ، ويمكنه دعم قواعد الكود الكبيرة وفرق التطوير بقوة. ** في هذا النوع من السيناريوهات ، يجب أن يتمكن المطورون الجدد من البدء بسرعة. تحقيقا لهذه الغاية ، لطالما أعطى مجتمع Go الأولوية للبساطة والوضوح وتعدد الاستخدامات ومباشرة البرامج.
باستخدام لغة GO ، غالبًا ما يكون من الأسهل للمطورين المبتدئين أن يكونوا منتجين ، ولكن يصعب على المطورين المتوسطين تقديم تجريدات معقدة وبالتالي التسبب في مشاكل. بسبب هذه الخاصية ، يميل Rust إلى أن يكون أقل جاذبية من Go في عالم تطوير برامج المؤسسات.
لوريس كرو
وظيفة
يدعم Rust تعقيدًا أكثر من العديد من لغات البرمجة الأخرى ، لذا فإن نطاق التنفيذ المقابل أكبر أيضًا.
ديفاثون
** تم تصميم Rust خصيصًا لتضمين مجموعة متنوعة من الميزات القوية والمفيدة التي تساعد المبرمجين على إنجاز المزيد باستخدام كود أقل. ** على سبيل المثال ، تتيح وظيفة المطابقة في Rust كتابة منطق مرن ومعبّر بسرعة:
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-ad3c782f1b-dd1a6f-1c6801)
ولكن أيضًا نظرًا لأن Rust لديه الكثير من اعتبارات التصميم ، فمن الصعب تعلمه ، خاصة في المرحلة الأولية. لكن هذا جيد ، لغة C ++ أو Java لديها الكثير لتتعلمه بعد كل شيء ، ولا تقدم حتى ميزات Rust المتقدمة مثل أمان الذاكرة. لذلك من غير المعقول حقًا انتقاد صوت Rust المعقد للغاية: فهو مصمم للتأكيد على ** التعبير والوظائف الغنية ** ، ولا يمكننا أن نتوقع أن يكون بسيطًا ونقيًا مع الاستفادة من الفوائد. لذلك بالطبع لدى Rust منحنى التعلم الخاص به. ولكن طالما تم التغلب على هذه الصعوبة ، فسيكون هناك طريق سلس أمامنا.
إذا كنت مستعدًا لتعلم بناء جملة ودلالات أكثر تعقيدًا (وشريط أعلى لقراءة الكود) في مقابل الحصول على أعلى مستوى من الأداء ، فيمكن أن ينافس Rust حتى C ++ و D. - ديف تشيني
** على الرغم من استعارة Rust and Go لبعض الميزات من بعضها البعض (مثل الأدوية الجنيسة) ، فمن الإنصاف القول إن ميزات Rust لا تزال متفوقة ، وميزات Go غير موجودة نسبيًا. **
** التزامن **
توفر معظم اللغات شكلاً من أشكال الدعم للبرمجة المتزامنة (أي إجراء عمليات متعددة في نفس الوقت) ، ولكن تم تصميم Go لهذا الغرض من الألف إلى الياء. ** لا تستخدم Go مؤشرات ترابط نظام التشغيل ، ولكنها توفر بديلاً خفيف الوزن: goroutines. ** كل goroutine عبارة عن وظيفة Go منفذة بشكل مستقل والتي يقوم مجدول Go بتعيينها إلى أحد مؤشرات ترابط نظام التشغيل الخاضعة للتحكم. أي أن المجدول يمكنه إدارة عدد كبير من goroutines المتزامنة بكفاءة عالية ، بينما يستخدم فقط عددًا محدودًا من مؤشرات ترابط نظام التشغيل.
لذلك ، يمكننا تشغيل الملايين من goroutines المتزامنة في برنامج واحد دون القلق بشأن التسبب في مشاكل خطيرة في الأداء. لهذا السبب ، يعد ** Go حلاً كاملاً لسيناريوهات التطبيقات المتزامنة واسعة النطاق مثل خوادم الويب والخدمات المصغرة. **
يوفر ** Go أيضًا قنوات لـ goroutines ** ، وهي طريقة سريعة وآمنة وفعالة للتواصل ومشاركة البيانات. مستوى تصميم التزامن Go مرتفع بالفعل ، وتجربة الاستخدام مريحة للغاية وممتعة.
بشكل عام ، يعد تصميم البرامج المتزامنة أمرًا صعبًا للغاية ، كما أن بناء برامج متزامنة موثوقة وصحيحة بأي لغة ليس بالأمر السهل بأي حال من الأحوال. ومع ذلك ، نظرًا لأنه تم النظر في هذا المطلب في بداية المشروع ، فقد تم جعل آلية البرمجة المتزامنة في Go بسيطة قدر الإمكان ومتكاملة بشكل جيد.
Go يجعل من السهل إنشاء تطبيق مفكك بعناية يمكن نشره كمجموعة من الخدمات المصغرة والاستفادة الكاملة من التزامن. إنه ليس مستحيلًا في Rust ، من الصعب تنفيذه. بمعنى ما ، يعتبر Rust أكثر ملاءمة للمبرمجين الذين يجب ألا يسمحوا بالثغرات الأمنية التي تسببها مشاكل الذاكرة ؛ ولكن في المقابل ، عندما يؤدون بعض المهام البسيطة نسبيًا للغات أخرى (بما في ذلك GO) ، فإنهم يفضلون أن يدفعوا المزيد من الجهد. - سونيا كوبتييف
في المقابل ، هبطت آلية التزامن في ** Rust للتو ولم تستقر بعد ** ، لذلك نرحب بالجميع لمواصلة الانتباه إلى اتجاه التطوير النشط هذا. هذا مفيد أيضًا ، على سبيل المثال ، توفر مكتبة Rust's rayon طريقة أنيقة وخفيفة الوزن للغاية يمكنها تحويل الحسابات المتسلسلة إلى حسابات متوازية.
سيكون من الجيد حقًا أن يكون لديك بنية خفيفة الوزن لتفريخ goroutines واستخدام القنوات. هذا مظهر مباشر لقوة القواعد ، كما أن العديد من التفاصيل الصغيرة تجعل تجربة البرمجة المتزامنة لـ Go أفضل بكثير من اللغات الأخرى.
الصدأ انطباعات Go للمبرمجين المبكرة
في حين أنه قد لا يكون من السهل تنفيذ البرامج المتزامنة في Rust ، إلا أنه لا يزال قابلاً للتنفيذ تمامًا ، و ** تستفيد هذه البرامج أيضًا من ضمانات أمان الذاكرة المصممة بعناية من Rust. ** خذ فئة Mutex في المكتبة القياسية كمثال: في Go ، قد ننسى الحصول على كائن المزامنة قبل الوصول إلى شيء ما ؛ ولكن في Rust ، لا داعي للقلق بشأنه على الإطلاق.
Go يركز على التزامن كأحد المفاهيم الأساسية. هذا لا يعني أننا لا نستطيع تحقيق تأثيرات التزامن مشابهة لـ Go in Rust ، لكن صعوبة التنفيذ هي إلى حد ما اختبار للمبرمجين. يركز Go على التزامن كأحد مفاهيمه الأساسية. هذا لا يعني أننا لا نستطيع تحقيق تأثيرات التزامن مشابهة لـ Go in Rust ، لكن صعوبة التنفيذ هي إلى حد ما اختبار للمبرمجين.
—— ديف تشيني
أمان
كما ذكرنا سابقًا ، لدى كل من Go و Rust طرقهما الخاصة لمنع العديد من أخطاء البرمجة الشائعة ، خاصة المشكلات المتعلقة بإدارة الذاكرة. لكن ** Rust يذهب إلى أبعد من ذلك ، ويمكن القول إنه لا يدخر جهدًا لضمان عدم ارتكاب أي شخص لأخطاء أمنية غير متوقعة. **
مترجم Rust صارم للغاية لدرجة أنه يتحقق من كل متغير نستخدمه ، كل عنوان ذاكرة نشير إليه. إنه يتجنب ظروف سباق البيانات المحتملة ويخطرك أيضًا بالسلوك غير المحدد. في عالم Rust ، يكاد يكون من المستحيل ظهور مشكلات التزامن وأمان الذاكرة.
لماذا تختار الصدأ؟
ومع ذلك ، فإن تجربة البرمجة في Rust تختلف عن أي لغة أخرى تقريبًا ، و ** يمكن أن تكون صعبة للغاية ** عند تقديمها لأول مرة. لكن في نظر العديد من المطورين ، من الواضح أن هذا الجهد يستحق المال.
بالنسبة لي ، فإن أكبر ميزة لـ Rust هي أن المترجم أصبح مساعدًا جيدًا لي ، ولن يفوتك أي أخطاء تم اكتشافها (على محمل الجد ، في بعض الأحيان يبدو لي أنه سحر).
—Grzegorz Nosek
توفر العديد من اللغات ، بما في ذلك Go ، أدوات لمساعدة المبرمجين على تجنب الأخطاء ، ولكن ** Rust يرتقي بهذا التأثير إلى مستوى جديد **. العديد من البرامج غير الصحيحة لا تجمع على الإطلاق.
في Rust ، تساعد العديد من مرافق المكتبة المبرمجين على منع أخطاء المستخدم. يسمح لنا Rust بتحديد جزء من البيانات ومن ثم ضمان عدم ارتباطه بأي شيء آخر أو العبث به. لا أستطيع التفكير في لغة قدمت الكثير من الأدوات لمنع إساءة الاستخدام العرضي من قبل ، وهو أمر رائع. - سام روز
"قتال مدقق الاستعارة" أمر لا بد منه للقادمين الجدد من Rust ، ولكن بالنسبة للجزء الأكبر ، فإن المدقق ليس العدو حقًا. المشاكل التي يجدها هي في الواقع أخطاء حقيقية (أو على الأقل أخطاء محتملة) في الكود. ** قد يجبرنا ذلك على إعادة هيكلة برامجنا بشكل أساسي لتجنب مثل هذه المشكلات ** - إذا وضعت حقًا الدقة والموثوقية على رأس أولوياتك ، فمن الواضح أن هذا المطلب الصارم يعد أمرًا جيدًا.
من منظور آخر ، هل يمكن تسمية لغة جديدة لا تغير طريقة البرمجة بلغة جديدة؟ وعند استخدام لغات أخرى ، علمنا ** Rust أن نفكر بأمان ، وهو أمر لا يقل أهمية **.
إذا اختار الأشخاص Rust ، فغالبًا ما يكون ذلك بسبب التصميم المضمون الذي يوفره: الأمان حول المؤشرات الفارغة / سباقات البيانات ، وسلوك وقت التشغيل المتوقع ، والتحكم الكامل في الأجهزة. إذا لم يكن هذا منطقيًا بالنسبة لك ، فلا داعي لاستخدام Rust. بعد كل شيء ، هناك ثمن وراء هذه الفوائد: من الصعب البدء. عليك التخلص من العادات السيئة وإتقان مفاهيم جديدة. في البداية ، سيتم تعذيب الجميع حتى الموت بواسطة مدقق الاستعارة.
ماثيو إندلر
قد تعتمد الصعوبة الفعلية لبدء استخدام نموذج برمجة Rust ** على اللغات الأخرى التي استخدمتها من قبل **. قد يجد مبرمجو Python أو Ruby أن Rust مقيد للغاية ، لكن قد يجد آخرون أن الوضوح والقيود الواضحة أمر جيد.
إذا كنت مبرمجًا بلغة C أو C ++ وقضيت أسابيع في البحث عن أخطاء أمان الذاكرة في اللغة ، فستحب Rust. لذا تصبح عبارة "محاربة مدقق الاستعارة" "هل لا يزال هذا ممكنًا مع المترجم؟ رائع!"
Grzegorz Nosek
زيادة
تحتوي برامج الخوادم الحالية على عشرات الملايين من أسطر التعليمات البرمجية ، كتبها مئات المبرمجين ، ويتم تحديثها كل يوم تقريبًا. فيما يتعلق بالتصميم والتطوير ، تأخذ Go بعين الاعتبار الحاجة إلى تحسين كفاءة العمل في مثل هذه البيئة. تشمل اعتبارات التصميم الخاصة بـ Go إدارة التبعية الصارمة ، والقدرة على التكيف مع بنية البرنامج مع نمو النظام ، والمتانة عبر حدود المكونات. - روب بايك
عندما تحل مشكلة بمفردك أو في فريق صغير ، سواء اخترت لغة بسيطة أو لغة غنية ، فهي مسألة تفضيل شخصي بحت. ومع ذلك ، مع التوسع في ** مقياس البرنامج ، والتعقيد ، وتوسع الفريق ** ، بدأت الاختلافات بين اللغتين في الظهور حقًا.
بالنسبة للتطبيقات الكبيرة والأنظمة الموزعة ، غالبًا ما تكون سرعة تنفيذ التعليمات البرمجية أقل أهمية من سرعة التطوير: لغة مثل Go التي تؤكد عمدًا على التصميم الهزيل يمكن أن تقصر وقت التكيف ** للمطورين الجدد وتسمح لهم بالمشاركة بسرعة أكبر للمساهمة في قواعد البرمجة الكبيرة.
باستخدام لغة GO ، غالبًا ما يكون من الأسهل للمطورين المبتدئين أن يكونوا منتجين ، ولكن يصعب على المطورين المتوسطين تقديم تجريدات معقدة وبالتالي التسبب في مشاكل. بسبب هذه الخاصية ، يميل Rust إلى أن يكون أقل جاذبية من Go في عالم تطوير برامج المؤسسات.
لوريس كرو
دائمًا ما يكون الوضوح والوضوح أكثر أهمية من الأناقة عندما يتعلق الأمر بتطوير البرامج على نطاق واسع. ** تجعل قيود Go في الواقع أكثر قابلية للتكيف مع احتياجات الشركات والمؤسسات الكبيرة من اللغات الأكثر تعقيدًا وقوة مثل Rust. **
** الصدأ مقابل Go: الاختلافات **
في حين أن كلا من Rust و Go هما لغات حديثة شائعة الاستخدام على نطاق واسع ، إلا أنهما ليسا منافسين حقًا لأنهما يستهدفان حالات استخدام مختلفة تمامًا **.
يختلف النهج الكامل للبرمجة في Go تمامًا عن Rust ، وهذه الميزات مناسبة بشكل خاص لبعض الأشخاص ، ولكن من ناحية أخرى يمكن أن تثير غضب الآخرين تمامًا. وهذا أمر منطقي ، لأنه إذا كان كل من Rust and Go يحلان نفس المشكلات بشكل أساسي بطرق متشابهة ، فلماذا نحتاج إلى لغتين منفصلتين؟
لذا ، هل يمكننا البدء بالمناهج التي تتبعها Rust and Go وتفسير جوهر كل منها؟ لنجربها معًا.
** جمع القمامة **
دائمًا ما يكون "جمع القمامة ، أو عدم جمع القمامة" سؤالًا بدون إجابة صحيحة. بشكل عام ، يمكن أن تساعدنا ** جمع البيانات المهملة وإدارة الذاكرة التلقائية على تطوير برامج موثوقة وفعالة بسرعة وسهولة **. بالنسبة لبعض المطورين ، هذه ميزات أساسية.
يجادل آخرون بأن جمع البيانات المهملة ، بأداءها الزائد والإيقاف المؤقت الشامل ، يمكن أن يؤدي إلى سلوك وقت تشغيل لا يمكن التنبؤ به ويؤدي إلى زمن انتقال غير مقبول. بالطبع هناك حقيقة في هذا البيان.
Go and Rust لغتان مختلفتان تمامًا. على الرغم من أنه يمكن وصف كليهما ببساطة على أنهما لغة نظام أو بديل لـ C ، إلا أن أهدافهما وسيناريوهات التطبيق وأنماط تصميم اللغة وأولويات الوظائف مختلفة بالفعل. جمع القمامة هو عامل تفاضل أساسي كبير. تجعل عملية جمع البيانات المهملة في Go اللغة أبسط وأصغر وأسهل في الفهم. لا يحتوي Rust على مجموعة القمامة ، مما يجعله سريعًا للغاية (هذا مناسب بشكل خاص للمطورين الذين لا يحتاجون فقط إلى إنتاجية عالية ، ولكن أيضًا وقت استجابة منخفض) ، كما أنه يدرك سلسلة من الوظائف وأنماط البرمجة التي لا تستطيع Go القيام بها على الإطلاق (At الأقل دون التضحية بالأداء).
بينجكاب
** قريب من الأجهزة **
يمكن القول أن تاريخ برمجة الكمبيوتر عملية تطوير مجردة معقدة بشكل متزايد. يسمح للمبرمجين بحل المشكلات دون إيلاء الكثير من الاهتمام لكيفية عمل الأجهزة الأساسية بالفعل. هذا التصميم يجعل البرامج ** أسهل في الكتابة وأكثر قابلية للنقل **. ولكن بالنسبة للبرامج الأخرى ، يعد الوصول إلى الأجهزة والتحكم الدقيق في كيفية تنفيذ البرنامج أكثر أهمية.
** هدف Rust هو السماح للمبرمجين "بالاقتراب من الأجهزة" واستعادة المزيد من التحكم ؛ بينما يقوم Go بإبعاد التفاصيل المعمارية ، مما يسمح للمبرمجين بالاقتراب من المشكلة. **
كلتا اللغتين لهما مجالات تطبيق مختلفة. يُعد Go جيدًا في كتابة الخدمات المصغرة ومهام "DevOps" النموذجية ، ولكنها ليست لغة برمجة أنظمة. يعتبر Rust أقوى في المهام التي تؤكد على التزامن والسلامة و / أو الأداء ، ولديه منحنى تعليمي أكثر حدة من Go.
ماثيو إندلر
** الأداء أولاً **
في الواقع ، بالنسبة لمعظم البرامج ، يكون الأداء أقل أهمية من قابلية قراءة الكود. ولكن إذا كانت بعض المشاريع تضع الأداء حقًا في المقام الأول ، فهناك العديد من مقايضات التصميم في ** Rust والتي ستساعدك على دفع سرعة تنفيذ التعليمات البرمجية الخاصة بك إلى أقصى حد. **
في المقابل ، تهتم ** Go بشكل أكبر ببساطة الكود ، وهي على استعداد للتضحية ببعض أداء وقت التشغيل من أجلها **. لكن سرعة بناء Go لا مثيل لها ، والتي غالبًا ما تكون أكثر أهمية لمشاريع التعليمات البرمجية واسعة النطاق.
الصدأ يعمل بشكل أسرع من Go. في المعايير ، يكون Rust بالفعل أسرع ، في بعض الحالات بترتيب من حيث الحجم. ولكن قبل اختيار Rust ، كن واضحًا: Go ليس بعيدًا في معظم المعايير ، ولا يزال يحتفظ بميزة الأداء على لغات مثل Java و C # و Java و Python.
إذا كنت بحاجة إلى أداء متميز ، فيمكنك اختيار أي من هاتين اللغتين ، ولن يخيب أداء السرعة أبدًا. بالإضافة إلى ذلك ، إذا كنت تقوم ببناء خدمة ويب تتعامل مع أحمال عالية الكثافة وتتطلب مقياسًا رأسيًا / أفقيًا مرنًا ، يمكن لكلا اللغتين أيضًا تلبية احتياجاتك.
أندرو لادر
** صحة **
من ناحية أخرى ، إذا لم تجبر البرنامج على عدم الخطأ مطلقًا ، فستكون المقايضات مختلفة. لم يتم تصميم معظم التعليمات البرمجية للاستخدام طويل المدى ، ولكن بعض البرامج تعمل في مرحلة الإنتاج لسنوات. في مواجهة هذه الحقائق ، قد يكون من المفيد استثمار القليل من الوقت الإضافي في تطوير وضمان عمل البرنامج بشكل صحيح وموثوق به دون تكبد أعباء صيانة ثقيلة في المستقبل.
يساعدك كل من Go و Rust على كتابة البرامج الصحيحة ، ولكن بطرق مختلفة: يوفر ** Go إطار عمل اختبار مدمجًا ممتازًا ، بينما يركز Rust على القضاء على أخطاء وقت التشغيل من خلال أدوات فحص الاستعارة. **
رأيي هو: للكود الذي يجب إصداره غدًا ، استخدم Go ؛ إذا كان رمزًا يجب أن يعمل بثبات في السنوات الخمس المقبلة ، فاختر Rust.
Grzegorz Nosek
في حين أن كلا من Go و Rust جيدان بما يكفي لمشاريع التطوير الجادة ، فمن الأفضل أن نفهم تمامًا ميزاتهما ومزاياهما المختلفة. باختصار ، لا يهم ما يعتقده الآخرون: ** يمكنك فقط تحديد لغة البرمجة الأكثر ملاءمة لاحتياجات فريقك ومشروعك. **
إذا كنت ترغب في تسريع التطوير ، فلنفترض أن لديك العديد من الخدمات المختلفة لتكتبها ، أو أن فريق التطوير نفسه كبير ، فإن Go language هي الإجابة الصحيحة بالتأكيد. يولي Go اهتمامًا خاصًا للتصميم من أجل التزامن ، وهو حريص على اكتشاف سلوك الوصول غير الآمن إلى الذاكرة (كما يفعل Rust) ، لكنه لا يجبرك على إدارة كل التفاصيل بشكل فردي.
Go سريع وقوي ، ولكنه يساعد المطورين في جوهره على الابتعاد عن الطريق والتركيز على البساطة والوحدة. من ناحية أخرى ، إذا كنت بحاجة إلى الضغط على كل أوقية من الإرتفاع في الأداء ، فإن Rust مثالي.
—أندرو لادر
خاتمة آمل أن تساعدك هذه المقالة في فهم النقاط البارزة في Rust and Go. إذا كان ذلك ممكنًا ، فمن الأفضل أن تجرب هاتين اللغتين قليلاً ، لأنهما مفيدتان جدًا في أي مسار تقني ، حتى لهواة البرمجة الهواة.
ولكن إذا كنت تقضي وقتك فقط في دراسة لغة واحدة بجدية ، فيرجى ** التأكد من الخبرة والميول الخاصة بـ Go and Rust ** قبل اتخاذ أي قرار.
بالطبع ، معرفة لغات البرمجة ليست سوى جزء صغير مما يجعل مهندس برمجيات ناجحًا. بالإضافة إلى البرمجة ، يجب أن يكون المهندسون بارعين في التصميم والهندسة والعمارة والتواصل والتعاون. طالما يمكن للجميع القيام بالأشياء التالية بشكل جيد ، بغض النظر عن لغة البرمجة التي تختارها ، ستصبح أستاذًا ممتازًا في هندسة البرمجيات.
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟
المصدر: InfoQ
في عام 2023 ، لدينا ألف سبب لتعلم Rust.
في 7 أغسطس ، أصدرت مؤسسة Rust نتائج تقرير مسح الصدأ لعام 2022. ويظهر التقرير أن معدل تبني Rust مستمر في الزيادة. أشار أكثر من 90٪ من المشاركين في الاستطلاع إلى أنهم من مستخدمي Rust ؛ ويستخدم Rust في غالبية أعمال الترميز في ، بزيادة كبيرة قدرها 51.8 ٪ عن العام السابق.
ليس هناك شك في أن Rust أصبح بشكل متزايد محور اهتمام المطورين بفضل أمان الذاكرة الممتاز والأداء المتزامن. ومع ذلك ، من الصعب أيضًا تجاهل Go ، وهو لاعب "مخضرم" نسبيًا تم اختياره ذات مرة كلغة برمجة لهذا العام.
ولدت لغة Go في عام 2009 ، وقد جذبت اهتمامًا كبيرًا منذ نموذجها الفريد للتزامن ومزايا الأداء القوية. من الجدير بالذكر أنه ، مثل لغة Rust ، فإن مبتكر لغة Go "يكره" C ++ ، و Go هي أيضًا اللغة السائدة في السحابة الأصلية.
في استطلاع Stack Overflow 2022 للمطورين ، من بين 70 ألف رد على سؤال "لغة برمجة تجعل الناس يحبون ويكرهون" ، من الواضح أن المبرمجين يفضلون Rust ، وقال 86٪ منهم إنهم يحبون Rust ، و 64٪ قالوا إنهم يحبون Go. في مواجهة حالة Rust الساخنة ، سأل بعض المطورين أرواحهم: هل ما زال Go يستحق التعلم في عام 2023؟
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-b1ca7de4f1-dd1a6f-1c6801)
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-14405ab81d-dd1a6f-1c6801)
بالإضافة إلى ذلك ، في اليومين الماضيين ، أصبح اختيار Rust أو Go موضوعًا ساخنًا على Hacker News:
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-e890f21f3f-dd1a6f-1c6801)
قال أحد مستخدمي الإنترنت الذي يدعم Rust: "لقد أزعجني هذا الاختيار أيضًا لفترة طويلة. في النهاية ، فاز Rust. أولاً ، أشعر أن Rust أقرب إلى أشياء من عصر Pascal السابق ، ويمكنك التحكم في كل شيء ؛ ثانيًا ، إذا كانت الوسم والتقنيات ذات الصلة تفشيًا كبيرًا ، فسيكون Rust خيارًا أكثر أمانًا ؛ إذن ، لدينا بالفعل Python للتطوير السريع ، لذلك من المنطقي اختيار شيء أكثر تطرفًا ، و Go إلى حد ما في الوسط. أخيرًا ، يجب استخدام Rust في Core و High Profile ، لذلك من غير المحتمل القضاء عليه. "
قال مطور آخر لم يوافق على ذلك ، "لقد طورت في Go منذ ما يقرب من عشر سنوات ، لكنني حاولت مؤخرًا أيضًا تجربة Rust. أعتقد أن هناك حاليًا بعض التفضيلات الإلزامية والمضللة لـ Rust ، من تجربتي في من تجربتي في العديد من الشركات الناشئة ، بما في ذلك الحالية ، Go هي أفضل خيار لتطوير الواجهة الخلفية! لاحظ ، الأداء ، الوظيفة أو غير ذلك ... اللغتان متشابهتان للغاية! "
يجب أن أقول إن كلا من Go و Rust هما بالتأكيد لغات برمجة ممتازة. إنها حديثة وقوية ومتعددة الاستخدامات وتقدم أداءً رائعًا. لكن ليس من المنطقي حقًا المقارنة المباشرة بين Go و Rust ، من هو الأفضل ، لأن كل لغة برمجة تمثل سلسلة من المقايضات العميقة وراءها. سيتم تحسين اللغات المختلفة لتلبية الاحتياجات المختلفة ، لذلك عندما نختار لغة ، يجب أن نفكر أيضًا في نوع المشكلات التي نريد استخدامها لحلها. لذلك سنبدأ من السيناريوهات القابلة للتطبيق الخاصة بلغات Go and Rust ، ونناقش "طريقة" تصميم Go and Rust.
بينما يختلف Rust and Go اختلافًا كبيرًا في بناء الجملة والأسلوب ، كلاهما أدوات من الدرجة الأولى لبناء البرامج. لنبدأ التحليل المحدد أدناه.
الذهاب مقابل الصدأ: أوجه التشابه
يوجد الكثير من القواسم المشتركة بين Rust and Go ، وهذا هو سبب مقارنة الناس بين الاثنين. ما هي الأهداف المشتركة بينهما؟
و:
** أمان الذاكرة **
تعد كل من Go و Rust من بين ** لغات البرمجة الحديثة التي تركز على أمان الذاكرة **. على مدى عقود من تطوير اللغات القديمة مثل C و C ++ ، أصبح من الواضح أن أحد الأسباب الأساسية للأخطاء والأخطاء هو الوصول غير الآمن / غير الصحيح إلى الذاكرة.
قدم كل من So Rust and Go حلولًا مختلفة ، ولكن الهدف من كليهما هو أن تكون أكثر ذكاءً وأمانًا من حيث إدارة الذاكرة ، ومساعدة المطورين على كتابة البرامج الصحيحة بأداء ممتاز.
** سريع ومضغوط قابل للتنفيذ **
كلاهما لغتان مترجمة ، مما يعني أنه يمكن ترجمة البرامج مباشرة إلى كود آلة قابل للتنفيذ ، بحيث يمكن نشر البرامج كملف ثنائي واحد. على عكس اللغات المفسرة مثل Python و Ruby ، لا نحتاج إلى توفير مترجم فوري والكثير من المكتبات / التبعيات مع البرنامج. كانعكاس مباشر لهذه القوة الأساسية ، تميل برامج ** Rust and Go إلى العمل بشكل أسرع من اللغات المفسرة **.
** لغة الأغراض العامة **
تعد كل من Rust and Go من لغات البرمجة ذات الأغراض العامة القوية والقابلة للتوسيع والتي يمكنك استخدامها لتطوير جميع أنواع البرامج الحديثة - من تطبيقات الويب إلى الخدمات الصغيرة الموزعة ووحدات التحكم الدقيقة المضمنة وتطبيقات الأجهزة المحمولة والمزيد. ** يحتوي كلاهما على مكتبات قياسية ممتازة وأنظمة إيكولوجية مزدهرة تابعة لجهات خارجية ، بالإضافة إلى دعم تجاري قوي وقاعدة مستخدمين كبيرة. ** كان كلاهما موجودًا منذ سنوات وسيستمر في الازدهار في السنوات القادمة. سيكون Learning Go أو Rust استثمارًا معقولًا جدًا للوقت والطاقة هذه الأيام.
** أسلوب البرمجة العملي **
لا توجد لغات وظيفية بشكل مفرط (مثل Scala أو Elixir) ، كما أنها ليست موجهة بشكل كامل (مثل Java و C #). على العكس من ذلك ، على الرغم من أن كلا من Go و Rust لهما وظائف البرمجة الوظيفية والموجهة للكائنات ، إلا أنهما دائمًا ** يؤكدان على التوجه العملي ** - أي حل المشكلة بالطريقة الأنسب ، بدلاً من إجبار الجميع على استخدام طريقة محددة من خلال "الأيديولوجية". طريقة للقيام بالأشياء. ** ولكن إذا كنت تحب أسلوب البرمجة الوظيفية حقًا ، فهناك المزيد من خيارات الأدوات ذات الصلة على جانب Rust ، والتي تعد إحدى مزايا Rust over Go. **
** تنمية هائلة **
يوفر كل من Rust and Go العديد من الميزات المفيدة للبرمجة واسعة النطاق ، بحيث يمكن لكل منهما التكيف مع احتياجات العالم الحقيقي لفرق التطوير الكبيرة وقواعد التعليمات البرمجية الكبيرة. ** على سبيل المثال ، ناقش المبرمجون C لسنوات حول مكان وضع الأقواس ، وما إذا كان يجب وضع مسافة بادئة للكود بعلامات تبويب أو مسافات ؛ لكن Rust and Go يستخدم بالفعل أدوات تنسيق قياسية (Go has gofmt ، Rust It is rustfmt) لحل هذه المشكلات تمامًا مشاكل. يقومون تلقائيًا بإعادة كتابة التعليمات البرمجية الخاصة بك باستخدام أسلوب مطابق.
لا يعني ذلك أن هذا التنسيق المحدد دقيق ، ولكن ** مبرمجو Rust and Go أكثر واقعية ويفضلون اختيار معيار موحد للتنفيذ. **
تنعكس ميزة كبيرة أخرى لهاتين اللغتين في ** خط أنابيب البناء **. كلاهما يحتوي على أدوات إدارة التبعية والبناء المعيارية الممتازة والمدمجة والفعالة. هذا يعني أن المبرمجين ليسوا مضطرين للتعامل مع أنظمة بناء معقدة تابعة لجهات خارجية ، ولا يحتاجون إلى تعلم نظام جديد كل بضع سنوات.
** الصدأ أم الانهيار؟ **
بعد الحديث عن العديد من القضايا ، وحقيقة أن كلتا اللغتين جيدتان التصميم وقويتان ، فهل هناك أي نتيجة في هذه المسابقة؟ أو بما أن كلاهما خياران ممتازان ، فلماذا لا يزال الناس غاضبين على وسائل التواصل الاجتماعي ، ويكتبون منشورات طويلة في المدونة ذات تعليقات طويلة تقول "الصدأ للأغبياء" أو "Go ليست لغة برمجة على الإطلاق" نوع من الكلمات القاسية؟
بالطبع ، بعض الناس يريدون فقط التنفيس عن مشاعرهم ، لكن من الواضح أن هذا لا يساعد في حل المشكلة الفعلية. على الأقل عندما يتعلق الأمر باللغة التي يجب استخدامها في المشروع ، أو اللغة التي يجب استخدامها لاقتحام عالم البرمجة ، من الواضح أن الأصوات العالية لا تساعد في اتخاذ القرار الصحيح.
دعنا نعود إلى مناقشة البالغين ونرى كيف أن Rust and Go لديها نقاط قوة ونقاط ضعف في ظل التحليل العقلاني.
** مواجهة الصدأ: الأداء **
كما ذكرنا سابقًا ، فإن كلا من البرامج التي تم إنشاؤها بواسطة Go و Rust تكون سريعة لأنه يتم تجميعها إلى رمز الجهاز الأصلي دون المرور عبر مترجم أو جهاز افتراضي. لكن ** أداء Rust لا يزال أفضل ** ، حتى أنه يمكن مقارنته بأداء C و C ++ ، والمعروفين بمعايير أداء الصناعة. وعلى عكس هذه اللغات القديمة ، يوفر Rust أيضًا أمانًا للذاكرة وآليات أمان التزامن ، بينما لا يؤثر كثيرًا على سرعة التنفيذ. يسمح Rust أيضًا للمطورين ببناء تجريدات معقدة دون تكبد عقوبة الأداء في وقت التشغيل.
في المقابل ، ** على الرغم من أن أداء برامج Go جيد أيضًا ، إلا أن تركيز التصميم ينصب بشكل أساسي على سرعة التطوير (بما في ذلك التجميع) ، بدلاً من درجة التنفيذ **. يفضل مبرمجو Go كودًا واضحًا وقابل للقراءة ، وبالتالي فإن سرعة التشغيل أبطأ قليلاً.
لا يقضي برنامج التحويل البرمجي Go أيضًا الكثير من الوقت في إنشاء كود الآلة الأكثر كفاءة ، فهو أكثر اهتمامًا بتجميع كميات كبيرة من التعليمات البرمجية بسرعة. ** لذلك في معايير وقت التشغيل ، غالبًا ما يكون برنامج Rust هو الذي يطغى على برنامج Go. **
أداء وقت تشغيل Rust هو أيضًا متسق للغاية ويمكن التنبؤ به لأنه لا يستخدم جمع البيانات المهملة. يعتبر جامع القمامة الخاص بـ Go فعالاً للغاية وهو مُحسَّن لإبقاء أوقات التوقف قصيرة قدر الإمكان (تصبح أوقات التوقف أقصر مع كل إصدار من Go). ولكن على أي حال ، فإن جمع البيانات المهملة يقدم دائمًا بعض عدم القدرة على التنبؤ في الطريقة التي يتصرف بها البرنامج ، وقد يكون هذا خطيرًا أو حتى غير مقبول تمامًا لتطبيقات معينة (مثل الأنظمة المضمنة).
نظرًا لأن هدف Rust هو منح المبرمج التحكم الكامل في الأجهزة الأساسية ، ** يمكن تحسين برامج Rust بشكل كبير للوصول إلى الحد الأقصى من الأداء النظري للجهاز. ** هذا يجعل Rust الخيار الأفضل لحالات استخدام معينة حيث تتفوق سرعة التنفيذ على كل شيء آخر ، مثل برمجة الألعاب ونواة نظام التشغيل ومكونات متصفح الويب وأنظمة التحكم في الوقت الفعلي.
لا يهم مدى قوة لغة البرمجة إذا كان من الصعب تعلمها وإبعاد معظم الناس عنها. يبدو أن Go مصمم بشكل متعمد لتمييز نفسه عن اللغات ذات التعقيد المتزايد مثل C ++: ** يحتوي على القليل جدًا من بناء الجملة ، وعدد قليل جدًا من الكلمات الرئيسية ، ولا يحتوي حتى على العديد من الوظائف. **
هذا يعني أن لغة Go سهلة التعلم ، ويمكنك كتابة برامج مختلفة معها بعد قليل من الفهم.
النقطة الأساسية هنا هي ** "البساطة" ** ثلاث كلمات. بالطبع ، البساطة لا تعني السهولة. لكن اللغة الصغيرة والبسيطة هي بالتأكيد أسهل في التعلم من اللغة الكبيرة والمعقدة. لا توجد طرق عديدة لتحقيق تأثير واحد ، لذا فإن كود Go عالي الجودة يبدو دائمًا كما هو. هذا له فائدة أخرى: يمكننا أن نفهم بسرعة ما تفعله خدمة لا نعرفها.
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-ec17a48e0c-dd1a6f-1c6801)
** علم الوجود الأساسي لـ Go صغير ، لكن المكتبة القياسية قوية جدًا. ** أي ، بالإضافة إلى بناء جملة Go ، يجب أن يأخذ منحنى التعلم لدينا أيضًا في الاعتبار هذا الجزء من المكتبة القياسية.
من ناحية أخرى ، فإن نقل الوظائف من اللغة إلى المكتبة القياسية يعني أن كل شخص يحتاج فقط إلى التركيز على تعلم المكتبات المتعلقة باحتياجات التطوير الحالية. ** تم تصميم Go أيضًا مع المراعاة الكاملة لاحتياجات تطوير البرامج على نطاق واسع ، ويمكنه دعم قواعد الكود الكبيرة وفرق التطوير بقوة. ** في هذا النوع من السيناريوهات ، يجب أن يتمكن المطورون الجدد من البدء بسرعة. تحقيقا لهذه الغاية ، لطالما أعطى مجتمع Go الأولوية للبساطة والوضوح وتعدد الاستخدامات ومباشرة البرامج.
** تم تصميم Rust خصيصًا لتضمين مجموعة متنوعة من الميزات القوية والمفيدة التي تساعد المبرمجين على إنجاز المزيد باستخدام كود أقل. ** على سبيل المثال ، تتيح وظيفة المطابقة في Rust كتابة منطق مرن ومعبّر بسرعة:
! [Rust VS Go ، ما اللغة التي يجب أن يختارها المطورون في عام 2023؟ ] (https://img-cdn.gateio.im/resized-social/moments-69a80767fe-ad3c782f1b-dd1a6f-1c6801)
ولكن أيضًا نظرًا لأن Rust لديه الكثير من اعتبارات التصميم ، فمن الصعب تعلمه ، خاصة في المرحلة الأولية. لكن هذا جيد ، لغة C ++ أو Java لديها الكثير لتتعلمه بعد كل شيء ، ولا تقدم حتى ميزات Rust المتقدمة مثل أمان الذاكرة. لذلك من غير المعقول حقًا انتقاد صوت Rust المعقد للغاية: فهو مصمم للتأكيد على ** التعبير والوظائف الغنية ** ، ولا يمكننا أن نتوقع أن يكون بسيطًا ونقيًا مع الاستفادة من الفوائد. لذلك بالطبع لدى Rust منحنى التعلم الخاص به. ولكن طالما تم التغلب على هذه الصعوبة ، فسيكون هناك طريق سلس أمامنا.
** على الرغم من استعارة Rust and Go لبعض الميزات من بعضها البعض (مثل الأدوية الجنيسة) ، فمن الإنصاف القول إن ميزات Rust لا تزال متفوقة ، وميزات Go غير موجودة نسبيًا. **
توفر معظم اللغات شكلاً من أشكال الدعم للبرمجة المتزامنة (أي إجراء عمليات متعددة في نفس الوقت) ، ولكن تم تصميم Go لهذا الغرض من الألف إلى الياء. ** لا تستخدم Go مؤشرات ترابط نظام التشغيل ، ولكنها توفر بديلاً خفيف الوزن: goroutines. ** كل goroutine عبارة عن وظيفة Go منفذة بشكل مستقل والتي يقوم مجدول Go بتعيينها إلى أحد مؤشرات ترابط نظام التشغيل الخاضعة للتحكم. أي أن المجدول يمكنه إدارة عدد كبير من goroutines المتزامنة بكفاءة عالية ، بينما يستخدم فقط عددًا محدودًا من مؤشرات ترابط نظام التشغيل.
لذلك ، يمكننا تشغيل الملايين من goroutines المتزامنة في برنامج واحد دون القلق بشأن التسبب في مشاكل خطيرة في الأداء. لهذا السبب ، يعد ** Go حلاً كاملاً لسيناريوهات التطبيقات المتزامنة واسعة النطاق مثل خوادم الويب والخدمات المصغرة. **
يوفر ** Go أيضًا قنوات لـ goroutines ** ، وهي طريقة سريعة وآمنة وفعالة للتواصل ومشاركة البيانات. مستوى تصميم التزامن Go مرتفع بالفعل ، وتجربة الاستخدام مريحة للغاية وممتعة.
بشكل عام ، يعد تصميم البرامج المتزامنة أمرًا صعبًا للغاية ، كما أن بناء برامج متزامنة موثوقة وصحيحة بأي لغة ليس بالأمر السهل بأي حال من الأحوال. ومع ذلك ، نظرًا لأنه تم النظر في هذا المطلب في بداية المشروع ، فقد تم جعل آلية البرمجة المتزامنة في Go بسيطة قدر الإمكان ومتكاملة بشكل جيد.
في المقابل ، هبطت آلية التزامن في ** Rust للتو ولم تستقر بعد ** ، لذلك نرحب بالجميع لمواصلة الانتباه إلى اتجاه التطوير النشط هذا. هذا مفيد أيضًا ، على سبيل المثال ، توفر مكتبة Rust's rayon طريقة أنيقة وخفيفة الوزن للغاية يمكنها تحويل الحسابات المتسلسلة إلى حسابات متوازية.
في حين أنه قد لا يكون من السهل تنفيذ البرامج المتزامنة في Rust ، إلا أنه لا يزال قابلاً للتنفيذ تمامًا ، و ** تستفيد هذه البرامج أيضًا من ضمانات أمان الذاكرة المصممة بعناية من Rust. ** خذ فئة Mutex في المكتبة القياسية كمثال: في Go ، قد ننسى الحصول على كائن المزامنة قبل الوصول إلى شيء ما ؛ ولكن في Rust ، لا داعي للقلق بشأنه على الإطلاق.
كما ذكرنا سابقًا ، لدى كل من Go و Rust طرقهما الخاصة لمنع العديد من أخطاء البرمجة الشائعة ، خاصة المشكلات المتعلقة بإدارة الذاكرة. لكن ** Rust يذهب إلى أبعد من ذلك ، ويمكن القول إنه لا يدخر جهدًا لضمان عدم ارتكاب أي شخص لأخطاء أمنية غير متوقعة. **
ومع ذلك ، فإن تجربة البرمجة في Rust تختلف عن أي لغة أخرى تقريبًا ، و ** يمكن أن تكون صعبة للغاية ** عند تقديمها لأول مرة. لكن في نظر العديد من المطورين ، من الواضح أن هذا الجهد يستحق المال.
توفر العديد من اللغات ، بما في ذلك Go ، أدوات لمساعدة المبرمجين على تجنب الأخطاء ، ولكن ** Rust يرتقي بهذا التأثير إلى مستوى جديد **. العديد من البرامج غير الصحيحة لا تجمع على الإطلاق.
"قتال مدقق الاستعارة" أمر لا بد منه للقادمين الجدد من Rust ، ولكن بالنسبة للجزء الأكبر ، فإن المدقق ليس العدو حقًا. المشاكل التي يجدها هي في الواقع أخطاء حقيقية (أو على الأقل أخطاء محتملة) في الكود. ** قد يجبرنا ذلك على إعادة هيكلة برامجنا بشكل أساسي لتجنب مثل هذه المشكلات ** - إذا وضعت حقًا الدقة والموثوقية على رأس أولوياتك ، فمن الواضح أن هذا المطلب الصارم يعد أمرًا جيدًا.
من منظور آخر ، هل يمكن تسمية لغة جديدة لا تغير طريقة البرمجة بلغة جديدة؟ وعند استخدام لغات أخرى ، علمنا ** Rust أن نفكر بأمان ، وهو أمر لا يقل أهمية **.
قد تعتمد الصعوبة الفعلية لبدء استخدام نموذج برمجة Rust ** على اللغات الأخرى التي استخدمتها من قبل **. قد يجد مبرمجو Python أو Ruby أن Rust مقيد للغاية ، لكن قد يجد آخرون أن الوضوح والقيود الواضحة أمر جيد.
عندما تحل مشكلة بمفردك أو في فريق صغير ، سواء اخترت لغة بسيطة أو لغة غنية ، فهي مسألة تفضيل شخصي بحت. ومع ذلك ، مع التوسع في ** مقياس البرنامج ، والتعقيد ، وتوسع الفريق ** ، بدأت الاختلافات بين اللغتين في الظهور حقًا.
بالنسبة للتطبيقات الكبيرة والأنظمة الموزعة ، غالبًا ما تكون سرعة تنفيذ التعليمات البرمجية أقل أهمية من سرعة التطوير: لغة مثل Go التي تؤكد عمدًا على التصميم الهزيل يمكن أن تقصر وقت التكيف ** للمطورين الجدد وتسمح لهم بالمشاركة بسرعة أكبر للمساهمة في قواعد البرمجة الكبيرة.
دائمًا ما يكون الوضوح والوضوح أكثر أهمية من الأناقة عندما يتعلق الأمر بتطوير البرامج على نطاق واسع. ** تجعل قيود Go في الواقع أكثر قابلية للتكيف مع احتياجات الشركات والمؤسسات الكبيرة من اللغات الأكثر تعقيدًا وقوة مثل Rust. **
** الصدأ مقابل Go: الاختلافات **
في حين أن كلا من Rust و Go هما لغات حديثة شائعة الاستخدام على نطاق واسع ، إلا أنهما ليسا منافسين حقًا لأنهما يستهدفان حالات استخدام مختلفة تمامًا **.
يختلف النهج الكامل للبرمجة في Go تمامًا عن Rust ، وهذه الميزات مناسبة بشكل خاص لبعض الأشخاص ، ولكن من ناحية أخرى يمكن أن تثير غضب الآخرين تمامًا. وهذا أمر منطقي ، لأنه إذا كان كل من Rust and Go يحلان نفس المشكلات بشكل أساسي بطرق متشابهة ، فلماذا نحتاج إلى لغتين منفصلتين؟
لذا ، هل يمكننا البدء بالمناهج التي تتبعها Rust and Go وتفسير جوهر كل منها؟ لنجربها معًا.
دائمًا ما يكون "جمع القمامة ، أو عدم جمع القمامة" سؤالًا بدون إجابة صحيحة. بشكل عام ، يمكن أن تساعدنا ** جمع البيانات المهملة وإدارة الذاكرة التلقائية على تطوير برامج موثوقة وفعالة بسرعة وسهولة **. بالنسبة لبعض المطورين ، هذه ميزات أساسية.
يجادل آخرون بأن جمع البيانات المهملة ، بأداءها الزائد والإيقاف المؤقت الشامل ، يمكن أن يؤدي إلى سلوك وقت تشغيل لا يمكن التنبؤ به ويؤدي إلى زمن انتقال غير مقبول. بالطبع هناك حقيقة في هذا البيان.
يمكن القول أن تاريخ برمجة الكمبيوتر عملية تطوير مجردة معقدة بشكل متزايد. يسمح للمبرمجين بحل المشكلات دون إيلاء الكثير من الاهتمام لكيفية عمل الأجهزة الأساسية بالفعل. هذا التصميم يجعل البرامج ** أسهل في الكتابة وأكثر قابلية للنقل **. ولكن بالنسبة للبرامج الأخرى ، يعد الوصول إلى الأجهزة والتحكم الدقيق في كيفية تنفيذ البرنامج أكثر أهمية.
** هدف Rust هو السماح للمبرمجين "بالاقتراب من الأجهزة" واستعادة المزيد من التحكم ؛ بينما يقوم Go بإبعاد التفاصيل المعمارية ، مما يسمح للمبرمجين بالاقتراب من المشكلة. **
في الواقع ، بالنسبة لمعظم البرامج ، يكون الأداء أقل أهمية من قابلية قراءة الكود. ولكن إذا كانت بعض المشاريع تضع الأداء حقًا في المقام الأول ، فهناك العديد من مقايضات التصميم في ** Rust والتي ستساعدك على دفع سرعة تنفيذ التعليمات البرمجية الخاصة بك إلى أقصى حد. **
في المقابل ، تهتم ** Go بشكل أكبر ببساطة الكود ، وهي على استعداد للتضحية ببعض أداء وقت التشغيل من أجلها **. لكن سرعة بناء Go لا مثيل لها ، والتي غالبًا ما تكون أكثر أهمية لمشاريع التعليمات البرمجية واسعة النطاق.
من ناحية أخرى ، إذا لم تجبر البرنامج على عدم الخطأ مطلقًا ، فستكون المقايضات مختلفة. لم يتم تصميم معظم التعليمات البرمجية للاستخدام طويل المدى ، ولكن بعض البرامج تعمل في مرحلة الإنتاج لسنوات. في مواجهة هذه الحقائق ، قد يكون من المفيد استثمار القليل من الوقت الإضافي في تطوير وضمان عمل البرنامج بشكل صحيح وموثوق به دون تكبد أعباء صيانة ثقيلة في المستقبل.
يساعدك كل من Go و Rust على كتابة البرامج الصحيحة ، ولكن بطرق مختلفة: يوفر ** Go إطار عمل اختبار مدمجًا ممتازًا ، بينما يركز Rust على القضاء على أخطاء وقت التشغيل من خلال أدوات فحص الاستعارة. **
في حين أن كلا من Go و Rust جيدان بما يكفي لمشاريع التطوير الجادة ، فمن الأفضل أن نفهم تمامًا ميزاتهما ومزاياهما المختلفة. باختصار ، لا يهم ما يعتقده الآخرون: ** يمكنك فقط تحديد لغة البرمجة الأكثر ملاءمة لاحتياجات فريقك ومشروعك. **
خاتمة آمل أن تساعدك هذه المقالة في فهم النقاط البارزة في Rust and Go. إذا كان ذلك ممكنًا ، فمن الأفضل أن تجرب هاتين اللغتين قليلاً ، لأنهما مفيدتان جدًا في أي مسار تقني ، حتى لهواة البرمجة الهواة.
ولكن إذا كنت تقضي وقتك فقط في دراسة لغة واحدة بجدية ، فيرجى ** التأكد من الخبرة والميول الخاصة بـ Go and Rust ** قبل اتخاذ أي قرار.
بالطبع ، معرفة لغات البرمجة ليست سوى جزء صغير مما يجعل مهندس برمجيات ناجحًا. بالإضافة إلى البرمجة ، يجب أن يكون المهندسون بارعين في التصميم والهندسة والعمارة والتواصل والتعاون. طالما يمكن للجميع القيام بالأشياء التالية بشكل جيد ، بغض النظر عن لغة البرمجة التي تختارها ، ستصبح أستاذًا ممتازًا في هندسة البرمجيات.