إصدار لغة برمجة Python 3.11

بعد عام من التطوير ، تم نشر إصدار هام من لغة برمجة Python 3.11. سيتم دعم الفرع الجديد لمدة عام ونصف ، وبعد ذلك سيتم تشكيل تصحيحات به نقاط ضعف لمدة ثلاث سنوات ونصف أخرى.

في الوقت نفسه ، بدأ اختبار ألفا لفرع Python 3.12 (وفقًا لجدول التطوير الجديد ، يبدأ العمل في فرع جديد قبل خمسة أشهر من إصدار الفرع السابق ويصل إلى مرحلة اختبار ألفا بحلول وقت الإصدار التالي ). سيكون فرع Python 3.12 في إصدارات ألفا لمدة سبعة أشهر ، سيتم خلالها إضافة ميزات جديدة وإصلاح الأخطاء. بعد ذلك ، سيتم اختبار الإصدارات التجريبية لمدة ثلاثة أشهر ، سيتم خلالها حظر إضافة ميزات جديدة وسيتم إيلاء كل الاهتمام لإصلاح الأخطاء. في الشهرين الأخيرين قبل الإصدار ، سيكون الفرع في مرحلة إطلاق سراح المرشح ، حيث سيتم تنفيذ الاستقرار النهائي.

تشمل الإضافات الجديدة في Python 3.11 ما يلي:

  • تم القيام بعمل كبير لتحسين الأداء. يتضمن الفرع الجديد التغييرات المتعلقة بالتسريع والنشر المباشر لاستدعاءات الوظائف ، واستخدام المترجمين الفوريين للعمليات النموذجية (x + x ، x * x ، xx ، a [i] ، a [i] = z ، f ( arg) C (arg) و o.method () و o.attr = z و * seq) ، بالإضافة إلى التحسينات التي تم إعدادها بواسطة مشروعي Cinder و HotPy. اعتمادًا على نوع التحميل ، هناك زيادة في سرعة تنفيذ الكود بنسبة 10-60٪. في المتوسط ​​، زاد الأداء عند اجتياز مجموعة اختبار Pyperformance بنسبة 25٪.

    تمت إعادة تصميم آلية التخزين المؤقت للرمز الثانوي ، مما قلل من وقت بدء تشغيل المترجم الفوري بنسبة 10-15٪. يتم الآن تخصيص الكائنات التي تحتوي على رمز و bytecode بشكل ثابت بواسطة المترجم الفوري ، مما جعل من الممكن التخلص من مراحل إلغاء تنظيم الرمز الثانوي المستخرج من ذاكرة التخزين المؤقت وتحويل الكائنات برمز لوضعها في الذاكرة الديناميكية.

  • عند عرض تتبع المكالمات في رسائل التشخيص ، يتم توفير معلومات حول التعبير الذي تسبب في الخطأ (في السابق ، تم تمييز السطر فقط دون تفصيل أي جزء من الخط تسبب في حدوث الخطأ). يمكن أيضًا استرداد معلومات التتبع الموسعة عبر واجهة برمجة التطبيقات واستخدامها لتعيين تعليمات الرمز الثانوي الفردية إلى موضع محدد في التعليمات البرمجية المصدر باستخدام طريقة codeobject.co_positions () أو وظيفة PyCode_Addr2Location () C API. يعمل التغيير على تبسيط مشاكل تصحيح الأخطاء المرتبطة بكائنات القاموس المتداخلة واستدعاءات الوظائف المتعددة والتعبيرات الحسابية المعقدة إلى حد كبير. Traceback (آخر استدعاء): ملف "calculation.py" ، السطر 54 ، في النتيجة = (x / y / z) * (a / b / c) ~~~~~~ ^ ~~ ZeroDivisionError: القسمة على صفر
  • تمت إضافة دعم لمجموعات الاستثناءات ، مما يمنح البرنامج القدرة على إنشاء ومعالجة عدة استثناءات مختلفة في نفس الوقت. تم اقتراح أنواع جديدة من الاستثناءات ExceptionGroup و BaseExceptionGroup لتجميع العديد من الاستثناءات واستدعاءها المشترك ، ويتم إضافة التعبير "باستثناء *" إلى استثناءات منفصلة من مجموعة.
  • تمت إضافة طريقة add_note () إلى فئة BaseException ، مما يسمح لك بإرفاق ملاحظة نصية بالاستثناء ، على سبيل المثال ، لإضافة معلومات سياقية غير متوفرة في وقت طرح الاستثناء.
  • تمت إضافة نوع خاص ذاتي لتمثيل الفئة الخاصة الحالية. يمكن استخدام Self لإضافة تعليق توضيحي على الطرق التي ترجع مثيلاً لفئتها بطريقة أبسط من استخدام TypeVar. فئة MyLock: def __enter __ (ذاتي) -> Self: self.lock () العودة الذاتية
  • تمت إضافة نوع LiteralString خاص يمكن أن يتضمن فقط سلاسل حرفية متوافقة مع نوع LiteralString (على سبيل المثال ، السلاسل العارية والسلاسل من نوع LiteralString ، ولكن ليس سلاسل عشوائية أو مجمعة من نوع str). يمكن استخدام نوع LiteralString للحد من تمرير وسيطات السلسلة إلى الوظائف ، والاستبدال التعسفي لأجزاء من السلاسل التي يمكن أن تؤدي إلى نقاط ضعف ، على سبيل المثال ، عند إنشاء سلاسل لاستعلامات SQL أو أوامر shell. def run_query (sql: LiteralString) -> ... ... def caller (التعسفي_السلسلة: str، query_string: LiteralString، table_name: LiteralString،) -> لا شيء: run_query ("SELECT * FROM الطلاب") # ok run_query (literal_string) # ok run_query ("SELECT * FROM" + literal_string) # ok run_query (string_string) # خطأ run_query (# Error f "SELECT * FROM الطلاب WHERE name = {Optional_string}")
  • تمت إضافة نوع TypeVarTuple ، والذي يسمح باستخدام الأدوية المتغيرة ، على عكس TypeVar ، التي لا تغطي نوعًا واحدًا ، ولكن عددًا عشوائيًا من الأنواع.
  • تتضمن المكتبة القياسية وحدة tomllib مع وظائف لتحليل تنسيق TOML.
  • يتم توفير القدرة على تمييز العناصر الفردية من القواميس المكتوبة (TypedDict) بعلامتي Required و NotRequired لتحديد الحقول المطلوبة والاختيارية (بشكل افتراضي ، تكون جميع الحقول المعلنة مطلوبة إذا لم يتم تعيين المعلمة الإجمالية على False). class Movie (TypedDict): title: str year: NotRequired [int] m1: Movie = {"title": "Black Panther"، "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (حقل السنة اختياري) m3: Movie = {"year": 2022} # خطأ ، لم يتم ملء حقل العنوان المطلوب)
  • تمت إضافة فئة TaskGroup إلى الوحدة النمطية غير المتزامن مع تنفيذ مدير سياق غير متزامن ينتظر أن تكتمل مجموعة المهام. تتم إضافة المهام إلى مجموعة باستخدام طريقة create_task (). async def main (): async with asyncio.TaskGroup () as tg: task1 = tg.create_task (some_coro (…)) task2 = tg.create_task (another_coro (…)) print ("تم إكمال كلا المهمتين الآن.")
  • تمت إضافة فئة وطريقة ووظيفة مصممdataclass_transform ، عند تحديده ، يتعامل مدقق النوع الثابت مع الكائن كما لو كان يستخدم @ dataclasses.dataclass decorator. في المثال أدناه ، سيتم فحص فئة CustomerModel مثل فئة باستخدام @ dataclasses.dataclass decorator ، أي كوجود طريقة __init__ تسمح بمتغيرات المعرف والاسم. dataclass_transform () class ModelBase:… class CustomerModel (ModelBase): id: int name: str
  • تمت إضافة القدرة على استخدام التجميع الذري ((؟> ...)) والمحددات الكمية الغيرة (الملكية) (* +، ++،؟ +، {m، n} +) في التعبيرات العادية.
  • تمت إضافة خيار سطر الأوامر "-P" ومتغير بيئة PYTHONSAFEPATH لتعطيل الإرفاق التلقائي لمسارات الملفات التي يحتمل أن تكون غير آمنة إلى sys.path.
  • تحسين الأداة py.exe بشكل ملحوظ لمنصة Windows ، والتي تدعم الآن بناء الجملة "-V:". / " بالإضافة إلى "- . ".
  • تم تحويل العديد من وحدات الماكرو في C API إلى وظائف مضمنة عادية أو ثابتة.
  • تم إهمال الوحدات النمطية uu و cgi و pip و crypt و aifc و chunk و msilib و telnetlib و audioop و nis و sndhdr و imghdr و nntplib و spwd و xdrlib و cgitb و mailcap و ossaudiodev و sunau وستتم إزالتها في Python 3.13 الإصدار. تمت إزالة وظائف PyUnicode_Encode *.

المصدر: opennet.ru

إضافة تعليق