C ++، بيثون، الصدأ، سكالا بناء مجمع كم الفرق؟

تريستان هيوم CSDN

[ملاحظة المحرر] CSDN لا جدال مطوري لغة البرمجة الأبدي موضوعا ساخنا، أيضا وجهات نظر مختلفة حول قرارات الاختيار والتصميم في لغات مختلفة. حتى في مواجهة مشاريع واسعة النطاق، وكيفية اختيار تنفيذ محددة لذلك؟ من قبل صاحب هذا المشروع المناهج ماكينة الورق، مقارنة الاختلافات في المجمع مكتوبة بلغة الصدأ، هاسكل، لغة كامل الموضوعية و C ++، بيثون، سكالا، ووجدوا في النهاية أن هذه اللغات تختلف ببساطة على كمية من رمز وظيفة لتحقيق!

الكاتب | تريستان هيوم المترجم | الغضروف المفصلي، ذبيان | قوه روي أنتجت | CSDN (ID: CSDNnews)

وفيما يلي ترجمة:

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

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

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

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

مقارنة المعنى

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

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

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

الصدأ (المرجعية)

لدي عضو آخر في الفريق، وكانت مكتوبة قبل أكثر من 10،000 الأسطر من التعليمات البرمجية الصدأ، كتب عضو آخر عن 500 خطوط الصدأ على ماراثون البرمجة معين. نتائج المجمعين لدينا استخدام الإحصاءات -l مرحاض هو خط 6806، بما في ذلك خطوط 5900 من التعليمات البرمجية (وليس بما في ذلك خطوط فارغة وتعليق)، نتيجة -c مرحاض هو 220kb.

مشكلة واحدة لقد وجدت أن هذه العناصر قياس نسبة مشاريع أخرى هي أيضا مشابهة، فقط بعض الاختلافات الطفيفة (كان لحظة سأشرح). عندما ذكر عدد من الأسطر من التعليمات البرمجية أدناه، وأنا أشير إليها هي نتيجة مرحاض -l، ولكن قبل تظهر النتائج أن عدد خطوط للقانون وفقا للقواعد الإحصاءات التي في الواقع لا لا يهم (ما لم ينص على خلاف ذلك)، يمكنك تحجيم كتبها الحجم.

كتبت مقال آخر حول تصميم ( وقد مرت هذه تصميم جميع الاختبارات المفتوحة والسرية. ويتضمن أيضا العديد من الميزات الإضافية التي وضعنا للتو من الفائدة، لم أكن أعتقد أن الاختبار. هذه الميزات قد يستغرق ما يصل 400 خطوط. لدينا ما مجموعه حسابات اختبار وحدة ورمز اختبار لحوالي 500 خط.

هاسكل

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

مرحاض -l المترجم هو نتيجة من 9750 خط، 357kb، 7777 SLOC (خطوط مصدر من التعليمات البرمجية). قياس الفرق في نسبة أكبر، مترجم من 1.4 أضعاف عدد الفريق الصفوف، SLOC 1.3 مرة و 1.6 أضعاف عدد بايت. أنها لم تنفذ أي وظيفة إضافية، ولكن جميع حالات الاختبار العلنية والسرية.

وتجدر الإشارة إلى نقطة مهمة هي أنه ليس هناك سوى حالات الاختبار المدرجة في الإحصاءات، هو الوحيد المعرض لهذا الفريق، لأنهم رمز الراجح، وتشمل حالات الاختبار خط 1600، وفشل القبض الوضع على الحدود عدة لالتقاط فريق ، مجرد برنامج اختبار لتوفير التغطية لتلك الحالات دون الحدود فقط. لذلك، إذا لم يكن أي اختبار إحصائي، ثم خط مدوناتها هو 8.1k، 6.3K هو خطنا، نحن فقط 1.3 مرة.

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

بعد صديق آخر وفريق حفر مشكلة حجم الرمز، نجد أسباب التالية لشرح الفرق في حجم كود:

  • وقد اعتمدنا محلل المفردات وتحليل النسب العودية (عودي أصل الاعراب) ومكتوبة بخط اليد، استخدموا NFA إلى DFA مولد المفردات، ومحلل LR، ثم مسح مرة أخرى لتحويل شجرة تحليل في AST (مجردة شجرة في بناء الجملة ، هو أكثر تمثيل ملائم للقانون). والتي تتطلب المزيد من الحسابات رمز 2677 خطوط، على وشك أكثر مما لدينا 1705 خط 1K الخط.
  • أنها تستخدم أكثر عمومية AST نوع جميل، يمكن تحويلها إلى أنواع مختلفة من المعلمات، لمزيد من المعلومات ستضاف كل قرار. وهذا يتطلب المزيد من الوظائف المساعدة، مما يؤدي إلى AST على أكثر من 500 خط من التعليمات البرمجية من نحن ندرك - مجرد هيكل الحرفي نستخدمها عند تحليل وإضافة المعلومات، ويمكن تعديل الخيار < _ > المجال.
  • كان هناك حوالي 400 سطر من الكود لتنفيذ مستوى أعلى من التجريد، بحيث بطريقة وظيفية بحتة لتحقيق مزيج من رمز جيل، ونحن مباشرة تعديل السلسلة.

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

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

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

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

C ++

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

أنها توقع عدد من الأسطر من التعليمات البرمجية إلى 8733، وعدد من وحدات البايت إلى 280kb، وهذه الأرقام لا تشمل رمز اختبار، ولكن يتضمن ميزات إضافية نحو 500 خطوط. مقارنة اختبار خالية من مدونة لدينا (ويشمل أيضا ميزات إضافية 500 خط)، وعدد من الأسطر من التعليمات البرمجية لمن 1.4 مرة. مروا أمام اختبار 100 من الجمهور، ولكن فقط بنسبة 90 من اختبارات سرية، وربما لأنهم لا يدركون مجموعة vtable من متطلبات المشروع، وتتطلب هذه الميزة عن 50-100 أسطر من التعليمات البرمجية.

لم أكن حفر أعمق الخلافات رمز سبب، أشعر أن معظم التفسير المحتمل هو:

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

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

الثعبان

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

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

أكبر سبب لهذا الاختلاف من المرجح أن يكون كتابة بشكل حيوي. لدينا ast.rs استحوذ على تعريف نوع 500 خطوط، وكذلك أجزاء أخرى من المترجم المزيد نوع التعاريف. نحن أيضا أنواع مختلفة من القيود حسب نوع النظام. على سبيل المثال، نحتاج الى بنية تحتية، من أجل إضافة المعلومات لاستخدامها لاحقا في التعليمات البرمجية تحليل لعملية AST، ولكن مجرد الاستسلام عقدة بيثون AST يمكن إضافة مجال جديد.

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

مثال آخر على قوة الفوقية البرمجة والطباعة ودينامية هو أن لدينا ملف يسمى visit.rs ديه 400 خطوط، ومعظمها هو رمز النمطي المتكرر، يتم تنفيذ المنفذ الوحيد على مختلف الهياكل AST . لا يتطلب سوى عن الصف 10 يمكن أن تعمل بشكل متكرر عقدة الوصول AST في بيثون كل مجال (عن طريق __dict__ الملكية).

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

في الصدأ (مجموعة أخرى)

وأخيرا، والمقارنة هي الأكثر إثارة للاهتمام، هو مقارنة لي وصديق آخر. لديهم عضو آخر في مجموعة (أنا لا أعرف)، ولكن أيضا استخدام الصدأ. صديقي لديه الكثير من الخبرة في مجال الصدأ، شارك الصدأ أيضا في المجمع، كما قرأت الكثير من المعلومات. لكنني لا أفهم كيف فريقه.

مشاريعهم لها 17211 خطوط للقانون، لا تعليق، ثم 15000 خطوط، وليس بما في ذلك رمز اختبار والشفرة التي تم إنشاؤها ما مجموعه 637kb. أنها لم تنفذ أي وظيفة إضافية، 4/10 فقط من خلال اختبار سري، اختبار، و 90 في المئة من الجمهور، لأنهم لم يكن لديك الوقت لتنفيذ متطلبات القسم متقدمة من المشروع قبل الموعد المحدد. اللغة نفسها، وكمية متاحة لدينا ثلاثة أضعاف، ولكن وظيفة أقل!

هذه النتيجة فاجأني جدا، مقارنة مع المقارنات السابقة طغت عليه. حتى قارنا حجم كل ملف مرحاض -l، وكذلك فحص دقيق لكل وظيفة هو كيفية تحقيقه.

نتخذ قرارات تصميم تبدو مختلفة تماما. على سبيل المثال، على الواجهة الأمامية (معجمي، تحليل، وبناء AST) بما في ذلك 7597 خطوط، وخطوطنا فقط 2164. انهم يستخدمون محلل معجمي DFA مقرها وLALR (1) محلل، ولكن اعتمدت مجموعة أخرى لم برامج مماثلة لم يكتب الكثير من التعليمات البرمجية. بعد التحقق بعناية التعليمات البرمجية الخاصة بهم، وجدت العديد من القرارات تصميم مختلفة:

  • واستخدم الباحثون كاملة نوع شجرة تحليل، بدلا من المعيار، استنادا إلى نفس الولاية شجرة سلسلة تحليل. مما يتطلب المزيد من تعريفات نوع، وعملية تحليل يتطلب المزيد من الترميز، أو التي تتطلب مولد تحليل أكثر تعقيدا.
  • عندما تحقق من صحة، وذلك باستخدام TryFrom تحويل المتبادل بين أنواع من نوع شجرة تحليل وAST، الذي ينتج عنه كمية كبيرة من كتلة التعليمات البرمجية 10 impl ~ 20 خطوط. كنا العودة نوع النتيجة من وظيفة لتحقيق نفس الوظيفة، وكمية من التعليمات البرمجية إضافية أصغر، ليست هناك حاجة لإضافة أنواع هيكل المفرطة لإعادة المعلمات أسهل. بعض من التعليمات البرمجية لدينا هو فقط مباراة صف واحد، وسوف تحتاج إلى بيان impl 10 الصفوف.
  • نحتاج أقل من هذا النوع من النسخ واللصق. على سبيل المثال، شريطة أن is_abstract منفصلة، مجال is_native وis_static، بحيث القيد كود يؤدي نسخ ولصق لفحصها مرتين، مرة واحدة في الطريقة لا يعود نتيجة لذلك، وبمجرد أن الأسلوب بإرجاع النتائج، على حد سواء إلا تعديلات طفيفة. بالنسبة لنا، وباطلا مجرد نوع خاص، توصلنا مع طريقة، وفقا لتصنيف الوضع والرؤية لضمان هذه القيود على نوع التسلسل الهرمي، والقيود الأخطاء الناتجة عن المباراة بيان الحالة الافتراضية، يمكن تحويلها مباشرة إلى وضع والمطلوب معدل الرؤية.

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

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

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

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

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

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

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

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

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

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

سكالا

حتى ذهبت في الفصل الدراسي ناقش سكالا مع الأصدقاء، ومشاريعهم بالضبط مثلنا. هم مترجم يحتوي على 4141 خطوط، 160KB (لم يختبر). مروا 8/10 اختبارات سرية و 100 من اختبار العام، لا يطبق أي وظائف إضافية. حتى بالمقارنة مع خطنا 5906 من رمز، رمز منها هو فقط 0.7 مرات.

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

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

لغة كامل الموضوعية

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

المترجم منها هو 10914 خط، 377kb، بما في ذلك جزء صغير من رمز اختبار، لا ميزات اضافية، من خلال اختبار سري من 9/10 وجميع بيتا العامة.

على غرار المجموعات الأخرى، هو مقدار مدونة الفرق يرجع إلى استخدامها لمولدات LR محلل وأشجار إعادة الكتابة، التحليل المعجمي باستخدام تعبير عادي - > NFA- > خط أنابيب تحويل DFA. على الواجهة الأمامية (تحليل تركيب تحليل المفردات + AST + بناء) يحتوي على 5548 خطوط، لدينا خطوط فقط 2164، مماثلة لنسبة بايت. كما أنها تستخدم لمحلل تتوقعه الاختبارات، استخدمنا اختبار مماثل، ولكن يتم وضع رمز الناتج المتوقع الخارج، حتى أنها تمثل خط اختبار حوالي 600 محلل، وخطوطنا فقط 200.

الأجزاء المتبقية من من المترجم هو 5366 خطوط (والتي هي النوع الوحيد تعريف ملف واجهة 461 خط)، وخطنا 4642 هو، إذا كنت تنظر في تعريف واجهة هو فقط 1.15 أضعاف الفرق، بغض النظر عن تعريف واجهة، وهما تقريبا نفس الحجم. لذلك، بالإضافة إلى محلل ليس هو نفس التصميم، معبرة الصدأ ولغة كامل الموضوعية هي مشابهة جدا، إلا لغة كامل الموضوعية بحاجة الى بعض غير المرغوب فيها الصدأ تعريف واجهة فقط.

ملخص

وعموما، أنا مسرور جدا مع نتيجة المقارنة.

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

رؤية منظمة العفو الدولية لصالح جودة الصناعية السيطرة نائب الرئيس عميقة مثل إنتل للعلوم والتكنولوجيا مقابلة مشتركة

تعلم مصدر الربيع (أ) - وعاء البنية التحتية

Dajiang OSMO ACTON إعادة تعريف بك مدونة فيديو العالم

PytorchHub من قبل؟ ثلاث دقائق ليأخذك إلى فهم PaddleHub

2019 المعرض الدولي للتكنولوجيا العرض الجديدة "سرعة هوا جيا تساى" مجموعة من صناعة لوحة عاصفة جديدة

"جوستين"، "حصة" 190624 اليوم هوت تبادل لاطلاق النار الطازج! الرياضة المراهق جاستن من الشمس عليه

"GOT7" "مشاركة" نشرت في الغابة 190624 مروحة المشاركة "OFFSHORE" منتج الألبوم لأعمال ترتيب أول مرة

"NCT" "الأخبار" 190624 NCT127 نهاية الموعد المحدد في الخارج ضد كوريا عبر مطار إنتشون الدولي

الابتكار والمهنية سحر تشي يون استقرار لاول مرة CES آسيا 2019

تعزيز تطوير الحبر الرقمي اكوم اول مرة الكبرى CESAsia 2019

بنك انجلترا لتقديم منتجات جديدة اقبال DISPLAY لاول مرة CHINA 2019

تشونغتشينغ HKC تقديم منتجات جديدة اقبال DISPLAY لاول مرة CHINA 2019