أمس ، 23 مايو ، تم إصدار بيرل 5.30.0. تم الإعلان عن الخبر بواسطة perl.perl5.porters Usenet باعتبارها واحدة من المطورين الرئيسيين في Perl ، Sawyer X.
مقارنةً بالإصدار المستقر السابق ، 5.28.0 ، الذي تم إصداره منذ حوالي 11 شهرًا ، تم تغيير حوالي 620،000 سطر من التعليمات البرمجية ، والتغييرات أثرت على 1300 ملف ، شارك 58 مؤلفًا في التطوير. تُقدر التغييرات التي تم إجراؤها على الكود المصدري نفسه (فقط ملفات .pm و .t و .c و .h) بنحو 510،000 سطر و 750 ملف.
تطوير الفرع التالي 5.31 مفتوح. ومن المقرر أن الإصدار المستقر المقبل مايو 2020.
التغييرات الرئيسية:
- لم تعد دالات Perl API C sv_utf8_downgrade و sv_utf8_decode تجريبية.
- دعم تجريبي تم تنفيذه لتعبيرات lookbehind ذات الطول المتغير ، على سبيل المثال "(؟ <= Foo؟)" و "(؟؟! Ba {1،9} r)" (أدت إلى حدوث خطأ سابقًا)
- تمت زيادة الحد الأقصى لقيمة محدد الحجم ("n") في الكتل "{m، n}" من التعبيرات العادية من 32767 إلى 65534.
- دعم يونيكود 12.1.
- تمت إضافة دعم أحرف البدل المحدود إلى مواصفات قيمة خاصية Unicode (لا أعرف كيفية الترجمة بشكل صحيح). على سبيل المثال ، التعبير "qr! \ P {nv = / (؟ X) \ A [0-5] \ z /}!" يسمح لك بتحديد جميع أحرف Unicode التي تحدد الأرقام من 0 إلى 5 ، بما في ذلك الأرقام التايلاندية أو البنغالية.
- تم تنفيذ دعم qr '\ N {name}' (الأحرف المسماة داخل التعبيرات العادية التي تقتصر على علامات الاقتباس المفردة ؛ أدت إعادة الاسترجاع السابقة إلى حدوث خطأ).
- يمكنك الآن ترجمة Perl باستخدام عمليات آمنة لسلسلة العمليات فقط مع لغات (-Accflags = '- DUSE_THREAD_SAFE_LOCALE').
- يؤدي الجمع بين الإشارات "-Dv" (إخراج التصحيح الموسعة) و "-Dr" (تصحيح التعبيرات العادية) الآن إلى تضمين كافة أوضاع التصحيح المحتملة التعبيرات العادية.
- Pack () يضيف حماية ضد إرجاع تسلسل Unicode غير صالح.
إزالة الميزة والتغييرات غير المتوافقة:
- يؤدي تعيين قيمة غير صفرية إلى المتغير الخاص $ [ (فهرس العنصر الأول من الصفيف) الآن إلى خطأ فادح.
- كما فواصل من الخطوط والأنماط ، ويسمح الآن فقط العنب . (أحرف مركب Unicode محظورة).
- تم الآن حظر بعض الطرق المتقادمة مسبقًا لاستخدام القوس الأيسر غير المنقطع "{" في أنماط regex.
- استدعاء sysread () أو syswrite () أو send () أو recv () أثناء معالجة المقبض: utf8 هو الآن خطأ فادح.
- يُمنع استخدام كلمة "my" في عبارات شرطية خاطئة مماثلة (على سبيل المثال ، "my $ x if 0").
- تمت إزالة الدعم للمتغير الخاص $ * (بحث متعدد الخطوط). البدائل الصحيحة هي "/ s" و "/ m".
- تمت إزالة الدعم للمتغير الخاص $ # (الإخراج المنسق للأرقام).
- يجب أن يكون اسم الوظيفة dump () مؤهلًا بشكل صريح (CORE :: dump).
- إزالة الوظيفة File :: Glob :: glob (تحتاج إلى استخدام File :: Glob :: bsd_glob).
- تم التخطيط لإيقاف دعم استخدام وحدات الماكرو التي تنفذ عمليات باستخدام UTF-8 في رمز XS (الكتل C) ، ولكن بعد ذلك تقرر تأجيله إلى الإصدار 5.32.
تحسينات الأداء:
- يتم الآن ترجمة UTF-8 إلى نقاط رمز (لا أعرف كيفية الترجمة) كجهاز دولة ، مما يؤدي أيضًا إلى زيادة الأداء - على سبيل المثال ، يتطلب ord ("\ x7fff") الآن إرشادات أقل بنسبة 12٪. يتم أيضًا التحقق من صحة تسلسل الأحرف UTF-8 كجهاز دولة وأسرع.
- مكالمات متكررة إزالتها من finalize_op ().
- تم إجراء تحسينات ثانوية على الكود الخاص بطي الأحرف المتماثلة وتعريف فئات الأحرف في التعبيرات العادية.
- تم تحسين تحويلات معرفات الأنواع الموقعة إلى غير الموقعة (IV إلى UV).
- يتم تسريع الخوارزمية لتحويل الأعداد الصحيحة إلى سلاسل عن طريق معالجة رقمين بدلاً من رقم واحد في كل مرة.
- تحسين بواسطة تحليل LGTM.
- رمز مُحسن في ملفات regcomp.c و regcomp.h و regexec.c.
- يتم تسريع مطابقة التعبيرات العادية للنموذج "qr / [^ a] /" بشكل كبير للحالات التي يكون فيها "a" عبارة عن حرف ASCII (الحالات ASCII "a" يمكن أن تظهر أيضًا زيادة في الأداء ، لكن في ظل ظروف معينة).