ابدأ بالتواصل مع الأشخاص وتبادل معارفك المهنية

أنشئ حسابًا أو سجّل الدخول للانضمام إلى مجتمعك المهني.

متابعة

س7/ كيف يتم صناعة لغات البرمجة ؟

user-image
تم إضافة السؤال من قبل Abdou-Rabih Tahtah , programmeur informatique,Web designer,Web développeur , freelance
تاريخ النشر: 2016/11/25
alaa liswe
من قبل alaa liswe , ِAdministrative Assistant , Arab Open University

  • تصميم لغة البرمجة و وضع قواعدها القياسية:

و هناك العديد من المناهج في تصميم لغات البرمجة، و التي تختلف فيما بينها حسب الهدف النهائي الذي يضعه مصمم/وا تلك اللغة؛ فهناك منهجية "التطوير superset" (و تعريب هذا المصطلح من عندي) و التي يتم فيها أخذ لغة موجودة فعلياً و إضافة بعض الإمكانيات الجديدة لها ثم صنع لغة جديدة، و ذلك للحفاظ علي قدرة المُفسِّر interpreter و/أو المترجِم compiler الخاص بتلك اللغة الجديدة علي تنفيذ البرامج المكتوبة باللغة القديمة (حالة من التوافقية العكسية backword compatibility)، و هذا له من الفوائد الكثير جداً و منها أنه يحافظ علي كل البرمجيات المكتوبة باللغة القديمة و لا يجبر أصحابها علي إعادة كتابتها بلغة حديثة، و غير ذلك من المميزات. و لكنه أيضاً له من العيوب ما يجعلني أنفر منه بشدة؛ لأنه يفرض علي مصمم اللغة خطوطاً حمراء بالغة القوة لا يجوز له تجاوزها بحال من الأحوال، و أي خرق فيهن سيعرضه لهدم التوافقية العكسية التي يسعي وراءها و لو في حالات قليلة !

مثل حالة لغة الـ++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 عند استخدامهم إياها فيها (علي الأقل هذه وجهة نظر مهندسي Microsoft).

و بالطبع هناك لغة الـobject pascal التي هي تطويرٌ للغة الـpascal... إلخ.

و بالإضافة لمنهجية التطوير فهناك منهجية "الاجتزاء subset" (و هو تعريبٌ آخر من عندي) التي يتم فيها أخذ قواعد لغة برمجة مشهورة ثم حذف بعضها و/أو تغييره بما يتوافق مع أهداف المصمم/ين، مثل لغة Rpython التي هي اجتزاء للغة الـpython في مشروع الـpypy، و التي تم فيها مثلاً التخلص من بعض القواعد المتعلقة بالقدرة علي تغيير أنواع المتغيرات في زمن التنفيذ runtime في لغة الـpython؛ حيث أنهم احتاجوا إلي أن يكون بإمكانهم تحويل أكواد مكتوبة بلغة python إلي لغة الـC، و لكنهم وجدوا أن هناك تلك المواصفات (و غيرها) لا يمكن فعل ذلك معها (و أنا أظن أنه إن تم فسيكون علي حساب الكثير جداً من الوقت و الجهد، و سيحتاج إلي حيل سحرية و أكواد أفعوانية، و لن يكون الناتج النهائي مرضياً بحالٍ من الأحوال، أي سيكون الأمر باختصار موتاً و خراب ديار !)، و لذلك قرروا منعها و عمل مترجم لا يعترف بها، و بما أن مجموعة المواصفات الجديدة أصبحت نسخة مصغرة من مجموعة المواصفات الخاصة بلغة الـpython فقد أطلقوا عليها Restricted Python أي "بايثون المُقيَّدة"، و في موقعهم هناك توضيحات لمثل هذه التقييدات لمن يرغب في الاطلاع عليها http://doc.pypy.org/en/latest/coding-guide.html#id1.

و هناك كذلك لغة ASM.js التي استوحتها mozilla من لغة javascript، و لكن هذه المرة كان الحال علي العكس من حالة الـTypescript؛ لأنه في الـASM.js تم التخلص من بعض القواعد عالية المستوي في الـjavascript و الاحتفاظ ببقية القواعد التي تجعل عمل البرمجيات المكتوبة بها أكثر سرعة، خاصةً حينما يتم تحسين المتصفحات لتسريع تلك العمليات بالذات. و الهدف النهائي من وراء هذا هو أن تعمل كأنها web assembly، فيتم ترجمة البرامج الأصلية native من أكواد C و/أو ++C إلي ASM.js لتعمل بسرعة قريبة جداً من سرعة البرنامج الأصلي لكن داخل بيئة المتصفح !

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

  • بناء مفسر و/أو مترجم يقوم بتنفيذ البرامج المكتوبة بتلك اللغة:

و هذا الأمر ينطوي علي الكثير جداً من الأعمال، منها بناء ما يسمي بالـlexer و الـparser و التمثيل الوسيط intermediate representation و الواجهات الخلفية backends، و غيرهن من التفاصيل الداخلية الخاصة بمثل هذه البرمجيات المعقدة. و خطوة بناء المفسر و/أو المترجم هي التي تجعل اللغة تتحول من مجرد تخطيط نظري إلي واقع ملموس يمكن التعامل معه و تجريبه و إعطاء الانطباعات العملية عنه. بينما لو ظلت اللغة مجرد تصميم نظري فربما يكون فيها من العلل التصميمية ما لا يمكن اكتشافه؛ للحاجة إلي وضعه علي المحك و الحكم عليه واقعياً.

mukhtar ahmed
من قبل mukhtar ahmed , web and mobile developer , self employed

على حسب كل لغه تم انشئها بطريقة مختلفه , يوجد تصنيف رئيسيان لغات البرمجة هل تستخدم compiler ام interpreter و يوجد اختلاف في اللغه المستخدمه في إنشاءها فا مثلا ساتكلم في الشي الذي لدي معلومات عنه

الجافاسكربت تستخدم V8 engine  تم انشاءه من قبل قوقل و هذا يكون بمثابت compiler هو الذي يحول  الجافاسكربت الى لغه يفهمها الكمبيوتر و V8 تمت برمجته بلغه ال C++ و و يوجد ايضا compiler اخر من شركة فايرفوكس اسمه spidermonkey  و من الممكن ان يكونوا استخدموا لغه اخرا لانشاءه لكن ال v8 و spidermonkey  يستخدما قوانين موحده لانشاء ال compiler ماخوذه من ال ECMAScript 

لكن نظريا اي لغه برمجة يمكن إنشاءها  بأي لغه لانها تاخذ مدخلات و تعطي ناتج 

هاشم المشارقة
من قبل هاشم المشارقة , Key Account Manager , Advanced United Systems Ltd. ( A member of Taj Holding Group)

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

Adam Ahmed
من قبل Adam Ahmed , IT & Web Developer , Freelance

بسم الله الرحمن الرحيم

 

لغة البرمجة تبدا بإنشاء المترجم (بالإنجليزية كمبيلر ) هذا الكمبيلر يقوم بترجمة اللغة الى لغة الآلة أو ما قبلها والتي تسمى الأسمبلي

osama faitor
من قبل osama faitor , مدير فرع , المصرف الزراعي

تحتاج لخبير في عالم البرمجيات 

حسب معرفتي تستخدم لغة برمجية لتلبية طلبات العميل و المستخدم 

شكرا للدعوة

المزيد من الأسئلة المماثلة