سؤال

ولقد مضى وقت طويل C # و. NET المطور، وقد لعب مع فكرة التعلم ج ++.

واحدة من الأسباب الرئيسية لقد تم التفكير في هذا، هي الطريقة أسرع بكثير C ++ يمكن أن يكون أكثر من التطبيقات باستخدام .NET Framework. ولكن هل أنا على حق في افتراض أنه إذا أنا أكتب C ++ التطبيق في Visual Studio، و / أو إشارة المكتبات صافي في تطبيق C ++ ذلك، أن يتم تحويل C ++ في MSIL (تماما مثل C #) - ولذلك فما استقاموا لكم فاستقيموا تفقد أي فائدة من الترميز في ذلك؟

ولذا سؤالي هو في الحقيقة هذه: هل مكونات C ++ من تطبيق الرجوع المجالس. صافي جمعت في الطريقة "التقليدية"، أو comiled إلى MSIL

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

المحلول

وحسنا انها قليلا أكثر تعقيدا من ذلك. هناك فعلا نسختين مختلفتين تماما من الدعم. NET C ++.

وواحدة من العمر، ملحقات مدارة لC ++، كان الخيار الوحيد المتاح في Visual C ++ 2002/2003. كان متوفرا في المجمعين أحدث تحت خيار / مسح: oldSyntax. انها الخرقاء كيندا كما يحاول جاهدا للتكامل مع معيار C ++، لذلك كل كلمات رئيسية جديدة (وهناك الكثير منهم) تكون مسبوقة مع سفلية مزدوجة، الخ الشفرة التي تم إنشاؤها من قبل هذا المترجم هو خليط من التعليمات البرمجية الأصلية وMSIL، يطلق عليها اسم IJW "أنه يعمل فقط ".

وواحدة جديدة، تسمى C ++ / CLI، هي لغة جديدة نظيفة المتاحة في Visual C ++ 2005 والأحدث. الأهم من ذلك، أنه يدعم عدة طرق لتوليد التعليمات البرمجية. الخيار / مسح يولد من جديد خليط IJW من التعليمات البرمجية الأصلية وMSIL. / مسح: نتائج نقية في تمكن فقط التجمع، على الرغم من أنها قد تترجم أنواع الأم في الهياكل صافي المقابلة. رمز بالتالي قد لا تكون من نوع آمنة ويمكن استخدام مؤشر الحساب، الى حد كبير مثل C # مع / غير آمنة. وتشددا من الخيارات هو / مسح: آمنة، التي تنتج نوع آمنة، وقابلة للتحقق MSIL فقط التجميع، تماما مثل C # المترجم يفعل (بدون / غير آمنة، وهذا هو)

لالخلافات بين MC ++ و C ++ / CLI، انظر ويكيبيديا .

لوصف من مفاتيح مترجم، انظر MSDN .

وPS. ودعا الصافي بايت رمز إما MSIL (مايكروسوفت المتوسطة اللغة) أو CIL (اللغة الوسيطة المشتركة). MIL يمكن أن يقف لطبقة وسائل الإعلام التكامل، ومكتبة على مستوى منخفض غير الموثقة التي يستخدمها مدير برنامج الأغذية العالمي ونافذة سطح المكتب ويندوز فيستا.

نصائح أخرى

وانها ربما تكون فكرة جيدة للحفاظ على مفاهيم منفصلة.

أولا، C ++ هي لغة، وأنها لا تحدد أي شيء حول ما يجب منصة المستهدفة. من حيث المبدأ، يمكن تجميعها ++ كود التوالي C إلى المجمع الأصلي إلى x86، جافا بايت كود، MSIL أو أي شيء آخر يهمك أن نفكر في. أعتقد أدوبي التي تمت حديثا مترجم C ++ الذي يولد فلاش بايت كود.

والثانية، مع تردد نموذجي، قامت Microsoft بإنشاء اثنين C ++ - اللغات المشتقة التي تستهدف .NET. أولا، جعلوا "ملحقات المدارة لC ++". ثم قرروا أنه امتص، تخلى عنه وحاول أن يدعي أنه لم تكن موجودة.

والآن أفضل رهان من أجل الطراز. NET C ++ يسمى C ++ / CLI، ولكن ليس من C ++ . فهي تمتد وتغيير اللغة في عدد من الطرق غير قياسي. (وأعتقد طلبت اللجنة القياسية C ++ أن يغيروا اسم لتفادي الخلط. لكنهم لم)

والبصرية ستوديو 2005 وأحدث يدعم C ++ / CLI. (في "إضافة مشروع"، وانهم المدرجة ضمن Visual C ++ -> CLR)

ولكن (التي لم أكن أعتقد أنه كان بهذه البساطة، هل؟)، مايكروسوفت قد فعلت ذلك مرة أخرى. بعد تحديد C ++ / CLI، الذي هو في الواقع محاولة معقولة مصممة تصميما جيدا في دمج C ++ مع CLI، أدركوا أن الواقع لم يكن احد يستخدمه! تبين أن المبرمجين حتى C ++ عموما يفضلون استخدام C # عندما نعمل في .NET، والسليم، وأصلي C ++ خلاف ذلك.

وحتى الآن، انهم يركزون على جعل إمكانية التشغيل المتداخل بين مواطن C ++ و. NET أبسط وأكثر قوة. ومع ذلك، C ++ / CLI ليس من المحتمل أن يذهب بعيدا. كان يعمل، وفي بعض الحالات أن يكون مفيدا. انها مجرد يست C ++ - القاتل أنهم يأملون في الأصل ل

ول Visual Studio (منذ الأبد) كما يدعم التطبيقات الوطنية C ++، وقد تم تجميعها إلى رمز الجهاز إلى x86، غير ملوث من قبل .NET. يتم سرد هذه في مربع الحوار "إضافة مشروع" ضمن Visual C ++ -> Win32 و

وحتى إذا كنت تريد أن تتعلم C ++، لديك خياران: تعلم C ++ / CLI، الأمر الذي يحد لك إلى لغة MS-الوحيدة التي نعم، يولد MSIL بدلا من رمز الجهاز الأصلي، ويتطلب .NET لتشغيل، وعموما لا يستحق عناء لأنه إذا كنت تريد الذهاب لإلقاء التبعية في. NET <م> على أي حال ، لماذا لا تكتب في C #؟

وأو معرفة الصحيح C ++، وهي منفصلة تماما عن NET و لا يمكن الرجوع مباشرة المجالس .NET.

والنقطة الوجبات الجاهزة رئيسية هي انهم غات مستقلة. إما أن تجميع كما C ++ / CLI، مما يعني أن المترجم تسمح لك مرجع المجالس NET، وسوف إنشاء رمز MSIL، أو يمكنك ترجمة كما C ++، وفي هذه الحالة لا وجود لها في العالم .NET.

وأخيرا، مذكرة من الحذر. وعلى الرغم من الصياغة بلدي أعلاه ( "الصحيح C ++" و "غير ملوث من قبل. NET")، C ++ ليست "أفضل". في كثير من الحالات، فإنه ليس أسرع أيضا. C ++ لديه <م> إمكانات أن تكون أسرع، ولكن ذلك يعتمد الكثير أكثر على مبرمج.

ووC # مترجم سيتحول الى حد كبير أي شيء إلى رمز فعالة بشكل معقول. C ++ من ناحية أخرى، هو الكامل من المزالق التي ستجعل التعليمات البرمجية <م> أبطأ من المكافئ C #.

http://blogs.msdn.com/ricom/ أرشيف / 2005 / 10/05 / 416151.aspx وبلوق وظائف من مراجع تستحق القراءة لأي شخص غريبة عن أداء رمز مشابهة كتب في اللغتين.

وهناك واحد فقط المنطقة التي ستكون التطبيقات C ++ باستمرار بشكل أسرع، وهذا في وقت بدء التشغيل. قد يكون تطبيق .NET لتحميل برنامج .NET Framework و JIT رمز MSIL، حيث التطبيق الأصلي ... يبدأ فقط.

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

هذا هو جيد جدا (إذا المؤرخة) مناقشة تمكنت مقابل غير المدارة C ++.

في قذيفة الجوز، C ++ يمكن إما إدارتها (المترجمة إلى MIL) أو غير المدارة (ترجمة التعليمات البرمجية الأصلية).

وبغض النظر عن الأسباب التي دفعتك لأنه يريد أن تعلم C ++ هو دائما جيدة لمعرفة المزيد من اللغات لأنه يوسع عقلك حتى تعلم C ++ هو درسا قيما في حد ذاته.

ومع C ++ يمكنك إما تشغيله كتطبيق. NET C ++ / CLI أو الأم. انها مجرد التبديل مترجم في Visual Studio ولكن هناك الكثير من الاختلافات في بناء الجملة بين البلدين. وأنا شخصيا أعتقد التعلم على حد سواء النكهات مفيد.

والذي يختار في المشاريع الخاصة بك يعتمد قليلا على متطلبات مثل إذا كان يحتاج برنامج للتفاعل وحدات تمكنت وحدات أخرى مثل مكتوب في C # يفضل استخدام C ++ / CLI لتجنب بعض التحول في سماء المنطقة بين التعليمات البرمجية المدارة وغير المدارة.

ومكونات C ++ لا يمكن بسهولة مرجع المجالس صافي (تحتاج إلى استخدام COM). يتم تصنيف تمكن C ++ إلى CIL ولها نفس التشكيل الجانبي الأداء إلى C #.

وC ++ أسرع حوالي 10٪ لنفس المستوى من optomization بالنسبة لمعظم كود لكن C # يأخذ نصف الوقت لكتابة وتصحيح ذلك لنفس المقدار من الوقت وأنا أزعم أن optomizations يمكنك وضعها في المكان من شأنها أن تجعل C # أسرع. ..

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