يقوم مشروع Solod بتطوير مجموعة فرعية من لغة Go يتم ترجمتها إلى لغة C.

نقدم لغة البرمجة Solod (So). وهي عبارة عن مجموعة فرعية من لغة Go مُترجمة إلى تمثيل C11 مناسب للترجمة باستخدام مُترجمات GCC وClang وzig cc. يتمثل أحد الاختلافات الرئيسية بين Solod وGo وTinygo في استخدامها لإدارة الذاكرة اليدوية، والتي تعمل بدون جامع قمامة أو تخصيص تلقائي للذاكرة أو عدّ المراجع. كُتب مُترجم Solod بلغة Go ويُوزع بموجب ترخيص BSD. وهو يعمل على أنظمة Linux وmacOS وWindows.

تدعم اللغة البنى، والأساليب، والواجهات، والشرائح، والدوال التي تُرجع قيمًا متعددة (مثل النتيجة + رمز الخطأ)، والأنواع العامة، والاستدعاءات المؤجلة (defer). ولتبسيط الأمر، لا تدعم اللغة القنوات، أو الروتينات الفرعية، أو الإغلاقات. يمكن لتطوير Solod الاستفادة من خوادم LSP الحالية، وأدوات فحص الأخطاء، وبيئات التطوير المتكاملة، ومحررات الأكواد التي تدعم لغة Go، بالإضافة إلى مجموعة أدوات "go test".

يمكن دمج الشيفرة المكتوبة بلغة Solod مع تطبيقات C (حيث يمكن لـ C استدعاء دوال Solod والعكس صحيح)، ولا تتطلب بيئة تشغيل. تشمل مجالات التطبيق الرئيسية برمجة الأنظمة، بإمكانيات مشابهة للغة C، ولكن بصيغة Go وفحص أنواع البيانات. كما يمكن استخدام Solod لنقل مكتبات Go لاستخدامها في مشاريع C. وقد تم نقل حزم Go مثل strings و io و bytes و mem و slices وغيرها إلى C. بالإضافة إلى مجموعة مكتبات Go المنقولة، يمكن لبرامج Solod استخدام روابط لمكتبة C القياسية، libc.

افتراضيًا، تُخصص جميع الذاكرة على المكدس، ولكن يمكن تخصيصها على الكومة باستخدام دالتي Alloc و Free من المكتبة القياسية. لا تُستخدم خاصية جمع البيانات المهملة أو عدّ المراجع، ولكن يوفر Solod ميزات للتحقق من أنواع البيانات، ويكشف عن الأعطال عند الوصول إلى مصفوفة خارج نطاقها. لا يتم التحقق من مؤشرات الإرجاع المعلقة أو تحرير الذاكرة بشكل خاطئ. يُشار إلى استخدام AddressSanitizer (-fsanitize=address) في المترجمات الحديثة باعتباره الطريقة الأساسية لاكتشاف مشاكل الذاكرة.

من حيث الأداء، تُعدّ البرامج المُجمّعة المكتوبة بلغة Solod أسرع عمومًا من برامج Go. على سبيل المثال، تُنفّذ الدوال من حزمة Byte أسرع بمقدار 1.5 مرة مع استهلاك مُماثل للذاكرة. وتُعدّ عمليات مُخزن البايت أسرع بمقدار 1.3 مرة للقراءة، وأسرع بمقدار 2-4 مرات للكتابة. في حزمة Map، يكون استرجاع مفاتيح الأعداد الصحيحة أسرع بمقدار 3.4 مرة، لكن تعديل المفاتيح أبطأ بمقدار 1.6 مرة. أما استرجاع مفاتيح السلاسل النصية فيُعادل أداء Go، لكن تعديلها أبطأ بمقدار 1.5 مرة. ويُعدّ تحليل وتنسيق الأعداد الصحيحة أسرع بمقدار مرتين، بينما يكون تحليل الأعداد العشرية أسرع بمقدار 2/1.2 مرة. وتُعدّ دوال السلاسل النصية أسرع بمقدار 1.3 مرة، بينما يكون إنشاء السلاسل النصية أسرع بمقدار 2-4 مرات مع انخفاض في استهلاك الذاكرة بنسبة 10-20%.

المصدر: opennet.ru

إضافة تعليق