بيرل 5.30 صدر

أمس ، 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" يمكن أن تظهر أيضًا زيادة في الأداء ، لكن في ظل ظروف معينة).

Source: https://habr.com/ru/post/ar453340/


All Articles