اذهب من خلال عيون مبرمج الصدأ: الانطباعات الأولى

تحسبًا لبدء الدورة التدريبية ، أعدت "Golang Developer" ترجمة لمواد مثيرة للاهتمام. ما هو انطباعك الأول عن Go؟




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

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

الانطباعات العامة


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

لقد لاحظت إحباطًا أقل بكثير وإنتاجية أكثر بكثير من استخدام C / C ++ و Java و Python وما إلى ذلك. ومع ذلك ، لا يزال Go يشعر به كجزء من هذا الجيل من اللغات. لقد تعلم منهم ، وأعتقد أن هذه ربما تكون أفضل لغة في هذا الجيل. لكنه بالتأكيد جزء من هذا الجيل. إنه يمثل تحسينًا تدريجيًا وليس شيئًا جديدًا بشكل أساسي (تجدر الإشارة إلى أن هذا ليس حكمًا تقديريًا - غالبًا ما تكون الزيادة مفيدة في عالم تطوير البرمجيات). خير مثال على ذلك هو لا شيء: تتخلص لغات مثل Rust و Swift من النموذج الفارغ ، وبالتالي القضاء على فئة كاملة من الأخطاء. Go يجعلها أقل خطورة: لا قيم فارغة ؛ تحديد الصفر والصفر. لكن الفكرة الأساسية لا تزال موجودة ، وكذلك خطأ وقت التشغيل الواسع في إلغاء الإشارة إلى مؤشر فارغ.

سهولة التنمية


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

عدة عوامل لصالح التعلم:

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


روتين التعليمات البرمجية


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

تساهم معالجة الخطأ أيضًا في التكرار. تحتوي العديد من الميزات على قوالب أكثر if err != nil { return err }من الرمز الأصلي.

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

ما اعجبني


  • . ; Rust. , ( , C/C ++ , - ).
  • . Go — . , , , .
  • . , , .
  • if ...; ... { }بناء الجملة. القدرة على تحديد نطاق المتغيرات في النص الأساسي إذا كانت العبارات جيدة. هذا أقرب إلى السماح بدخول Swift و Rust ، ولكن للأغراض العامة (لا يحتوي Go على نمط مطابق مثل Swift و Rust ، لذلك لا يمكن استخدامه إذا سمح).
  • تعليقات الاختبار والرسو سهلة الاستخدام.
  • أداة Go رائعة - كل ذلك في مكان واحد دون الحاجة إلى توصيل العديد من الأدوات من خلال سطر الأوامر
  • جامع القمامة في المخزون (GC)! لا داعي للاهتمام بإدارة الذاكرة مما يجعل البرمجة أسهل حقًا
  • Varargs.


ما لم يعجبني


لا يهم الترتيب.

  • شرائح النيل - شرائح النيل والصفر والشرائح الفارغة كلها أشياء مختلفة. أنا متأكد من أنك تحتاج إلى اثنين منهم فقط ، وليس الثلاثة.
  • لا فصول ابتدائية. استخدام الثوابت غير عادي.
  • . , ( , , , , ).
  • switch
  • for ... range /. ( ), . -, , .
  • :
    • .
    • ( , , ); , , .
    • , return.
    • (type struct).
    • public private. , .
  • . , , , , , , , .
  • لا يمكنك كتابة وظائف مع جهاز استقبال في حزمة أخرى ، لذلك ، حتى إذا تمت كتابة الواجهات بشكل ضمني ، فلا يمكن تنفيذها لأنواع أعلى ، مما يجعلها أقل فائدة بكثير.

لقد ذكرت بالفعل عدم وجود الأدوية العامة ووحدات الماكرو أعلاه.

منطق


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

بعض النقاط التي تبرز بشكل خاص:

  • , , .
  • for ... range , , .
  • , len append, , . . , Go !
  • . ==, , map, . .



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

بالمقارنة مع Rust ، Go هي لغة مختلفة تمامًا. على الرغم من أنه يمكن وصف كل منهما تقريبًا باسم لغات النظام أو "الاستبدالات" لـ C ، إلا أن لديهم أهدافًا وتطبيقات مختلفة وأنماط وأولويات تصميم اللغة. جمع القمامة هو حقًا فرق كبير. إن امتلاك GC in Go يجعل اللغة أبسط وأصغر بكثير ، ويسهل فهمها. إن نقص GC في Rust يجعلها سريعة جدًا (خاصة إذا كنت بحاجة إلى تأخير واضح ، وليس فقط عرض نطاق ترددي مرتفع) وتوفر ميزات وأنماط برمجة مستحيلة في Go (على الأقل دون التضحية بالأداء).

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



لقد انتهت الترجمة ، ونحن ندعوك إلى درس عملي مجاني عبر الإنترنت حيث ستتعلم كيفية إنشاء خدمة http تم اختبارها بالكامل من الصفر في 60 دقيقة بدون تبعيات الطرف الثالث.



All Articles