
جولة تفاعلية في Go 1.27: طرق عامة وتوقيعات ما بعد الكم
نشرت VictoriaMetrics جولة عملية في Go 1.27: العنوان الأبرز هو الطرق العامة، إلى جانب تخصيص ذاكرة متخصص بالحجم، وتشفير ML-DSA، وحزمة uuid، وJSON v2 افتراضياً.
يقترب موعد إصدار Go 1.27، ونشرت VictoriaMetrics جولة تفاعلية في التغييرات، مع أمثلة قابلة للتشغيل لكل ميزة. المقال، بقلم خيسوس إسبينو وبتاريخ 31 يوليو، يواصل سلسلة بدأها أنطون جيجانوف، الذي كتب جولة لكل إصدار من Go 1.22 حتى Go 1.26 وقرر التوقف؛ وتقول VictoriaMetrics إنها تكمل المسيرة. تستند الجولة إلى ملاحظات الإصدار الرسمية وإلى شيفرة Go، وتشير إلى أن نحو 1600 إيداع دخلت بين Go 1.26 وGo 1.27.
الطرق العامة تتصدر الإصدار
التغيير الأبرز يطال نظام الأنواع: يمكن لإعلان الدالة الآن أن يعلن معاملات نوع خاصة به، مستقلة عن المستقبِل، بحيث يمكن للعملية العامة على نوع ما أن تعيش كطريقة لهذا النوع بدل أن تكون دالة على مستوى الحزمة. في مثال الجولة، تتلقى حاوية Box طريقة Map تحوّل صندوق int إلى صندوق string. ويبقى قيد واحد: لا تزال الواجهات عاجزة عن إعلان طرق بمعاملات نوع، ولا يمكن استخدام طريقة عامة لتلبية واجهة. ويأتي مع ذلك تحسينان أصغرا في سهولة الاستخدام: يمكن أن يكون المفتاح في حرف البنية الآن أي مُحدِّد حقل صالح — أي تعيين حقل مُرقّى من بنية مُدمجة مباشرةً — كما وُسِّع استنتاج نوع الدوال ليشمل التحويلات والحروف المركّبة.
الأداء: تخصيص الذاكرة وSIMD والمترجم
يولّد المترجم الآن استدعاءات لإجراءات تخصيص ذاكرة متخصصة بالحجم، ما يقلل كلفة التخصيصات الصغيرة (أقل من 80 بايت) بنسبة تصل إلى 30%. ويُتوقع أن تبلغ المكسب الإجمالي نحو 1% في البرامج كثيفة التخصيص، مقابل زيادة تقارب 60 كيلوبايت في حجم الملف الثنائي، ويمكن تعطيل ذلك بعلم GOEXPERIMENT. وتعرض حزمة SIMD التجريبية المحمولة (GOEXPERIMENT=simd) أنواعاً مستقلة عن عرض المتجه، والمكتبة القياسية مستخدمة لها بالفعل: إذ أعادت بنية map القائمة على Swiss Table تنفيذ دوال التجزئة على أساس تعليمات simd. وثمة ثلاث تحسينات جديدة للمترجم مفعّلة افتراضياً، منها ترجمة switch إلى جداول بحث ونقل الحسابات الثابتة خارج الحلقات.
الأمن والمكتبة القياسية
تصل التوقيعات المقاومة للحوسبة الكمومية في صورة crypto/mldsa: تطبيق ML-DSA وفق مواصفة FIPS 204 بثلاث مجموعات معاملات، ويمتد إلى crypto/x509 وإلى مخططات التوقيع في TLS 1.3. وتكسب المكتبة القياسية حزمة uuid وفق RFC 9562، حيث تولّد NewV7 قيماً مرتبة زمنياً تناسب مفاتيح قواعد البيانات. ويخرج encoding/json/v2 الذي طال انتظاره من مرحلة التجربة: فهو متاح دون علم بناء، بينما يستند encoding/json الكلاسيكي الآن في العمق إلى تنفيذ v2، مع إمكانية استعادة السلوك القديم عبر GOEXPERIMENT؛ ومن الفروق الجديرة بالمعرفة أن v2 لا يرتب مفاتيح الخرائط افتراضياً. وتكسب strings وbytes الدالة CutLast، وترتفع دعم يونيكود من الإصدار 15 إلى 17.
الأدوات وعمل أقل ظهوراً
من تغييرات الأدوات: يشغّل go test الآن فحص stdversion vet افتراضياً، ويمكن لـ go doc جلب توثيق إصدار معيّن من وحدة ما، ويكسب go fix أدوات تحديث جديدة. وتسلط الجولة الضوء أيضاً على عمل يسهل تفويته: فـ HTTP/2 صار أخيراً حزمة حقيقية لا ملفاً مولّداً من 12,226 سطراً؛ وهيكل HTTP/3 وصل بصيغة غير مُصدَّرة؛ وأعاد الرابط تنظيم بيانات الأنواع الوصفية بما قد يؤثر في مكتبات تصل إلى reflect.typelinks؛ وأصبح استخدام //go:linkname غير المصرّح به أصعب. ويصف المؤلفان Go 1.27 بإصدار قوي وتذكير بأن وتيرة Go المقصودة الهادئة ما زالت تقدّم الكثير في كل دورة.
SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي
نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.