IT

لغة البرمجة Goose: كل ما ترغب في معرفته عن اللغة الجديدة التي تعد بالتفوق على C++ و Rust

لغة Goose هي لغة برمجة جديدة للأنظمة تخلو من الذاكرة الديناميكية (Heap)، ولا تستخدم جامع النفايات أو تعليقات توضيحية لمدى الحياة (Lifetimes). ويقول مطورها إنها تعمل بسرعة تزيد بأكثر من 3 أضعاف عن لغة C++ التقليدية. إليك كيفية عملها وما إذا كانت تستحق التجربة.

·3 دقائق قراءة
لغة البرمجة Goose: كل ما ترغب في معرفته عن اللغة الجديدة التي تعد بالتفوق على C++ و Rust

تُعد لغة البرمجة Goose واحدة من أكثر الموضوعات نقاشاً بين المطورين في الأسابيع الأخيرة. وقد ابتكرها (وتر فان أورتمرسن)، المبرمج المخضرم ومؤلف لغة Lobster. لغة Goose مفتوحة المصدر تحت رخصة Apache 2.0، والأكثر إثارة للاهتمام هو تصريح مؤلفها بأن المترجم (Compiler) تم إنتاجه بالكامل تقريبا باستخدام الذكاء الاصطناعي، انطلاقاً من مواصفات لغة صممها بشر.

الفكرة الأساسية: لا وجود للذاكرة الديناميكية (Heap)

في معظم اللغات، تعيش البيانات الديناميكية مثل المصفوفات والسلاسل النصية على الذاكرة الديناميكية (Heap) وتحتاج إلى جامع نفايات (مثل Java و Go)، أو حساب المراجع (مثل Swift)، أو قواعد مدى الحياة (مثل Rust) لإدارتها. لغة Goose لا تستخدم أيًا من هذه الطرق. وفقاً لوثائقها، تعيش كل قيمة ديناميكية على تكدسات بيانات (Data Stacks) يديرها المترجم.

  • كل تكدس عبارة عن حجز مساحة عنوان كبيرة (2 غيغابايت افتراضياً) مع مؤشر إزاحة بسيط (Bump Pointer).
  • قيمة واحدة فقط قابلة لتغيير الحجم تكون نشطة لكل تكدس في نفس الوقت، وهي دائماً في الأعلى.
  • تكبير المصفوفة يؤدي ببساطة إلى تقديم المؤشر للأمام دون نقل أي شيء.
  • تحرير الذاكرة عند خروج النطاق يتم عبر عملية تخزين واحدة.

يثبت المترجم هذه الذاكرة وقواعدها وقت الترجمة؛ بينما يتم تتبع مؤشرات الإزاحة وحدها وقت التشغيل.

كيف تعمل ميزات الأمان

كل مرجع له "جذر" ثابت (Root) — وهو المتغير الذي يحدد مدى حياته. يستنتج المترجم الجذور من تلقاء نفسه ويرفض المراجع التي قد تعيش لفترة أطول من مالكها. وخلافاً للغة Rust، لا يكتب المبرمجون أي تعليقات توضيحية لمدى الحياة (Lifetime annotations)، كما لا يوجد قسم غير آمن (Unsafe).

لمحة عن البنية النحوية

تتميز Goose ببنية نحوية مدمجة تشبه لغة C. يتم التصريح عن هيكل (Struct) يحتوي على بيانات ذات حجم متغير على النحو التالي: struct Item { sku: u8[varint], qty: varint, cents: varint }. وهناك ثلاثة أنواع من المصفوفات: ثابتة الحجم، وقابلة للنمو فقط، وقابلة للنمو والتقلص.

السرعة: أرقام المطور

نشر المطور نتائج عبر 16 اختبار أداء (المتوسط الهندسي). ووفقاً له، فإن لغة Goose:

  • أسرع بحوالي 3.3 إلى 3.5 مرة من لغة C++ القياسية.
  • أسرع بـ 1.16 إلى 1.26 مرة من لغة C++ المحسنة يدويًا.
  • أسرع بـ 1.12 إلى 1.19 مرة من أفضل لغة Rust الآمنة.
  • تستهلك ذاكرة أقل بـ 1.2 إلى 1.9 مرة.

على سبيل المثال، يستغرق سجل الطلب 29 بايت وصفر تخصيصات في لغة Goose، مقابل 160 بايت وتخصيص واحد في C++، و153 بايت وأربعة تخصيصات في Rust. ضع في اعتبارك أن هذه اختبارات أداء خاصة بالمطور نفسه، وما زالت التحقيقات المستقلة محدودة.

القيود

  • لا يمكن للدوال التكرارية (Recursive) الاحتفاظ ببيانات قابلة للنمو عبر استدعاء تكراري.
  • لا توجد عمليات إغلاق هاربة (Escaping closures) أو مؤشرات دالة.
  • تعتمد على تجميع البرنامج ككل فقط (Whole-program compilation).
  • نظام بيئي للمكتبات لا يزال صغيرًا جداً.

كيف تجرّبها

تتوفر مترجمات جاهزة لأنظمة Windows x64 و Linux x64 و macOS (أجهزة Apple Silicon و Intel). تُترجم Goose إلى ملف C واحد، لذا فهي تعمل في أي مكان يعمل فيه مترجم C. قم بتنزيل إصدار من صفحة aardappel/goose على GitHub، وأضف المجلد إلى مسار النظام (PATH) وقم بتشغيل عينة باستخدام أمر goose samples/01_tour.goose. يتضمن الأرشيف ملحقاً لبيئة VS Code.

الخلاصة

لغة Goose هي تجربة رائعة ذات نهج جديد حقاً في إدارة الذاكرة. يجب على مبرمجي الأنظمة المهتمين بالأداء متابعتها وتجربتها. لكن اللغة جديدة: للاستخدام الإنتاجي، من الحكمة انتظار اختبارات أداء مستقلة ونظام بيئي أكبر.

المصدر: Goose (aardappel)

مقالات ذات صلة