الكفاءة غير المعقولة لملفات makefiles

12 أغسطس 2022

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

ولد Make من زيارة من Steve Johnson (مؤلف yacc ، وما إلى ذلك) ، واقتحم مكتبي ، وشتم القدر أنه أهدر صباحًا تصحيح أخطاء برنامج لائق (تم إصلاح الخطأ ، ولم يتم إصلاح الملف تم تجميعها ، لذلك لم تتأثر cc * .o). نظرًا لأنني قضيت جزءًا من المساء السابق أتعامل مع نفس الكارثة في مشروع كنت أعمل عليه ، فقد خطرت لي فكرة أداة لحلها. لقد بدأ بفكرة معقدة لمحلل التبعية ، واختزلت إلى شيء أبسط بكثير ، وتحولت إلى Make خلال عطلة نهاية الأسبوع. كان استخدام الأدوات المبتلة جزءًا من الثقافة. كانت ملفات Makefiles عبارة عن ملفات نصية ، وليست ثنائيات مشفرة بطريقة سحرية ، لأن هذه كانت فلسفة Unix: أشياء قابلة للطباعة وقابلة للتصحيح ومفهومة. - فن برمجة Unix

أنشئ رسمًا بيانيًا مباشرًا للبناء (DAG) للاعتماديات واستخدم أوقات تعديل الملف لتقرير ما إذا كان يجب إعادة بناء المخرجات أم لا.

لماذا تكون ناجحًا إلى هذا الحد؟ لا تدير الدولة نفسها. لا توجد أوقات لتعديل ملف قاعدة البيانات أو مجاميع اختبارية أو إنشاء ملفات إخراج قد تتسبب في حالات غير صحيحة. بدلاً من ذلك ، قم ببساطة بمقارنة أوقات تعديل الملف من المخرجات إلى المدخلات. ليست توضيحية بشكل كامل . على الرغم من أن هذه خاصية غير مرغوب فيها للأنظمة الكبيرة بشكل مفرط ، إلا أنها كافية لـ 80٪ من المشاريع (مبدأ باريتو لأنظمة البناء). بناء الجملة التعريفي للقواعد التي تهتم بها وقواعد PHONY البسيطة للمهام التي لا تهتم بها. فتحات هروب سهلة. صيغة Makefile ليست مثالية للإعدادات المعقدة. لا يعد استخدام make كنقطة دخول لمجموعة متنوعة من نصوص bash أمرًا سيئًا في العادة. بالنسبة لمعظم التكوينات ، لا توجد نماذج مفرطة. من بعض النواحي ، فإن بناء الجملة الذي يصعب تعلمه منع Makefiles من الظهور مثل مخططات Helm أو قوالب Jinja. أسباب ليندي الأخرى التي قد لا نعرف عنها.

بالطبع ، هناك دائمًا مجال للتحسين في البرامج التي يبلغ عمرها 46 عامًا. قد تكون بعض هذه الميزات بعيدة المنال ، ولكن قائمة قصيرة من الأفكار. التوفيق بين عامل الإرساء مع أهداف makefile في $ make docker. دعم من الدرجة الأولى للغات التكوين مثل JSON ، ربما jq مدمج؟ إطار عمل تبعية أو نظام نوع مرن مثل لماذا TypeScript للبنية التحتية؟ عارض الملفات أو Live Reload. يمكنك إنشاء حلقة بناء / نشر بسهولة تامة ، ولكن معرفة DAG يبسط ذلك للمطورين. هذه هي الطريقة التي يعمل بها سكافولد.

اشترك لتلقي مشاركات يومية حول الشركات الناشئة والهندسة.

12 أغسطس 2022

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

ولد Make من زيارة من Steve Johnson (مؤلف yacc ، وما إلى ذلك) ، واقتحم مكتبي ، وشتم القدر أنه أهدر صباحًا تصحيح أخطاء برنامج لائق (تم إصلاح الخطأ ، ولم يتم إصلاح الملف تم تجميعها ، لذلك لم تتأثر cc * .o). نظرًا لأنني قضيت جزءًا من المساء السابق أتعامل مع نفس الكارثة في مشروع كنت أعمل عليه ، فقد خطرت لي فكرة أداة لحلها. لقد بدأ بفكرة معقدة لمحلل التبعية ، واختزلت إلى شيء أبسط بكثير ، وتحولت إلى Make خلال عطلة نهاية الأسبوع. كان استخدام الأدوات المبتلة جزءًا من الثقافة. كانت ملفات Makefiles عبارة عن ملفات نصية ، وليست ثنائيات مشفرة بطريقة سحرية ، لأن هذه كانت فلسفة Unix: أشياء قابلة للطباعة وقابلة للتصحيح ومفهومة. - فن برمجة Unix

أنشئ رسمًا بيانيًا مباشرًا للبناء (DAG) للاعتماديات واستخدم أوقات تعديل الملف لتقرير ما إذا كان يجب إعادة بناء المخرجات أم لا.

لماذا تكون ناجحًا إلى هذا الحد؟ لا تدير الدولة نفسها. لا توجد أوقات لتعديل ملف قاعدة البيانات أو مجاميع اختبارية أو إنشاء ملفات إخراج قد تتسبب في حالات غير صحيحة. بدلاً من ذلك ، قم ببساطة بمقارنة أوقات تعديل الملف من المخرجات إلى المدخلات. ليست توضيحية بشكل كامل . على الرغم من أن هذه خاصية غير مرغوب فيها للأنظمة الكبيرة بشكل مفرط ، إلا أنها كافية لـ 80٪ من المشاريع (مبدأ باريتو لأنظمة البناء). بناء الجملة التعريفي للقواعد التي تهتم بها وقواعد PHONY البسيطة للمهام التي لا تهتم بها. فتحات هروب سهلة. صيغة Makefile ليست مثالية للإعدادات المعقدة. لا يعد استخدام make كنقطة دخول لمجموعة متنوعة من نصوص bash أمرًا سيئًا في العادة. بالنسبة لمعظم التكوينات ، لا توجد نماذج مفرطة. من بعض النواحي ، فإن بناء الجملة الذي يصعب تعلمه منع Makefiles من الظهور مثل مخططات Helm أو قوالب Jinja. أسباب ليندي الأخرى التي قد لا نعرف عنها.

بالطبع ، هناك دائمًا مجال للتحسين في البرامج التي يبلغ عمرها 46 عامًا. قد تكون بعض هذه الميزات بعيدة المنال ، ولكن قائمة قصيرة من الأفكار. التوفيق بين عامل الإرساء مع أهداف makefile في $ make docker. دعم من الدرجة الأولى للغات التكوين مثل JSON ، ربما jq مدمج؟ إطار عمل تبعية أو نظام نوع مرن مثل لماذا TypeScript للبنية التحتية؟ عارض الملفات أو Live Reload. يمكنك إنشاء حلقة بناء / نشر بسهولة تامة ، ولكن معرفة DAG يبسط ذلك للمطورين. هذه هي الطريقة التي يعمل بها سكافولد.

اشترك لتلقي مشاركات يومية حول الشركات الناشئة والهندسة.

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow