كيف صنعت لغات البرمجة
كثيرا منا عند دخولة مجال البرمجة او عندة فضول عن علوم الحاسب سأل نفسة هذا السؤال
كيف تصنع لغات البرمجة او كيف تم برمجت لغات البرمجة ؟؟
وتم طرح هذا السؤال علي احدي مواقع التواصل الاجتماعي وكانت الاجابات كالتالي :
صنع عن طريق ترجمة اللغة الام بواسطية المترجماتوهذه اجابة واقعية نوعا ما وتوضح جذء من السؤال
لغة البرمجة تمر بتحولين قبل ان تتفذ التحول الاول هو من اوامر نصية الى اوامر بصيغة 01 و التحول الثاني من ضيغة 01 الى اشارات كهرباء
التحول الاول تقوم به المترجمات و المترجمات عديدة و مختلفة و هي التي تحدد طريقة صنع اللغة فمع كل لغة يصنع مترجم خاص بها يحولها الى 01 ولذلك امكانية صنع لغات جديدة غير محدودة
اما المرحلة الثانية فتقوم بها برمجيات و اجهزة تأتي مع الحاسوب وتعمل وفق نفس المبدأ مع كل الاجهزة
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
لغات البرمجة في الغالب يتم تفسيرها أو ترجمتها إلى لغة برمجة أخرى أو إلى لغة الأسمبلي. والتي بدورها تتم ترجمتها إلى النظام الثنائي (0،1) والذي تعمل عليه جميع الأجهزة الإلكترونية.ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
بمعنى آخر، هناك لغات (مثل php) تتم ترجمتها إلى لغة C ثم تتم ترجمتها/تفسيرها إلى لغة الأسمبلي.
وهناك لغات تتم ترجمتها مباشرة إلى الأسمبلي .. وهكذا ..
في البداية كانت البرمجة بلغة الحاسوب 0 1 ثم تم تطوير لغة برمجة اختصار لها عن طريق النظام الست عشري ثم تطورت من خلال سابقتها لتنتج لنا الاسمبلي وبعدها بدأت لغات بدائية تسمى منخفضة المستوى مثل سي او اجرائية ثم تم تطوير لغات برمجة هيكلية مثل سي++ ثم تم انشاء لغات برمجة بدون اكواد
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
بالنسبه الي لغات البرمجه في الوقت الحالي هي لغات عاليه المستوي صنعت بلغه السي ولغه السي هيا عاليه المستوي وصنعت بلغه الاسمبلي ولغه الاسمبلي صنعت بلغه الاله وهي الصفر و الواحدـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
وكل هذه الاجبات تلخص هذا الشرح :
هناك العديد من المناهج في تصميم لغات البرمجة، و التي تختلف فيما بينها حسب الهدف النهائي الذي يضعه مصمموا تلك اللغة, فهناك منهجية "التطوير " و التي يتم فيها أخذ لغة موجودة فعلياً و إضافة بعض الإمكانيات الجديدة لها ثم صنع لغة جديدة، و ذلك للحفاظ علي قدرة المُفسِّر interpreter و/أو المترجِم compiler الخاص بتلك اللغة الجديدة علي تنفيذ البرامج المكتوبة باللغة القديمة ، و هذا له من الفوائد الكثير جداً و منها أنه يحافظ علي كل البرمجيات المكتوبة باللغة القديمة و لا يجبر أصحابها علي إعادة كتابتها بلغة حديثة، و غير ذلك من المميزات, و لكنه أيضاً له من العيوب أنه يفرض علي مصمم اللغة خطوطاً حمراء بالغة القوة لا يجوز له تجاوزها بحال من الأحوال، و أي خرق فيهن سيعرضه لهدم التوافقية العكسية التي يسعي وراءها والتوفيقية العكسية كما ذكرنا هي عباره عن الحتفاظ ب المترجم الخاص باللغة الام ومثال هذالغة الـ++C التي تُعتبر تطويراً للغة الـC بحيث يتم إضافة نمط البرمجة الكائنية إليها زيادة علي النمط الإجرائي procedural الذي تعتمد عليه تلك الأخيرة، حتي أن اسم الـ++C في البداية كان "C with classes" ، و كذلك هناك لغة الـobjective C و التي تُعتبر أيضاً تطويراً كائنياً للغة الـCو التي قال مبتكرها Brad Cox
واصفاً إياها:
"a hybrid language that contains all of C language plus major parts of Smalltalk"و هو ما معناه: "لغة هجينة تحوي كل لغة الـC بالإضافة إلي الأجزاء الرئيسة من Smalltalk.
و هناك أيضاً حالة لغة الـTypeScript الخاصة بـMicrosoft و التي قاموا فيها بإضافة قواعد البرمجة الكائنية OOP المعتمدة علي الأصناف classes إلي لغة الـjavascript، مع جعلها تدعم نظام التنويع الثابت static type system مع النظام المتغيرdynamic typing الذي تدعمه الـjavascript.
و ذلك لجعل الأخيرة أكثر قدرة علي التعامل مع المشاريع البرمجية الضخمة التي يعاني أصحابها من قصور الـjavascript عند استخدامهم إياها فيها.
و بالطبع هناك لغة الـobject pascal التي هي تطويرٌ للغة الـpascal.
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
و بالإضافة لمنهجية التطوير فهناك منهجية "الاجتزاء subset" التي يتم فيها أخذ قواعد لغة برمجة مشهورة ثم حذف بعضها و/أو تغييره بما يتوافق مع أهداف المصممين، مثل لغة Rpython التي هي اجتزاء للغة الـpython في مشروع الـpypy، و التي تم فيها مثلاً التخلص من بعض القواعد المتعلقة بالقدرة علي تغيير أنواع المتغيرات في زمن التنفيذ runtime في لغة الـpython؛ حيث أنهم احتاجوا إلي أن يكون بإمكانهم تحويل أكواد مكتوبة بلغة python إلي لغة الـC، و لكنهم وجدوا أن هناك تلك المواصفات (و غيرها) لا يمكن فعل ذلك معها ، و لن يكون الناتج النهائي مرضياً بحالٍ من الأحوال، أي سيكون الأمر باختصار موتاً و خراب ديار ، و لذلك قرروا منعها و عمل مترجم لا يعترف بها، و بما أن مجموعة المواصفات الجديدة أصبحت نسخة مصغرة من مجموعة المواصفات الخاصة بلغة الـpython فقد أطلقوا عليها Restricted Python أي "بايثون المُقيَّدة"
و هناك كذلك لغة ASM.js التي استوحتها mozilla من لغة javascript، و لكن هذه المرة كان الحال علي العكس من حالة الـTypescript؛ لأنه في الـASM.js تم التخلص من بعض القواعد عالية المستوي في الـjavascript و الاحتفاظ ببقية القواعد التي تجعل عمل البرمجيات المكتوبة بها أكثر سرعة، خاصةً حينما يتم تحسين المتصفحات لتسريع تلك العمليات بالذات. و الهدف النهائي من وراء هذا هو أن تعمل كأنها web assembly، فيتم ترجمة البرامج الأصلية native من أكواد C و/أو ++C إلي ASM.js لتعمل بسرعة قريبة جداً من سرعة البرنامج الأصلي لكن داخل بيئة المتصفح .
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
و في النهاية هناك منهجية أخذ مميزات العديد من اللغات الأخريات و محاولة المزج بينهن قدر الإمكان، مع عدم الالتزام بالتوافقية العكسية مع البرامج المكتوبة بأي لغة قديمة .
1. بناء مفسر و/أو مترجم يقوم بتنفيذ البرامج المكتوبة بتلك اللغة:
و هذا الأمر ينطوي علي الكثير جداً من الأعمال، منها بناء ما يسمي بالـlexer و الـparser و التمثيل الوسيط intermediate representation و الواجهات الخلفية backends، و غيرهن من التفاصيل الداخلية الخاصة بمثل هذه البرمجيات المعقدة. و خطوة بناء المفسر و/أو المترجم هي التي تجعل اللغة تتحول من مجرد تخطيط نظري إلي واقع ملموس يمكن التعامل معه و تجريبه و إعطاء الانطباعات العملية عنه. بينما لو ظلت اللغة مجرد تصميم نظري فربما يكون فيها من العلل التصميمية ما لا يمكن اكتشافه؛ للحاجة إلي وضعه علي المحك و الحكم عليه واقعياً.
2 .بناء الأدوات المساعدة للمبرمجين في تسهيل البرمجة بتلك اللغة:
و هذه خطوة إضافية لا يعني عدم القيام بها عدم وجود اللغة، لكن وجود اللغة ساعتها يظل قاصراً للغاية، و يكون استخدامها في غاية الصعوبة بالنسبة للجميع، و خاصةً بالنسبة لمن يريدون استخدامها في أمور معقدة مثل بناء الواجهات الرسومية الاحترافية و الارتباط بقواعد البيانات العملاقة، و غيرهن من الأمور الاحترافية ومثال ذالك برنامج الفاجوال استديو ,وبعض المكتبات الاخري .
و الأدوات المساعدة منها محرر أكواد text editor له فهم كبير بقواعد اللغة و يمكنه مساعدة المبرمج في التعامل مع الأكواد المكتوبة باللغة بسهولة و يسر، فييسر له عملية البحث عن نصوص معينة، أو تغيير المُعرِّفات identifiers الخاصة بالمتغيرات variables و الدوال و الإجراءات functions and procedures و الأصناف classes و ما شابههن من المكونات بمنتهي اليسر، و هو الأمر الذي تظهر أهميته الشديدة ف حالة المشاريع ذات أعداد الأسطر البرمجية الضخمة. و كذلك من أفضل الطرق التي يساعد بها محرر النصوص المبرمج هو تلوين الأكواد بشكل يجعل الأخير يحتاج لوقت أبسط بكثير لاستخلاص المعلومات التي تهمه من وسط عشرات الأسطر التي تقع عينه عليها. و هناك المُنقح debugger الذي يساعد المبرمج علي العثور علي العلل bugs في الأكواد التي بها خلل في خوارزماتها، و غيرهن من الأدوات الأخريات اللاتي يزدن إنتاجية المبرمج.
3. تحسين تصميم لغة البرمجة:
حيث مع مررو الوقت يتم اكتشاف بعض التسهيلات الجديدة التي يمكن إضافتها لقواعد اللغة لتجعل مهمة المبرمجين بها سهلة و تزيد من إنتاجيتهم، أو يتم اكتشاف مشكلة في تصميم أحد قواعدها الموجودة فعلاً و بالتالي تكون الحاجة ماسة لإصدار نسخة جديدة من اللغة لتصير فيها أفضل تصميمياً.
وفي النهاية اود ان تكون عزيزي القارئ قد فهمت الامر حيث انة يمكنك انشاء لغة ولاكن هذا يتطلب جهد كثير ويمكنك انشائها بثلاث طرقبر
- التعديل علي لغة اخري .
- اخذ بعض قواعد لغة وحذف يعض قواعدها حسب ما يتماشي مع هدفك .
- انشاء لغة جديده من الصفر عن طرية انشاء مترجم .

تعليقات: 0
إرسال تعليق