سؤال

أدرك أن IronPython هو تطبيق لـ Python على النظام الأساسي .NET تمامًا مثل IronRuby هو تطبيق لـ Ruby وF# هو OCaml تقريبًا.

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

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

المحلول

تم إنشاء IronPython وIronRuby على رأس DLR - وقت تشغيل اللغة الديناميكي - ويتم تجميعهما إلى CIL (الرمز الثانوي الذي يستخدمه .NET) بسرعة.إنها أبطأ من C# ولكنها أسرع بكثير من نظيراتها غير التابعة لـ .NET.لا توجد أي معايير لائقة هناك، على حد علمي، ولكنك سترى الفرق.

نصائح أخرى

يعد IronPython في الواقع أسرع تطبيق لـ Python على الإطلاق.للحصول على بعض تعريفات "الأسرع"، على الأقل:على سبيل المثال، تبلغ تكلفة بدء التشغيل لـ CLR ضخم مقارنة بـ CPython.أيضًا، فإن المترجم الأمثل IronPython يكون منطقيًا فقط عندما يتم تنفيذ التعليمات البرمجية عدة مرات.

لدى IronRuby القدرة على أن تكون بنفس سرعة IronPython، نظرًا لأن العديد من الميزات المثيرة للاهتمام التي تجعل IronPython سريعًا، تم استخراجها في Dynamic Language Runtime، حيث يمكن لكل من IronPython وIronRuby (و Managed JavaScript وDynamics VB وIronScheme وVistaSmalltalk وغيرها) يتم بناؤها.

بشكل عام، سرعة تنفيذ اللغة مستقلة إلى حد كبير عن ميزات اللغة الفعلية، وتعتمد بشكل أكبر على عدد سنوات العمل الهندسي التي تستغرقها.آيو:ديناميكية مقابل.الساكنة لا يهم، المال هو المهم.

على سبيل المثال، Common Lisp هي لغة أكثر ديناميكية من Ruby أو Python، ومع ذلك يوجد مترجمون لـ Common Lisp يمكنهم حتى منح C فرصة للحصول على أموالها.تعمل تطبيقات Smalltalk الجيدة بنفس سرعة Java (وهذا ليس مفاجئًا، نظرًا لأن كلاً من JVMs الرئيسية، Sun HotSpot وIBM J9، هي في الواقع مجرد أجهزة Smalltalk VM معدلة قليلاً) أو C++.في الأشهر الستة الماضية فقط، نجحت تطبيقات JavaScript الرئيسية (Mozilla TraceMonkey وApple SquirrelFish Extreme والطفل الجديد في المجموعة، Google V8) في إنشاء عملاق تحسينات في الأداء، 10x وأكثر، لجعل JavaScript وجهاً لوجه مع لغة C.

حاليا IronRuby بطيء جدًا في معظم التحيات.إنه بالتأكيد أبطأ من التصوير بالرنين المغناطيسي (تنفيذ ماتز روبي) بشكل عام، على الرغم من أنه أسرع في بعض الأماكن.

لدى IronRuby القدرة على أن تكون أسرع بكثير، على الرغم من أنني أشك في أنها ستقترب من C# من حيث السرعة.في معظم الحالات لا يهم.من المحتمل أن يشكل استدعاء قاعدة البيانات 90% من المدة الإجمالية لطلب الويب، على سبيل المثال.

أظن أن الفريق سيتجه نحو اكتمال اللغة بدلاً من الأداء أولاً.سيسمح لك هذا بتشغيل IronRuby وتشغيل معظم برامج Ruby عند إصدار 1.0، ومن ثم يمكنهم تحسين الأداء مع تقدمهم.

أظن أن لدى IronPython قصة مماثلة.

لقد حصلت على الفكرة الصحيحة بافتراض أن أداء تطبيق .NET الحديث سيكون بين أداء السلف وC#.والسبب هو أن C# متطابق بشكل وثيق مع .NET نفسه.

F# أمر بديهي لأن C# وOCaml لهما خصائص أداء متشابهة.

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

هتاف ، جون هاروب.

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