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

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

  •  07-07-2019
  •  | 
  •  

سؤال

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

في الوقت الحالي، يعمل C/C++ بشكل جيد ويوجد الكثير من التطوير له في السوق.

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

لقد سمعت عن د, ، بدأت تنضج تمامًا، و يذهب, ، واعدة بأن تحظى بشعبية كبيرة.

ماذا سيكون اختيارك ولماذا؟

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

المحلول

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

نصائح أخرى

وC و C ++ هي الى حد كبير السرد الذي لا يهزم عندما يتعلق الأمر غير المدارة / اللغات الأم / "lowlevel".

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

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

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

وC ++ تتطور بشكل كبير أكثر من ذلك بكثير، مع C ++ 0X الحصول على أقرب، وأنها قد حصلت بالفعل على قائمة كبيرة من الميزات التي تريد أن تفعل <م> بعد ذلك . C ++ ليس مسدود بأي شكل من الأشكال.

وكل اللغات وجدت لتبقى. ربما في 50 عاما لغات أخرى ستكون قد حلت محلها، ولكن ذلك لن يحدث هذا العقد.

أستخدم حاليًا D بانتظام.لا أوصي به حتى الآن للأشخاص الذين يكتبون كود الإنتاج لأنه شديد النزيف.لقد أفلتت من العقاب لأن معظم الكود الخاص بي عبارة عن نماذج بحثية أولية في المعلوماتية الحيوية.ومع ذلك، بدأت اللغة في الاستقرار.سيصدر Andrei Alexandrescu كتابًا بعنوان "The D Programming Language" في شهر مارس المقبل، وهناك حاليًا دفعة لتحقيق الاستقرار في مواصفات الإصدار 2 من اللغة في الوقت المناسب للكتاب.

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

أيضًا، على الرغم من افتقار لغة D للمكتبات لأنها لا تزال لغة نازفة، إلا أنها حلم كاتب المكتبة بسبب قدراتها في البرمجة الوصفية.إذا نجحت، فمن المحتمل أن تحتوي على بعض libs الرائعة جدًا.للحصول على معاينة لهذا، راجع std.range أو std.algorithm في مكتبة D2 القياسية (Phobos).وكمثال آخر، قمت بتنفيذ نموذج توازي يشبه OpenMP (البحث المتوازي، الخريطة المتوازية، التخفيض المتوازي، العقود الآجلة) كمكتبة خالصة في D، دون أي دعم خاص للمترجم.(يرى http://cis.jhu.edu/~dsimcha/parallelFuture.html)

نظرًا لأنك مهتم في الغالب على المدى الطويل، فأنا أقول منح D 6 أشهر لتحقيق الاستقرار (نظرًا لكتاب Andrei والدفع الحالي لتحقيق استقرار اللغة، يجب أن يكون الإصدار 2 مستقرًا بحلول ذلك الوقت) ثم قم بإلقاء نظرة فاحصة على هو - هي.

يحرر:الآن وبعد أن أصبحت مواصفات اللغة الأساسية مستقرة نسبيًا وتحول التركيز إلى تطوير سلسلة الأدوات والمكتبات، فقد قررت I كان أوصي بـ D لمشاريع الإنتاج الصغيرة إلا إذا كنت في بيئة شديدة تجنب المخاطر.ومع ذلك، فإن المشاريع الأكبر حجمًا التي يجب أن تحتوي على سلسلة أدوات جيدة ودعم مكتبة يجب أن تنتظر.

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

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

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

وC++ - هو الشباب وتحديثها نسبيا ... انها لديها عدد كبير من البائعين مترجم وحصلت تحسن في كل وقت.

وC - أنه سيعيش لفترة طويلة سد الفجوة بين المجمع واللغات عالية المستوى. بل هو أيضا بسيطة جدا وسهلة التنفيذ اللغة، لذلك ستظل اللغة الأولى لمختلف أبنية "غريبة" مثل جديدة مضمن أو غاية.

وD واعدة ولكن لا يزال المواصفات ومكتبات جديدة جدا وغير مستقرة.

وGo ولد قبل أسابيع قليلة ... لا تستعمل أبدا أي شيء من النسخة 0 لمشاريع مهمة كبيرة. كما هو ملحوظ أكثر محدودية C++ أو D.

2019 تحديث: C ++ سيبقى في جميع أنحاء لالسنوات ال 10 المقبلة ... (إن لم يكن، وسوف تصحيح هذه الإجابة، عند ذلك لن تكون ذات صلة أي أكثر من ذلك ....)

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

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

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

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

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

وأنا لا نعترف بأن C ++ يمكن أن يكون من الصعب (مثل إدارة الذاكرة) لذلك اعتقد انه من الجيد ان يكون هناك "إضافة على 'اللغة حيث الأداء ليست ضرورية والقراءة (== الصيانة) درجات عالية: أوصي بيثون لهذا الغرض.

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

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

إنتل Cilk ++ أدوات تطوير برامج إذا تريد إثارة اهتمامك في التنمية ++ / C متعددة النواة. أنا لا أرى C أو C ++ الذهاب بعيدا في أي وقت قريب أيضا.

مقارنة C * بـ Cobol أمر مشكوك فيه

قد تؤدي مقارنة C* بـ Cobol إلى نتيجة خاطئة.لقد كانت لغة C مثالية في يومها، وكانت قفزة هائلة إلى الأمام عند تقديمها، ولا تزال تنجز المهمة حتى اليوم.

أود أن ألخص كوبول في أكثر أيامي الخيرية بـ "محاولة جيدة".

سوف تستمر C وC++ لفترة طويلة لأنها تناسب الفاتورة بالإضافة إلى لغات التنفيذ.وهذا لن يتغير حقا.

ضع في اعتبارك أيضًا أن المشكلة السلبية الرئيسية في C/C++ هي نقص أمان الذاكرة.يميل هذا إلى أن يكون أقل مشكلة مع نضوج الرموز.وهذا يعني أنه لن يكون هناك سبب جدي لاستبدال الرموز القديمة.

أتوقع أن تنمو أنظمة البرمجيات إلى الخارج من لغة C.انظر إلى التسلسل الهرمي اليوم:

  • تطبيق مكتوب في إطار عمل مثل Rails
  • الواجهة الخلفية للتطبيق مكتوبة بلغة Ruby وPHP وPython وC# وأي شيء آخر
  • تنفيذ وقت التشغيل Ruby أو PHP أو Python أو C# (مكتوب بلغة C*)
  • نواة نظام التشغيل (مكتوبة في C89)

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

ليس لدينا أي فكرة عما إذا كان Go سيجد القبول.ربما لن يكون مجرد التواجد بجانب Google كافيًا.

د؟حسنًا، لقد قيلت بعض الأشياء اللطيفة حول هذا الموضوع، لكنه لن ينطلق أيضًا.لا توجد قاعدة مستخدمين للحديث عنها.D هو رقم 20 من حيث الشعبية على مؤشر تيوب, ، ويسقط بسرعة.

يمكنك القول أن شعبية اللغة لا علاقة لها بمدى ملاءمتها لعمل شركتك.لكن الأمر يتعلق بمدى سهولة العثور على أشخاص مؤهلين للبرمجة فيها.

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

أنا معجب جدا به روبي.إنها لغة أنيقة ومعبرة:يمكنك إنجاز الكثير باستخدام القليل من التعليمات البرمجية، ومع ذلك يظل هذا الرمز مقروءًا في الغالب.أحد المبادئ الأساسية لروبي هو أن تكون متسقًا وألا تحمل مفاجآت للمطور.هذه فكرة جيدة للغاية، IMO، وتعزز الإنتاجية.في وقت الضجيج الكبير لـ Rails (والذي ربما لا يزال مستمرًا)، اتخذت موقفًا واسعًا حول روبي لأن تنفيذها المرجعي بطيء للغاية.ومع ذلك، جي روبي لقد جعل الأشخاص في Sun الأمر سريعًا للغاية على JVM، لذا فإن الأمر الآن يستحق بالتأكيد بعض الاهتمام.توفر روبي عمليات الإغلاق ومجموعة جيدة من إمكانيات البرمجة الوظيفية (انظر أدناه لمعرفة سبب أهمية ذلك)، على الرغم من أنها لا تعتبر لغة FP حقًا.مؤشر تيوب:10 ويرتفع.

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

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

تم تطوير سكالا من قبل الأكاديميين، ويظهر ذلك:إنها معقدة ومتحذقة تمامًا فيما يتعلق بأنواع البيانات؛تحاول أن تكون سكين الجيش السويسري للغات البرمجة.أعتقد أن الكثير من المبرمجين ذوي الذكاء المتوسط ​​سيواجهون صعوبة في السيطرة على Scala.روبي أقل FP ولا تفعل الكثير فيما يتعلق بالتزامن، ولكنها عملية وممتعة وسهلة لإنجاز الأمور.أيضًا، عند التشغيل على JVM، يوجد قدر هائل من التعليمات البرمجية المتوفرة بسهولة في مكتبات Java، والتي يمكن لروبي التفاعل معها.لذا:

رهاني سيكون على روبي، مع فرصة خارجية على سكالا.ولكن هناك الكثير من البدائل!

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


Java هي الآن لغة برمجة النظام.لا أرى كيف يمكنك التفكير في أي شيء به بنيات غير آمنة مثل مؤشرات "الجيل التالي".السبب الوحيد لوجود هذه البنيات غير الآمنة على الإطلاق هو أنه كان النهج العملي لبناء لغة كاملة.لم يكن هناك أي اهتمام بتمثيل الذاكرة في كائنات منفصلة، ​​لأنهم أرادوا فقط بناء شيء ما عمل.توجد بالفعل تطبيقات فعلية صلبة وناعمة في Java، ومجموعة متنوعة من معالجات الرموز الثانوية للأجهزة، وأكثر من 2 مليار جهاز محمول يعمل بنظام Java.على الأكثر، كل ما عليك فعله هو إضافة بعض التركيبات لقابلية التشغيل التفاعلي مع الأجهزة، والتي لن تتطلب الكثير من التعليمات البرمجية؛حتى في C/C++، لا يزال يتعين عليك إضافة هذه التركيبات...

ماذا تبرمج؟ميكروكنترولر 8 بت مع 1 كيلو بايت من ذاكرة الوصول العشوائي؟في هذه الحالة، سيكون من غير المجدي استخدام أي شيء آخر غير المجمّع الخاص بتلك المنصة...

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