سؤال

أنا النامية مترجم من لغة برمجة بسيطة.

  1. هناك شجرة-هيكلة البيانات الديناميكية, حيث كل البيانات العقد مقترن (المملوكة) نوع الكائن.
  2. هناك عدة أنواع من أنواع ListType, StructType.... الخ- و خاصة - TypeRef.على TypeRef يحمل اسم (سلسلة) الذي يشير إلى بعض نوع ملموس.
  3. هناك (تقريبا) الخريطة العالمية (القاموس) - نسميها البيئة - (std::map<string, Type*>) أن يترجم نوع الأسماء إلى نوع الكائنات.

المشكلة هي أنه قد تكون هناك العديد من برامج تحميل و كل واحد منهم قد الأنواع المختلفة المرتبطة مع نفس الأسماء.هذا الافتراض يجعل من المستحيل أن يكون عالمي واحد (ثابت) البيئة التي يمكن أن يكون الحل الأمثل.

ولذلك يبدو أنني بحاجة إما (#1) مؤشر إلى بيئة في كل نوع الكائن أو (#2) لأداء كل عملية في سياق البيئة (على سبيل المثالمن خلال توفير كل مكان كما الوسيطة الأولى).

مشاكل أرى:
(#1) المعلومات التكرار ، لأن كل اتصال بيانات العقد سيكون لها نفس البيئة.البيئات ستكون مختلفة عن دقة بيانات منفصلة.
(#2) الكثير من تافهة عابرة البيئة subroutines, التشويش التعليمات البرمجية.

يبدو لي أن هذه المشكلة يطابق نمط عام أسميه ما يقرب من بيانات ثابتة.أي أفكار أو ما يمكن أن يكون أفضل حل ؟

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

المحلول 3

فكرة استخدام الخيط-التخزين المحلي المثير للاهتمام, ولكن لدي أخيرا في نهاية المطاف مع حل آخر:

يمكنني استخدام أنواع مرحلتين:الأولى هم كل خلق ثم يتم "تجميع".تجميع يتطلب بيئة ، ولكن تتم مرة واحدة فقط.انها تتكون في ترجمة كل نوع-أسماء إلى النوع المناسب الكائنات.بعد تجميع البيئة لم تعد هناك حاجة.

ومع ذلك, أعتقد أنه لا يزال أكثر الحل من الحل العام.

نصائح أخرى

ما يفصل بين والبيئات ؟ إذا كان هذا هو سياق التنفيذ (الكائنات في سياق فقط اتصل منها في نفس السياق) ، ثم يمكن استخدام مؤشر واحد في بيئة تخزين "المحلية-جلوبل" في موضوع التخزين المحلي (أو مجرد خريطة عالمية مع مفاتيح موضوع IDs).

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

قد تريد أن يكون اثنين من نوع المخازن العالمية للخرسانة أنواع محلية واحدة على TypeRefs.التخزين المحلي يجب أن توضع في سياق برنامج يجري حاليا تحليل.

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