أنشئ حسابًا أو سجّل الدخول للانضمام إلى مجتمعك المهني.
و هناك العديد من المناهج في تصميم لغات البرمجة، و التي تختلف فيما بينها حسب الهدف النهائي الذي يضعه مصمم/وا تلك اللغة؛ فهناك منهجية "التطوير 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، و غيرهن من التفاصيل الداخلية الخاصة بمثل هذه البرمجيات المعقدة. و خطوة بناء المفسر و/أو المترجم هي التي تجعل اللغة تتحول من مجرد تخطيط نظري إلي واقع ملموس يمكن التعامل معه و تجريبه و إعطاء الانطباعات العملية عنه. بينما لو ظلت اللغة مجرد تصميم نظري فربما يكون فيها من العلل التصميمية ما لا يمكن اكتشافه؛ للحاجة إلي وضعه علي المحك و الحكم عليه واقعياً.
ليس لدي صورة كاملة عن الموضوع لكن ما أعرفه أن ذلك ليس سهلا بتاتاً و معقد كثيراً لأن املا يبدأ بإنشاء مترجم Compiler يقوم بالترجمة بين لغة التي تم تصميمها و لغة منخفضة المستوى كلغة التجميع Assembly.
بسم الله الرحمن الرحيم
لغة البرمجة تبدا بإنشاء المترجم (بالإنجليزية كمبيلر ) هذا الكمبيلر يقوم بترجمة اللغة الى لغة الآلة أو ما قبلها والتي تسمى الأسمبلي
تحتاج لخبير في عالم البرمجيات
حسب معرفتي تستخدم لغة برمجية لتلبية طلبات العميل و المستخدم
شكرا للدعوة