سؤال

وأنا ألعب مع DLR للحصول على فهم أفضل منه. أنا لست على دراية تماما ولكن مع كل مفاهيمه ومصطلحاته آسف جدا لأي أخطاء المصطلحات أو المفاهيم في سؤالي.

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

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

هل هذا حقا كيف أنه من المفترض أن يعمل (مع كل الملاكمة / علبته) أو أنا في عداد المفقودين شيء؟

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

المحلول

في لغة كتابتها بشكل حيوي، وتحديد وتعظيم الاستفادة من متغير كتبته بشكل ثابت هو الأمثل مجال معين. ضمن تنفيذ معين دينامية اللغة X، ويمكن أن تبقي متغير محلي بدون علبة في الشفرة التي تم إنشاؤها، ولكن بمجرد فضح API كتبته بشكل حيوي، وليس هناك طريقة لضمان الكتابة ثابتة (طبيعة اللغات الديناميكية).

لتجنب الملاكمة، سيكون لديك لتحديد قطعة من التعليمات البرمجية التي يمكنك إثبات أنواع ثابتة في جميع أنحاء، وإنشاء التعليمات البرمجية خصيصا لهم سواء من خلال Linq.Expressions أو ILGenerator.

نصائح أخرى

وبقدر ما يذهب في المجلدات يمكنك أيضا تنفيذ الموثق المخصصة. يمكن أن الموثق مخصصة إما بإرجاع نوع غير كائن أو يمكن القيام به تحسينات أخرى محددة. في و IronPython نحن UES على DLR الخارجي ComboBinder طبقة وComboActionRewriter لتحسين الشرطية. على سبيل المثال "إذا a.b:" يمكن أن تتحول إلى ComboBinder التي لا حد سواء a.b والتحويل إلى منطقي. إذا كانت النتائج a.b في منطقي غير محاصر سنقوم تجنب الملاكمة وعلبته. نحن نخطط لاجراء تجارب على المزيد من التحسينات مثل هذا.

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