هل يجب أن أنتقل من C++ إلى Python؟… أو لغة أخرى؟[مغلق]

StackOverflow https://stackoverflow.com/questions/8748

  •  08-06-2019
  •  | 
  •  

سؤال

في الشركة التي أعمل بها، نقوم بالكثير من عمليات معالجة المعاملات القائمة على الملفات.تتمحور المعالجة حول تحويل الملفات بين العديد من التنسيقات لتناسب العديد من الأنظمة في العديد من الشركات.

تتضمن المعالجة دائمًا تقريبًا XML المرحلة ويمكن أن تتضمن الكثير من تحليل النص وعمليات البحث في قاعدة البيانات وتحويل البيانات والتحقق من صحة البيانات.

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

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

تعجبني فكرة عدم الحاجة إلى تجميع البرامج في كل مرة نقوم فيها بإجراء تغيير.أدرك أن اللغات المترجمة ربما لن تحقق نفس الأداء الذي نحصل عليه حاليًا.

أنظمتنا هي Linux والتي تقوم أيضًا بتقييد بعض الخيارات.

أي تعليقات على الوظائف والأداء المتاحة مع Python أو اقتراحات اللغات البديلة سيكون موضع تقدير كبير.

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

المحلول

تعجبني فكرة عدم الحاجة إلى تجميع البرامج في كل مرة نقوم فيها بإجراء تغيير.أدرك أن اللغات المترجمة ربما لن تحقق نفس الأداء الذي نحصل عليه حاليًا.

هذه هي القضية الأكبر.هل يمكنك التعايش مع الأداء الناجح؟يمكنك محاولة استخدام Python و وتوسيعه باستخدام وحدات C++ الحالية لديك لأداء الأجزاء الثقيلة.ومع ذلك، يبدو أن تبديل نظامك بأكمله يمثل جهدًا كبيرًا إذا كان السبب الوحيد هو نقص المواهب في لغة C++.يبدو أن توظيف الأشخاص الذين يعرفون C++ هو الخيار الأرخص.

نصائح أخرى

ما هو الأهم، تشغيل البرامج بسرعة، أم تشغيل البرامج بسرعة؟

إذا كنت تتعامل مع أعداد كبيرة من الملفات الكبيرة، فقد يكون من الأفضل لك البقاء في لغة C++ وتعليم المبرمجين الخريجين لديك ما هو المؤشر (!)

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

إذا لم يكن حمل المعالجة لكل سجل مرتفعًا، فقد تتفاجأ بمدى ضآلة الأداء الذي تفقده:من المؤكد تقريبًا أن الملف IO سيتم التعامل معه في مكتبة (C) مجمعة، لذلك قد يكون الحمل الزائد للمترجم منخفضًا نسبيًا.يستحق المحاولة، أود أن أقترح.

من بين اللغات الحتمية، يعد Perl خيارًا واضحًا، وPython مشهورة، وRuby تتمتع بمكانة عالية (وربما تتميز بميزات OO أنظف من اللغتين الأوليين).ثم هناك عالم مقصور على فئة معينة من اللغات الوظيفية، لكنني لست مؤهلاً للتعليق عليها.

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

أنصحك بأخذ بضعة أسابيع للتعرف على لغات البرمجة التي تفكر فيها.أود التحقق من روبي أيضا.ربما العب مع هاسكل قليلاً؟

كما أفهمها، يبدو أن بايثون مجهزة جيدًا للتعامل مع كل ما تتحدث عنه.XML، عمليات البحث في قاعدة البيانات، التحقق من الصحة، التحليل.عادةً ما يكون هذا خيارًا آمنًا، ليس فقط بسبب تجربة البرمجة السهلة والممتعة، ولكن إذا كنت عالقًا، فهناك مجتمع رائع حول اللغة والذين سيكونون سعداء بمساعدتك.

البديل الآخر هو تضمين Python في برنامج C++ الخاص بك.يمكنك الاحتفاظ بالكثير من تطبيقك كما هو، وإجراء مكالمات إلى Python للأجزاء التي تتغير كثيرًا، أو التي تحتاج إلى المرونة التي توفرها لغة البرمجة النصية.

من مستندات بايثون

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

أنا أكره أن أقول هذا، ولكن إذا كنت تريد شيئًا سيكون المطورون الجدد على دراية به، فانتقل إلى Java.Java هي اللغة التي سيكون معظم الخريجين الجدد على دراية بها.لا يزال يتعين عليك الترجمة، ولكن أوقات الترجمة ستكون أقصر من C++.سيتم تشغيله على Linux وفي أي مكان آخر تقريبًا.لقد حصلت على جامع القمامة الجيد.إنه سريع جدًا.وهل ذكرت أن المطورين لديك سيكونون على دراية بها؟لا، إنها ليست "رائعة" مثل بايثون، لكنها لغة مجربة وحقيقية للغاية.

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

أجد أنه من المثير للقلق أن لديك مطورين سيئين للغاية في إدارة الذاكرة لدرجة أنك تريد تبديل اللغات.هذه علامة تشير إلى وجود مشكلة، لكنني لست متأكدًا من أن المشكلة تكمن في اللغة.

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

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

بالنسبة لي، هناك فرق كبير بين العمل باستخدام C++ العادي ومكتبة std وSTL والعمل مع مكتبة قوية مثل Qt.ربما يكون البحث في الأشياء الجيدة المعززة أمرًا مفيدًا جدًا أيضًا.

أود أن أقترح تجربة رائع.يعد دعم XML أمرًا جيدًا ويجب ألا يكون التحليل وكذلك التحقق من صحة البيانات أمرًا صعبًا.

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

تأكد أيضًا من استخدام الملف الحديث IO (iostreams) وليس C مثل IO في C++، والذي من شأنه أن يساعد كثيرًا في حل مشكلات الذاكرة.

قد يكون البحث أيضًا عن مكتبات التعزيز مفيدًا.

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

لذلك في بعض الأحيان لا يتعلق الأمر بفقدان الأداء بنسبة 5-10٪ كما ترون.يجب عليك التحقيق في الأمر في حالتك (ربما اختبار صغير؟).

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

إذا كان بإمكانك الإفلات من استخدام Python أو Ruby أو Groovy أو Perl vs.C++ سيكون من الأفضل لك استخدام إحدى هذه اللغات ذات المستوى الأعلى.سوف تزيد الإنتاجية بشكل كبير.إذا وجدت أنك بحاجة إلى المزيد من الأداء، فانتقل إلى Java.يجب على الجميع معرفة واستخدام لغة واحدة مكتوبة ديناميكيًا على الأقل.

يجب أن تنتقل إلى لغة python التي تجعل كل شيء ممكنًا في الشبكات، إذا كنت بحاجة إلى الانتقال بشكل أسرع إلى c/c++

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

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

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

حظ سعيد!

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