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

اللغات النصية ولغات البرمجة -الجزء الاول

تمّ تصميم اللغات النصيّة Scripting Languages لتولّي مهمات برمجية مختلفة عمّا تقوم به لغات برمجةِ النظام، ممّا أدى إلى اختلافاتٍ جوهرية مابين النوعين.

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

تعدّ لغات البرمجة واللغات النصيّة مكمّلتان لعمل بعضهما البعض، وقد قدّمت معظم منصات العمل البرمجية الكبرى منذ ستينيات القرن الماضي كلا النوعين من اللغات، إذ تُستخدم هذه اللغات معاً في أُطر عمل المكونات، فيتم بناءُ هذه المكونات باستعمال لغاتِ برمجة النظام ومن ثمَّ ربطُ هذه المكونات معاً باستعمال اللغات النصية. وقد لعب كلٌّ من ظهور الآلات السريعة، وزيادة أهمية واجهات المستخدم الرسومية GUI، وبنى المكونات، ونمو الإنترنت دوراً كبيراً في زيادة استعمال اللغات النصية، وسيستمر ذلك خلال العقد القادم مع ظهور المزيد من التطبيقات المبنيّة كليّاً باستعمال اللغات النصية مع وجود لغات البرمجة بشكلٍ أولي لبناء المكوّنات.

لغات البرمجة Programming Languages:

لنفهم الفرق بين لغات برمجة النظام واللغات النصية، من المهم معرفة مراحل تطوّر لغات البرمجة.

ظهرت لغاتُ البرمجة كبديلٍ عن لغات التجميع* (assembly languages)، والتي يتمُّ فيها عكس كل جوانب الآلة ضمن رماز لغة التجميع، وتمثّل كلُّ عبارة ضمن هذا الرماز تعليمةً واحدةً للآلة. ويضطَّرُ المبرمجون إلى التعامل مع تفاصيل من المستوى الأدنى مثل حجز سجلات الذاكرة وسلسلة استدعاء الإجرائيات، ممّا جعل كتابة البرامج الكبيرة باستعمال لغات التجميع أمراً بالغ الصعوبة. مثال عن عملية الجمع باستخدام لغة التجميع: add $t0،$t1،$t2

تمثل هذه العبارة عمليةَ جمعِ القيمتين الموجودتين ضمن السجلين t1 وt2 مع وضع ناتجِ الجمع ضمن السجل t0.

بحلول أواخر الخمسينيات، ظهرت لغات برمجةٍ عالية المستوى مثل ليسب (Lisp) وفورتران (Fortran)، ولم تعد العبارات ضمن هذه اللغات تتراسل مباشرةً مع تعليمات الآلة بل يقوم المترجم (compiler) بترجمة كلّ عبارةٍ برمجية إلى سلسلةٍ من التعليمات الثنائية (المرمّزة باستعمال الرمزين 0 و1).

وبعد فترةٍ ظهرت لغاتٌ جديدة أكثر تطوّراً سُمّيت «لغات برمجة النظام» مثل سي C وسي بلس بلس ++C والجافا Java. وعلى الرغم من أن لغات البرمجة أقل كفاءةً من لغات التجميع، إلا أنها تسمح بتطوير التطبيقات بشكلٍ أسرع، ولذلك حلّت لغات البرمجة محلّ لغات التجميع بشكلٍ شبه كامل من أجل تطوير التطبيقات الكبيرة.

الفرق بين لغات التجميع ولغات البرمجة هو أن لغات البرمجة لغاتٌ عالية المستوى وقوية الكتابة. يُقصد باللغات عاليةِ المستوى أنها تعالجُ العديد من التفاصيل بشكلٍ أوتوماتيكي ممّا يقلّل عدد الأسطر البرمجية التي يحتاج المبرمجون إلى كتابتها للحصول على النتيجة نفسها، فعلى سبيل المثال، يتولى المترجمُ مهامَ حجز السجلات من دون حاجة المبرمج إلى كتابة رمازٍ خاص بنقل المعلومات بين السجلات والذاكرة.

كما يقصد بقوة الكتابة تحديد المبرمج لطريقة استعمال كل جزءٍ من المعلومات ضمن برنامجه منذ البداية، بحيث تمنعُ لغةُ البرمجة استعمالَ أي جزءٍ بطريقةٍ مختلفة عمّا تمّ تحديده، وهذا على عكس اللغات ضعيفة الكتابة الخالية من القيود المسبقة الخاصة بكيفية استعمال المعلومات (يتم تحديد معنى المعلومات حسب طريقة استخدامها وليس حسب قيود معرّفة من البداية).

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

كتلخيصٍ لما سبق، تم تصميمُ لغاتِ البرمجة لتتولّى مهامًا مشابهة للغات التجميع، ولكنها نقلت البرمجة إلى مستوى أعلى وجعلتها أقوى في الكتابة، ممّا جعل تطوير التطبيقات أكثر سرعةً مع تراجعٍ بسيطٍ في الأداء مقارنةً مع أداء لغات التجميع.

تعرفنا في هذا المقال على لغات البرمجة، و سنكمل حديثنا عن اللغات النصية في مقالنا القادم فانتظرونا!

-----------------------------------------------