المترجم

  • تحسين أداء البرنامج باستخدام تحسينات الكود وتحسينات المترجم.

    فيما يتعلق بتغييرك في ملف الـ makefile، يظهر أنك قمت بتعديل القيمة الخاصة بـ CXXFLAGS بإضافة الخيارات -funroll-loops -O3، وهذا يمكن أن يكون له تأثير كبير على أداء البرنامج الخاص بك.

    أولاً وقبل كل شيء، دعنا نلقي نظرة على الخيارين الجديدين التي أضفتهما:

    1. -funroll-loops: هذا الخيار يشير إلى تفكيك الحلقات (Loops Unrolling)، وهو تقنية تقوم بتكرار جسم الحلقة لتقليل تأثير تكلفة فتح وإغلاق الحلقة، مما يمكن أن يؤدي إلى تحسين أداء البرنامج على بعض الأنواع من المعالجات.

    2. -O3: يشير إلى تحسين مستوى التحسين في المترجم (Compiler Optimization Level 3). يعمل على تحسين الأداء بتنفيذ مزيد من الأمور مثل تحسين تحسين استخدام المسجلات وتحسين الكود الذي يتم إصداره.

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

    أما بالنسبة لـ -O3، فإن تحسين مستوى التحسين يعني أن المترجم سيحاول تحسين أكبر قدر ممكن من الكود المصدر لتحسين الأداء. قد تشمل هذه الأمور تحسين استخدام المسجلات، وتقليل التكرار، وتحسين تحسين الكود المصدر بشكل عام.

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

    المزيد من المعلومات

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

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

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

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

  • ما هو المترجم ؟ Compiler

    ما هو المترجم ؟ Compiler

    المترجم (Compiler) هو برنامج يستخدم لتحويل ملفات الشفرة المصدرية في لغة برمجة معينة إلى ملفات تنفيذية قابلة للتشغيل على نظام الحاسوب. عندما يكتب المطورون البرمجيات بلغات مثل C، C++، Java، Python، يكتبون الشفرة المصدرية التي تكون عبارة عن تعليمات مفهومة للإنسان وتحتاج إلى تحويل لتنفيذها على الحاسوب.

    عمل المترجم ينقسم عادة إلى ثلاث مراحل:

    1. المرحلة الأولى (Lexical Analysis):
    – يقوم المترجم بتحليل الشفرة المصدرية وتقسيمها إلى مجموعة من العناصر المعروفة باسم الرموز (Tokens).
    – الرموز هي الوحدات الصغيرة من الشفرة المصدرية مثل الكلمات المفتاحية والمعاملات والعلامات النهاية.

    2. المرحلة الثانية (Syntax Analysis):
    – يقوم المترجم بتحليل الهيكل اللغوي للشفرة المصدرية.
    – يتحقق المترجم مما إذا كانت الشفرة المصدرية تتبع قواعد اللغة البرمجية المحددة أم لا.

    3. المرحلة الثالثة (Code Generation):
    – بناءً على التحليل السابق، يقوم المترجم بتوليد ملف تنفيذي (Executable) يحتوي على الشفرة المصدرية المحولة إلى لغة آلة يمكن تنفيذها مباشرة على الحاسوب.
    – يتم ترجمة الشفرة المصدرية إلى لغة آلة تعترف بها وحدة المعالجة المركزية (CPU) الخاصة بالحاسوب.

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

    فيذها بشكل صحيح وفعال.

  • مصطلحات أساسية في البرمجة

    ما هي المصطلحات التي تتكر كثيرا عند كل مبرمج ؟

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

    🔸 المتغيرات Variables

    المتغيرات هي عبارة عن مواقع في الذاكرة تخزن البيانات بشكل مؤقت ويمكن تغيير قيمتها أثناء تنفيذ البرنامج. فمثلا يمكن للبرنامج أن يُخزن في المتغير Var1 القيمة 1 ثم يخزن القيمة 2، والقيمة التي سترجع من المتغير
    هي آخر قيمة تم تخزينها.

    ‏🔸 الثوابت Constant

    هي عبارة عن مواقع في الذاكرة تُخزن فيها البيانات بشكل مؤقت ولكن لا يمكن تغيير قيمتها أثناء تنفيذ البرنامج. فمثلا يُمكن للبرنامج أن يخزن في الثابت Con1 القيمة 1 لكنه لا يستطيع تغييرها وإن حاول تغييرها فإن المترجم يُرسل رسالة خاطئة أثناء تنفيذ البرنامج.

    ‏🔸 الحدث Event

    هو عبارة عن فعل يقوم به المستخدم للبرنامج المصمم كالنقر على أداة “الزر Button” أو تغيير نص في مربع نص “Text Box” أو حتى تحريك الماوس أو الفأرة ويرافقه تنفيذ الإجراء المتعلق به.

    ‏🔸 الإجراء Procedure

    هو عملية أو عمليات ينفذها البرنامج عند تحقق حدث معين كالنقر على أداة الزر “Button” في البرنامج.

    🔸 الكائن object

    قد يكون تعريف لكود أداة تحكم مثل الزر “Button” ويكون له عدة إجراءات.

    🔸 الكود أو “الشفرة البرمجية” Code

    هو عبارة عن أوامر برمجية تعطى للكمبيوتر على شكل نص تُكتب بواسطة لغة من لغات البرمجة كلغة “الفيجوال بيسك” والتي يفسرها مترجم يسمى ليفهمها الكمبيوتر ولكل وحدة نمطية أو أداة تحكم كود
    خاص به في الفيجوال بيسك. وقد يكون الكود مقسما إلى ‏كائنات “Objects”،
    ودالات أو توابع “Functions”، وإجراءات “Procedures”، و أحداث “Events”.

    🔸 المترجم Compiler

    هو أداة تقوم بترجمة البرنامج دفعة واحدة إلى لغة الآلة وتُنتج ملف تنفيذى بامتداد “exe –> executable file”، يعمل مباشرة بدون وسيط، وهذا يعنى أن لغات البرمجة المترجمة تقوم بتحويل النص البرمجى المكتوب بها إلى لغة الآلة مباشرة وتُنتج ملف تنفيذي، ‏

    🔸 المفسر Interpreter

    هو أداة تقوم بترجمة البرنامج إلى لغة الآلة سطر سطر، وهذا يعنى أن البرنامج المكتوب بلغات برمجة تفسيرية يتم ترجمته إلى نص برمجى وسيط بلغة منخفضة المستوى ( لغة وسيطة )، ويُنتَج ملف للبرنامج وبداخله هذا الكود, لذا لا يمكن تنفيذه على هذه الصورة مباشرة حيث يحتاج إلى ‏برنامج آخر يقوم بترجمة الأكواد المكتوبة بداخله إلى لغة الآلة، هذا البرنامج يسمى “المفسر”، ففي لغة الــJava مثلاً يُترجم النص البرمجى إلى كود وسيط يسمى “Byte code”، وتُنتج ملف بامتداد jar، هذا الكود البرمجي لا يُمكن تشغيله وتنفيذه على أي جهاز مباشرة حيث يحتاج إلى ما ‏يسمى “آلة جافا الافتراضية”، والتى تعمل كمفسر للبرنامج الناتج حتى يتم تنفيذه.
    تطبيقات الدوت نت أيضا تعتمد على نفس الأسلوب بحيث يتم تحويل الكود البرمجى المكتوب بلغة من لغات الدوت
    إلى لغة وسيطة منخفضة المستوى تسمى لغة “مايكروسوفت Visual Basic نت”.

  • ما هو الفرق بين المترجم والمفسر ؟ Compiler vs Interpreter

    المترجم Compiler والمفسر Interpreter في واقع الأمر عبارة عن برنامجين يقومان بنفس الغرض، والمتمثل في تحويل الأوامر المكتوبة بإحدى لغات البرمجة العالية المستوى (high level language) من قبيل Java و#C و++C، إلى لغة الآلة Machine Language (أوامر مكتوبة بالبيانات الثنائية Binary Data أي سلاسل من الأصفار والوحدات).

    ⁦▫️⁩إذاً وإن كان لهما نفس الدور، فلماذا يوجد مترجم “Compiler” ومفسر “Interpreter” ولماذا لا يوجد أحدهما فقط ؟

    لنتعرف على أهم الفروق بين البرنامجين، وعلى السبيل الذي يسلكه كلاهما من أجل تحويل التعليمات والأوامر العالية المستوى (والتي تسمى أيضاً البرنامج المصدري Source Program) إلى أوامر مكتوبة بلغة الآلة.

    Difference between Compiler and Interpreter - TutorialsMate


    🔸 المترجم Compiler :

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


    🔸 المفسر Interpreter :

    يقوم تقريباً بنفس الدور الذي يقوم به المترجم مع اختلاف بسيط، يتجلى في أن المفسر لا يقوم بتحويل الكود المصدري إلى كود الآلة مباشرة وإنما يقوم بتحويله إلى لغة وسيطة (intermediate code)، بعد ذلك يتم تحويل كل جزء من أجزاء الكود الناتج إلى لغة الآلة، ثم يتم تنفيذ هذه الأجزاء أمراً بأمر (Statement by statement)، وأي أمر يضم خطأً يؤدي إلى توقيف عملية تحويل الأجزاء المتبقية.


زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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