ما هو وما هو ليس في الذهاب. الجزء 1

مرحبًا بالجميع ، عشية بدء سلسلة رسائل جديدة في دورة "Golang Developer" ، نود أن نطلعكم على ترجمة لمقال مثير للاهتمام ، وفي الجزء الأول منه نتفهم العناصر الموجودة في Go. دعنا نذهب.



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

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

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

العناصر الموجودة في Go


جمع القمامة


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

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

حزم


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

وظائف من الدرجة الأولى


إن وظيفة من الدرجة الأولى هي وظيفة يمكن معالجتها مثل أي متغير آخر ، أي أنه يمكن تعيينها أو إرجاعها أو تصديرها أو تمريرها كمعلمة ، إلخ. انظر إلى المقتطف التالي المكتوب في Go. يتم تعيين الدالة التي تطبع الدالة hello world first class function للمتغير a . يتصرف المتغير مثل القيمة الفعلية في الذاكرة ، ومع ذلك يمكن أيضًا استدعاؤه كدالة عن طريق إضافة () في النهاية. يمكنك أيضًا رؤية أن قيمة a يتم عرضها بنفس طريقة عرض أي متغير آخر. هذا هو المفهوم الأساسي لوظائف الدرجة الأولى.

 package main import ( "fmt" ) func main() { a := func() { fmt.Println("hello world first class function") } a() fmt.Printf("%T", a) } 

نطاق المعجمية


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

 package main import “fmt” func main() { { v := 1 { fmt.Println(v) } fmt.Println(v) } fmt.Println(v) // “undefined: v” compilation error } 

في الجزء المعطى هناك أربعة مجالات رؤية. الأول هو المنطقة العالمية ، والثاني هو الوظيفة main () ، والثالث هو الكتلة الأولى داخل الوظيفة main ، والرابع هو المنطقة التي تسمى fmt.Println لأول مرة. من Println الثلاثة Println يرمي الأخير خطأ ترجمة. وذلك لأن تعريف المتغير v متاح فقط في المجالين الثالث والرابع. عند Println بـ v Println كمعلمة ، يبحث البرنامج أولاً عن تعريفه في المنطقة الحالية ، وعندما يتعذر العثور عليه ، ينتقل إلى الخارج في نطاق الأصل وسيواصل القيام بذلك حتى يجد تعريفه. هذا هو النطاق المعجمي - يبدأ البرنامج في البحث عن تعريف المتغيرات والوظائف من المنطقة التي يتم استخدامها / يطلق عليها ، وينتقل. في آخر برنامج fmt.Println ، لم يكن من الممكن العثور على تعريف v في المجال الحالي أو في أي من المناطق الأصل ، وبالتالي فقد حدث خطأ في fmt.Println البرمجي.

واجهة استدعاء النظام


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

سلاسل ثابتة


على الرغم من أن بناء جملة Go يشبه C ، إلا أنه يتمتع بميزة على شكل خطوط ثابتة غير مشفرة في UTF-8. وهذا يعني أن البرامج المكتوبة في Go يمكن أن تشكل سلاسل باستخدام العديد من اللغات والأحرف. بمعنى بسيط ، السلاسل عبارة عن مجموعة / مجموعة / قائمة من الأحرف في لغات البرمجة. منذ تشكيل السلاسل عن طريق الجمع بين الحروف ، يمكن تغيير تركيبها. يمكن إضافة الأحرف أو حذفها أو نقلها ، وما إلى ذلك. نعتبر الطريقة التي تضمن ثبات السلسلة بعد إعلانها. مفهوم السلاسل الثابتة غير جديد ، ففي حالات بيثون سترينج لا يمكن تحور الكائنات ، وجافا سكريبت بها أيضًا سلاسل غير قابلة للتغيير ، وأضاف روبي Frozen String Literals في 2.3. ولكن ، مع ذلك ، فإن العديد من اللغات الشائعة ، مثل C ++ و PHP و Perl وما إلى ذلك ، ليس لها سلاسل ثابتة.

لذلك ، في هذا الجزء الأول من المقالة انتهى. في ذلك ، تم تفكيك العناصر الموجودة في Go ، وحول ما هو غير موجود في Go ، يمكنك أن تقرأ في الجزء الثاني من المقال .

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


All Articles