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