تم تقديم مُجمِّع Cheerp 3.0، الذي يسمح لك بتجميع أي كود C/C++ إلى WebAssembly أو JavaScript. يتميز الفرع الجديد بنقل المترجم والمكتبات المصاحبة لاستخدام تراخيص Apache 2.0 وLLVM المسموح بها، بدلاً من سياسة الترخيص التقييدية السابقة التي عرضت خيار ترخيص GPLv2 للمشاريع غير التجارية وترخيصًا خاصًا للمشاريع التجارية. يعتمد كود المترجم على عمل LLVM وClang، ويتضمن تحسينات إضافية لتحسين الأداء وتقليل حجم النتيجة المترجمة.
يمكن استخدام Cheerp لنقل مكتبات C/C++ والتطبيقات الموجودة لتشغيلها في المتصفح، بالإضافة إلى إنشاء تطبيقات ويب عالية الأداء ومكونات WebAssembly من الصفر. يتيح لك المشروع دمج كود C/C++ وJavaScript في تطبيق ويب واحد، مع القدرة على الوصول إلى الوظائف التي تم تطويرها في الأصل في C/C++ من كود JavaScript، وكائنات JavaScript، ومكتبات JavaScript، وواجهة برمجة التطبيقات على الويب، وجميع إمكانيات DOM من كود C/C++. من الممكن إنشاء تجميعات مجمعة، حيث يتم تجميع جزء من الكود إلى JavaScript والجزء الآخر إلى WebAssembly. يتم دعم مشاريع البناء التي تستخدم مكتبات libc وlibc++ القياسية.
بالمقارنة مع مُجمِّع Emscripten، يُولِّد Cheerp كودًا وسيطًا مُحسَّنًا ومُدمجًا لـ WebAssembly (في المتوسط، تكون الملفات الناتجة أصغر بنسبة 7%). مفهوميًا، تتلخص الاختلافات في استخدام Emscripten كتنسيق لكائن WebAssembly وإجراء الارتباط والتحسين في مرحلة ما بعد معالجة WebAssembly (wasm-opt). يستخدم Cheerp بايت كود LLVM كتمثيل وسيط للمكتبات وملفات الكائنات، مما يسمح بإجراء تحسينات أوسع نطاقًا على مستوى المشروع تستفيد من بيانات التعريف على مستوى LLVM دون الحاجة إلى المعالجة اللاحقة.
بالإضافة إلى ذلك، يستخدم Cheerp مُحسِّن PreExecuter، الذي يتيح التنفيذ التنبئي للكود في وقت التجميع، على سبيل المثال لتحويل المنشئين المستخدمين لتهيئة الكائنات العالمية إلى ثوابت. بالإضافة إلى ذلك، أثناء التجميع، يتم استخدام PartialExecuter، والذي يقوم، بناءً على تحليل معلمات الوظيفة، بإزالة الكود الذي من المؤكد عدم استخدامه أثناء التنفيذ.
يمكن لـ Cheer أيضًا إنشاء كود JavaScript للعمل بشكل ديناميكي مع الذاكرة المجمعة. على وجه الخصوص، بدلاً من محاكاة مساحة عنوان تقليدية باستخدام المصفوفات المكتوبة، يوفر Cheerp تعيينًا مباشرًا لكائنات C++ إلى كائنات JavaScript، مما يقلل من استهلاك الذاكرة لأن جامع القمامة JavaScript لديه القدرة على إزالة الكائنات غير المستخدمة. لتحسين الأداء، يستخدم الكود الوسيط الذي تم إنشاؤه بواسطة WebAssembly ملحقات SIMD، والتي تسمح بالتوازي بين عمليات البيانات.
يمكن استخدام Cheerp كمنصة لإنشاء تطبيقات ويب متكاملة للعميل/الخادم في C++. في الممارسة الحالية، يتم عادةً تطوير واجهة أمامية منفصلة مكتوبة بلغة JavaScript، والتي تعمل في متصفح، وجزء خادم منفصل مكتوب بلغة PHP أو Python أو Ruby أو JavaScript/Node.js. توفر Cheerp أدوات لإنشاء تطبيقات ويب C++ شاملة حيث يتم صيانة الواجهة الخلفية والأمامية في قاعدة بيانات كود واحدة. أثناء عملية التجميع، يتم تجميع جزء الخادم إلى كود أصلي، ويتم تحويل الواجهة إلى تمثيل JavaScript. يتم إجراء تصحيح أخطاء جميع مكونات المشروع، بما في ذلك تلك المحولة إلى JavaScript، باستخدام كود المصدر C++ باستخدام تقنية Source Map (في حالة حدوث خطأ، يمكنك رؤية قسم من كود C++، وتعيين نقاط التوقف في كود C++ ويتم دعم تنفيذ كود C++ سطرًا بسطر خطوة بخطوة).
المصدر: opennet.ru
