مطوّر SumatraPDF يتخلّى عن std::function بعد 16 عامًا، ويُنشئ حلاً خاصًا به
2025-06-15

بعد 16 عامًا من تطوير SumatraPDF بلغة C++، تخلى المؤلف عن `std::function` ووظائف lambda نظرًا لصعوبة تصحيح الأخطاء. كانت تقارير الأعطال صعبة الفهم بسبب الأسماء المُولّدة تلقائيًا لوظائف lambda التي يُنشئها المُجمّع. أنشأ وظائف مُخصّصة أبسط لاستدعاء الوظائف، وهي `Func0` و `Func1`. على الرغم من أنها أقل ثراءً من حيث الميزات من `std::function`، إلا أنها توفر مزايا كبيرة في مساحة الذاكرة وسرعة التجميع، كما أنها أسهل في التصحيح. تُفصّل هذه المقالة تصميم وطريقة تنفيذ `Func0` و `Func1`، وتُشرح سبب ملاءمة هذا النهج لاحتياجات SumatraPDF.
التطوير
استدعاء الوظائف