سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لقد عملت كمبرمج أصلي لـ C++ في السنوات القليلة الماضية.الآن نبدأ مشروعًا جديدًا من الصفر.إذن ما هي أفكارك حول التحول إلى C++\CLI على حساب فقدان التعليمات البرمجية المستقلة للنظام الأساسي.هل هناك أي مزايا خاصة يمكن للمرء الحصول عليها من خلال التحول إلى C++\CLI؟

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

المحلول

أوصي بما يلي، بناءً على تجربتي مع C++ وC# و.NET:

  • إذا كنت تريد اتباع طريقة .NET، فاستخدم C#.
  • إذا كنت لا تريد .NET، فاستخدم لغة C++ التقليدية.
  • إذا كان عليك ربط C++ التقليدي بكود .NET، فاستخدم C++/CLI.يعمل مع كل من فئات .NET التي تستدعي C++ وفئات .NET التي تستدعي C++.

لا أرى أي معنى في الذهاب إلى C++/CLI إذا لم تكن بحاجة إليه.

نصائح أخرى

بعض الأسئلة التي يجب مراعاتها قبل التبديل:

[1] هل أنت بخير مع الالتزام بنظام التشغيل Windows؟هناك نسخ .NET لأنظمة تشغيل أخرى، لكن تطبيقك لن يعمل بشفافية.تعقيد قد لا تحتاجه.

[2] هل تفكر في التبديل لدعم جمع البيانات المهملة فقط؟إذا كان الأمر كذلك، يمكنك فقط استخدام بعض مكتبات تجميع البيانات المهملة C++.وإذا اكتشفت كيفية الاستفادة من std::shared_ptr، فقد لا تشعر بالحاجة إلى جامعي البيانات المهملة.النفقات العامة التي قد لا تحتاج إليها.

[3] هل تفكر في استخدام C++/CLI بسبب مجموعة البيانات المهملة وجميع فئات .NET المفيدة التي يمكنك الاستفادة منها؟إذا كان الأمر كذلك، لماذا لا تنتقل إلى C# فقط.C++/CLI هي تقنية انتقالية، ومن الأفضل عدم استثمار الموارد في مثل هذه الأشياء.أصبحت لغة #c ناضجة جدًا وقابلة للاستخدام.

أنا شخصياً سألتزم فقط بـ C++ ؛).

هل هناك أي فائدة لك؟من المحتمل أن تفقد القدرة على التبديل إلى نظام تشغيل آخر.

لا تهتم إلا إذا كنت تتكامل مع تطبيقات .NET.بالتأكيد لا تستخدم STL/CLR لأن أدائها سيئ حقًا.

من المغري قلب هذا المفتاح لاستخدام مكتبات فئة .NET، ولكن هناك بدائل.إذا قمت بذلك، فلن تتمكن من نقل التعليمات البرمجية الخاصة بك بهذه السهولة.

ويبدو أيضًا أن ظهور برمجيات المصدر المفتوح آخذ في الازدياد، لذا قد يكون هذا هو الوقت المناسب للتحقق من استخدام المكتبات والأدوات المشتركة بين الأنظمة الأساسية.يمكنك نشر تطبيق Linux بسهولة أكبر بكثير من تطبيق Windows (عن طريق شحن نظام تشغيل كامل التكوين!)، وستحصل على عائد استثمار أفضل بكثير إذا قمت بنشر عملاء Linux (لأنهم مجانيون).

إذا كنت رجل أعمال، فسأتطلع على الأقل إلى الحصول على القدرة على النشر على Linux أو Mac بدلاً من مجرد Windows فقط.ومن الناحية الاستراتيجية، لا أريد أن أراهن على أن العالم سيظل مع مايكروسوفت لمدة خمس سنوات.

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

إذا كنت بحاجة إلى استخدام كود C++ الموجود ممزوجًا بإطار عمل .NET، فمن المنطقي استخدام C++/CLI، ولكن بشكل عام يجب أن تبدأ بـ C# فقط.

إذا كان هناك شيء ما في .NET يحتاج المشروع الجديد إلى استخدامه على نطاق واسع (ربما تصميم أبسط لواجهة المستخدم الرسومية أو شيء من هذا القبيل)، فاستخدم C#.إذا لم يكن الأمر كذلك، فالتزم باستخدام لغة C++ الأصلية.ولا أعتقد أنك ستخسر شيئًا بفعل ذلك.

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

أنظر إلى هاتين المقالتين:

نظرة عامة نقدية على C++/CLI، الجزء الأول

نظرة عامة نقدية على C++/CLI، الجزء الثاني

أعتقد أنك الآن مقتنع بأنني أن C ++/CLI ليس "مجموعة من الامتدادات إلى C ++" (في العديد من الجوانب ، إنها في الواقع مجموعة فرعية من C ++) ، كما أنها لا تتعلق بـ C ++ أكثر من أي لغة أخرى مع Semicolons وأقواس مجعد.علاوة على ذلك ، فإن C ++/CLI هي بالتأكيد لغة برمجة موجهة نحو Windows ؛من المؤكد أنها ليست لغة يسعدها Solaris 10 Server أو هاتف Nokia المحمول بالتشغيل.ما الذي له أي علاقة بـ C ++؟

أحد العيوب الرئيسية لاستخدام C++/CLR هو احتمال فقدان IP (الملكية الفكرية) الخاص بك إذا لم يتم حجب الكود بشكل كافٍ.بشكل عام أنا أتفق مع التصريحات التي أدلى بها الأعضاء الآخرون هنا.إذا كنت تريد كودًا محمولًا مستقلاً عن MS .net vm، فإن لغة C/C++ الأصلية هي الحل الأمثل.

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