أنواع لغات البرمجة والفرق بينها

مفهوم – تتنوع لغات البرمجة وأنواعها ولكن بشكل رئيسي تنقسم لغات البرمجة إلي لغات برمجة منخفضة المستوى ولغات برمجة عالية المستوى وداخل كل نوع منهما يتشعب تصنيفات أخرى للغات البرمجة.

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

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

1- لغات البرمجة منخفضة المستوى Low Level Programming Languages

لغات البرمجة منخفضة المستوى هي عبارة عن لغات برمجة تعمل مباشرة على مجموعة التعليمات البرمجية الخاصة بالعتاد وتحديدا وحدة المعالجة المركزية و تعرف هذه التعليمات بـ Hardware Instruction Set، بمعنى أكثر إيضاحا هي عبارة عن تعليمات برمجية مصممة خصيصا لوحدة المعالجة المركزية وتختلف بإختلاف نوع وحدة المعالجة المركزية.

فإذا قمت بتصميم برنامج لكي يعمل على وحدة المعالجة المركزية من النوع Intel x64 لا يمكن أن يعمل هذا البرنامج على جهاز يحتوي على وحدة معالجة من نوع آخر مثل ARM، إلا إذا كانت وحدات المعالجة المركزية تعمل بنفس التعليمات كما هو الحال بين وحدات المعالجة المركزية من النوع Intel و AMD.

لذلك دائما ما يقال عن هذا النوع من لغات البرمجة أنها قريبة من الآلة، حيث كل أمر برمجي يقابل له جزء مادي Hardware لتنفيذه، ويمكن تقسيم هذا النوع من لغات البرمجة إلى قسمين رئيسيين:

لغة الآلة Machine Code

لغة الآلة هي اللغة الوحيدة التي يمكن لجهاز الحاسوب أن يقوم بتشغيلها مباشرة دون إجراء أي تحويلات أو تعديلات عليها.

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

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

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

عادة ما يتم دراسة الفكرة العامة للغة الآلة عن طريق ما يعرف بـ الآلة الإفتراضية أو Hypothesis Machine حتى يتمكن من يدرس هذا العلم من كتابة البرامج أو المترجمات التي تقوم بتحويل الأكواد المكتوبة بأي لغة برمجة إلى لغة الآلة.

لغة التجميع Assembly Language

لغة التجميع هي اللغة الأقرب إلى لغة الآلة، حيث يتم كتابة التعليمات البرمجية بأوامر حروفها إنجليزية بحيث كل جملة أو أمر برمجي يتم كتابته في سطر مستقل، ويتم تحويل كل سطر إلى جملة برمجية مقابلة في لغة الآلة عن طريق مايعرف بـ المجمع أو Assembler.

الناتج من تشغيل برنامج الـ Assembler يكون كود برمجي بلغة الآلة بنفس عدد الأوامر التي تم كتابتها بلغة التجميع، حيث تعرف هذه العملية بواحد لواحد أو كما تقال بالإنجليزية One to One Mapping.

كما هو الحال في لغة الآلة فإن لغة التجميع أيضا تعمل بالأوامر المحددة لكل وحدة معالجة مركزية ولكتابة برنامج يعمل على أجهزة الحاسوب بوحدة معالجة Intel أو AMD، يتم إستخدام أي من برامج الـ Assembler المخصصة لكتابة أكواد تعمل على أجهزة الحاسوب.

الأمر التالي يقوم بجمع الرقم 213 إلى الرقم الموجود في السجل EAX وتخزين قيمة الجمع في السجل EAX، السجل هو نوع من أنواع الذاكرة الخاصة بوحدة المعالجة المركزية ويسمى بـ Register وتحتوي وحدة المعالجة المركزية على العديد من السجلات كل سجل له إسم محدد مثل EAX.

ADD EAX 0x000000D5
كود الآلة المقابل للأمر البرمجي السابق بنظام العد السادس عشر

05D5000000
سوف تلاحظ أن أول رمزين هم 05 بنظام العد السادس عشر، وهذا الأمر طبقا لمجموعة الأوامر البرمجية لوحدة المعالجة المركزية إنتل Intel Instruction Set هو مساوي للأمر ADD EAX ثم D5 00 00 00 وهي قيمة العدد 213 مكتوبة بنظام العد السادس عشر بطريقة الـ Little Indian في 32 بت.

لغة التجميع من اللغات الصعبة نوعا ما، حيث تحتوي على آلاف التعليمات البرمجية التي يصعب تذكرها، بالرغم من ذلك فإن إستخدامها في كتابة أي برنامج (حتى وإن كان جزء من البرنامج) يساعد على سرعة تشغيل هذا البرنامج، فعادة ما يتم إستخدامها لكتابة أجزاء من البرامج و التي يجب أن تعمل بسرعة وكفاءة، ومعظم لغات البرمجة تدعم إضافة أكواد الـ Assembly بداخل أكواد البرنامج.

2- لغات البرمجة عالية المستوى High Level Programming Languages

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

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

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

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

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

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

لغات البرمجة المفسرة Interpreted Language

لغات البرمجة المفسرة هي لغات البرمجة عالية المستوى التي يتم ترجمة أكوادها أثناء التشغيل، ويتم ترجمة الأكواد عن طريق برنامج يعرف بـ Interpreter أو المفسر.

حيث يقوم البرنامج بقراءة الأكواد ثم تحويلها إلى لغة الآلة وتشغيل الأكواد التي تم تحويلها مباشرة دون الإحتفاظ بالأكواد التي تم ترجمتها، في كل مرة يتم تشغيل البرنامج يتم أولا قراءة الكود ثم تفسيرة وتحويله إلى لغة الآلة ثم يتم تشغيله.

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

من أمثلة لغات البرمجة المفسرة لغة JavaScript و PHP و Python و JAVA و Prolog.

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

وكذلك بالنسبة للغة الـ PHP يحب أن يتواجد برنامج المفسر الخاص بـ PHP حتى تتمكن من تشغيل أي برنامج مكتوب بهذه اللغة.

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

ومن عيوب هذا النوع أنه يحتاج إلى قدرات عالية لوحدة المعالجة المركزية ويحتاج أيضا إلى كمية كبيرة من الذاكرة العشوائية، حتى يتمكن الجهاز من تشغيل الـ Interpreter بالإضافة إلى كود البرنامج.

لغات البرمجة المترجمة Compiled Language

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

لتوضيح ذلك، عند إنتهاء المبرمج من كتابة أكواد البرنامج يقوم المبرمج بترجمة ملفات الكود بإستخدام الـ Compiler ثم يقوم بإرسال ملف التشغيل الناتج عن عملية الترجمة (Executable) إلى المستخدم النهائي للبرنامج.

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

من أمثلة هذا النوع من اللغات، لغة البرمجة C و C++ و COBOL و GO و Swift.

من مميزات هذا النوع من لغات البرمجة أن البرامج تكون سريعة في التشغيل مقارنة بالبرامج المفسرة، حيث أن البرنامج يتم تشغيله مباشرة دون الحاجة لترجمة الكود أولا، وتمتاز أيضا بعدم إستهلاك الكثير من موارد الجهاز كما هو الحال مع اللغات المفسرة.

يعاب على هذا النوع من اللغات أن المبرمج قد يطر إلى كتابة أكواد البرنامج أكثر من مرة لكي يستهدف أنظمة التشغيل المختلفة وذلك في حالة ما تم إستخدام أكواد خاصة بـ واجهة برمجة التطبيقات الخاصة بنظام تشغيل معين مثل Win32 API.

لغات البرمجة الهجين Hybrid Language

لغات البرمجة الهجين هي لغات البرمجة عالية المستوى التي يتم فيها دمج النوعين السابقين، حيث يتم ترجمة كود البرنامج إلى لغة وسيطة مثل Byte Code ثم يتم تفسير البرنامج الناتج عن هذه العملية أثناء التشغيل.

حيث يقوم المبرمج بترجمة الكود عن طريق إستخدام الـ Compiler إلى لغة أقرب إلى لغة الآلة عادة ما تسمى بـ Byte Code، وينتج عن هذه العملية ملف Executable قابل للتشغيل، يقوم المبرمج بإرسال هذا الملف إلى المستخدم النهائي للبرنامج.

ولكي يتمكن المستخدم النهائي من تشغيل هذا البرنامج فهو يحتاج إلى توفر بيئة العمل الخاصة بلغة البرمجة والتي بدورها تحتوي على نوع من البرامج القادرة على تفسير الـ Byte Code إلى لغة الآلة.

تعد بيئة العمل .Net Framework من أشهر الأمثلة على هذا النوع من البرامج.

من أمثلة هذا النوع من لغات البرمجة C# و Visual Basic و Compiled JAVA.

هذا النوع من لغات البرمجة يتم فيه دمج مميزات النوعين السابقين، وتلافي بعض العيوب في النوعين السابقين، حيث يتم ترجمة أكواد البرامج مرة واحدة أي كان نوع وحدة المعالجة المركزية أو نظام التشغيل.

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

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

شاركها

اترك تعليقاً