سؤال

ممكن التكرارات:
كيف يمكن للغة المترجم أن يكتب في تلك اللغة ؟
تنفيذ مترجم في "نفسها"

كنت أبحث في Rubinius, روبي تنفيذ ذلك برمجيا إلى بايت كود باستخدام مترجم مكتوب في روبي.لا أستطيع أن أفهم هذا.كيف تكتب مترجم لغة في اللغة نفسها ؟ يبدو أنه سيكون النص فقط دون أي شيء إلى ترجمة ذلك إلى قابل للتنفيذ التي يمكن أن ثم ترجمة المستقبل رمز مكتوب في روبي.أنا الحصول على الخلط مجرد كتابة تلك الجملة.يمكن لأي شخص أن تساعد في تفسير هذا ؟

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

المحلول

تبسيط:عليك أولا كتابة المترجم المترجم في لغة مختلفة.ثم ترجمة المترجم ، وفويلا!

لذا تحتاج إلى نوع من اللغة التي لديها بالفعل مترجم - ولكن لأن هناك العديد من مثل هذه, يمكنك كتابة روبي مترجم مترجم (!) على سبيل المثالفي C ، والتي سوف ثم تجميع روبي مترجم ، والتي يمكن بعد ذلك تجميع روبي البرامج حتى آخر الإصدارات من نفسها.

بالطبع ، الأصلي المجمعين كانت مكتوبة في رمز الجهاز ، وقد تم تجميعها القائمون على الجمعية العامة التي جمعت القائمون على سبيل المثالC أو Fortran التي جمعت المجمعين على كل شيء تطوير متكررة في العمل.

وتسمى هذه العملية إلباس الحذاء - ربما سميت البارون Munchhausen قصة الذي سحب نفسه من مستنقع بلده حذائها :)

نصائح أخرى

فيما يتعلق بتمهيد المترجم ، فإنه يستحق القراءة عن هذا الاختراق الذكي الشيطاني.

http://catb.org/jargon/html/b/back-door.html

أنا الحصول على الخلط فقط قراءة هذه الجملة.

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

بالطبع كنت بحاجة إلى شيء لتشغيل Rubinius في المقام الأول, و هذا على الأرجح منتظم مترجم روبي.نلاحظ أن مرة واحدة كنت قادرا على تشغيل Rubinius على مترجم, يمكنك تمرير ذلك ، وأنه سيتم إنشاء وتشغيل النسخة المترجمة من نفسها.وهذا ما يسمى إلباس الحذاء من العبارة القديمة ، "سحب نفسك من حذائها".

ملاحظة أخيرة:روبي البرامج لا يمكن الاحتجاج التعسفي رمز الجهاز.هذا الجزء من Rubinius هو فعلا مكتوب في C++.

إضافة إلى أنه من الممكن القيام بذلك في الترتيب التالي:

  1. كتابة مترجم في أي لغة ، ويقول C الخاص بك روبي البرمجية.
  2. الآن يمكنك تجميع روبي البرمجية ، يمكنك كتابة المترجم أن يجمع روبي رمز تجميع هذه مترجم مع برنامج التحويل البرمجي C كتبته في الخطوة 1. wahh هذه الجملة هو غريب!
  3. من الآن فصاعدا يمكنك تجميع جميع روبي البرمجية مترجم مكتوب في 2.:)

وقد متعة!:)

المترجم هو مجرد شيء يحول رمز المصدر إلى قابلة للتنفيذ. لذلك لا يهم ما هو مكتوب فيه - يمكن أن يكون نفس اللغة التي يتم تجميعها أو أي لغة أخرى ذات قوة كافية.

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

انها 2 خطوة عملية:

  1. كتابة روبي مترجم في بعض lanaguage مثل C ، على افتراض روبي مترجم لا توجد حتى الآن
  2. منذ لديك الآن روبي مترجم, يمكنك كتابة روبي برنامج (جديد) روبي مترجم

منذ أحدهم بالفعل كتب روبي مترجم (ماتز) ، "فقط" يجب أن نفعل الجزء الثاني.وقال أسهل من القيام به.

أوضحت جميع الإجابات حتى الآن كيفية محاذاة المترجم باستخدام برنامج التحويل البرمجي مختلف. ومع ذلك ، هناك بديل: تجميع المترجم باليد. لا يوجد سبب يدعو إلى تنفيذ المترجم بواسطة آلة ، ويمكن تنفيذها من قبل الإنسان.

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