سؤال

ما الذي تسميه لغة برمجة يمكنها تنفيذ التعليمات البرمجية الخاصة بها (تم تمريرها كسلسلة حرفية)؟ الإعداد في ذهني هو شيء مشابه لهذا (نسيت لحظة كتابة التعليمات البرمجية ، والنتائج ، إلخ):

string eight = "5+3"
int result = run(eight)

أين run هي الكلمة الرئيسية. هل هذه لغة برمجة عاكسة؟

هل كانت مفيدة؟

المحلول

أعتقد أنك تتحدث عنها المقيمون النيجاريين. لك run الأمر هو تقييم في ال دورة التثبيت, ، الموصوفة في بنية وتنفيذ برامج الكمبيوتر.

نصائح أخرى

أفضل ما يمكنك التوصل إليه هو بالضبط ما تطلبه هو "لديه وظيفة eval" (كما ذكر Javier في تعليقه على سؤالك).

الاستضافة الذاتية ليست ضرورية ولا تفعل بالضرورة ما تريد. مثالان هما: C هي لغة مستضافة ذاتيًا لا يمكنها تنفيذ التعليمات البرمجية الخاصة بها في سلسلة ولكن TCL ليست لغة مستضافة ذاتيًا يمكنها تنفيذ التعليمات البرمجية الخاصة بها في سلسلة.

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

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

الشيء نفسه مع الانعكاس/التأمل ، فإن وجود القدرة على القيام بالتأثير بنفسك لا يعني أنه يمكنك تنفيذ التعليمات البرمجية في سلسلة. مثالان على اللغات التي لها انعكاس ولكن ليس لديها تقييم مدمج هما C# و Java.

  • كملاحظة جانبية ، بمجرد حصولك على وظيفة eval ، يمكنك عادة القيام بالتفكير/التأمل وإن كان ذلك بطريقة خرقاء.

التفسير الذاتي لديه نفس المشكلة مع تعريفها كإجراء استضافة الذات. TCL هي لغة لا يتم فيها كتابة وظيفة EVER في حد ذاتها - فهي تعرض فقط تقييم رمز TCL الذي تم تنفيذه في C.

للوهلة الأولى ، يشبه المقيّمون النسيجون الفوقية ما تريد. يتم تعريفه على أنه تفسير ذاتي حيث تم تصميم وظيفة eval بدلاً من تنفيذه باللغة نفسها. ولكن تبحث أكثر ، ستلاحظ أنه يتم تعريفها من خلال الآلية المستخدمة لتحقيق الميزة بدلاً من الميزة نفسها. يعد TCL مرة أخرى استثناءً من حيث لا يفي بجميع تعريفات المقيمين النسيجيين الفوقية ولكن لديها وظيفة تقييم رغم ذلك (لا يتم تطبيقها ، وليس ضروريًا). لذلك ، يبدو لي مثل المقيِّم النسيج التعويضي هو تطبيق محدد لميزة "Haz A eval".

لذلك ، أود أن أقول ببساطة أن أي لغة "لديها وظيفة تقييم" يمكن أن تفعل ما تطلبه.

فئة اللغات التي تسأل عنها تعادل "استضافة الذات"اللغات. لغة الاستضافة الذاتية هي اللغة ، التي يوجد لها تنفيذ المترجم أو المترجم في نفس اللغة.

هذا دليل.

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

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

إليك ما سيبدو عليه هذا المترجم:

execute ARGV[0]

لذلك ، لقد أثبتنا أن كل لغة مع الممتلكات المطلوبة هي استضافة الذات ، وأن كل لغة استضافة الذات لديها هذه الخاصية. هذا يعني أن الفصل الذي طلبته يساوي فئة لغات الاستضافة الذاتية.

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

المثليين هو مفهوم ذي صلة ، لكنني لا أعتقد أنه بالضبط ما تبحث عنه أيضًا.

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

التفسير الذاتي والاستضافة الذاتية؟ يرى http://en.wikipedia.org/wiki/self-interpreter, http://en.wikipedia.org/wiki/self-hosting.

نعم ، اعتقدت دائمًا أن هذا كان يشمله انعكاس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top