Python 3.9 پروگرامنگ لینگویج کی ریلیز

ترقی کے ایک سال بعد پیش کیا اہم پروگرامنگ زبان کی رہائی ازگر 3.9. Python 3.9 اس کے بعد پہلی ریلیز تھی۔ منتقلی پروجیکٹ آن نیا سائیکل تیاری اور ریلیز کی حمایت. نئے بڑے ریلیز اب سال میں ایک بار بنائے جائیں گے، اور اصلاحی اپ ڈیٹ ہر دو ماہ بعد جاری کیے جائیں گے۔ ہر اہم شاخ کو ڈیڑھ سال کے لیے سپورٹ کیا جائے گا، اس کے بعد مزید ساڑھے تین سال اس کے لیے کمزوریوں کو دور کرنے کے لیے تیار کیے جائیں گے۔

اب نئی برانچ پر کام اگلی برانچ کے اجراء سے پانچ ماہ قبل شروع ہو جاتا ہے، یعنی Python 3.9 کی رہائی کے ساتھ موافق شروع ہوا Python 3.10 برانچ کی الفا ٹیسٹنگ۔ Python 3.10 برانچ سات مہینوں تک الفا ریلیز میں رہے گی، جس کے دوران نئے فیچرز شامل کیے جائیں گے اور کیڑے ٹھیک کیے جائیں گے۔ اس کے بعد بیٹا ورژنز کو تین ماہ تک ٹیسٹ کیا جائے گا، جس کے دوران نئے فیچرز شامل کرنے پر پابندی ہوگی اور تمام تر توجہ بگس کو ٹھیک کرنے پر دی جائے گی۔ رہائی سے پہلے آخری دو ماہ، برانچ ریلیز امیدوار کے مرحلے پر ہو گی، جس میں حتمی استحکام کو انجام دیا جائے گا۔

کے علاوہ شامل کیا بدعات ازگر 3.9 میں:

  • بلٹ ان ڈکٹ کلاس کا استعمال کرتے ہوئے تعریف کردہ لغات میں، نمودار ہوا انضمام آپریٹرز کے لیے سپورٹ "|" اور "|=" اپ ڈیٹس، جو لغات کو ضم کرنے کے لیے پہلے تجویز کردہ {**d1، **d2} اور dict.update طریقوں کی تکمیل کرتے ہیں۔

    >>> x = {"key1": "value1 from x", "key2": "value2 from x"}
    >>> y = {"key2": "value2 from y", "key3": "value3 from y"}

    >>> x | y
    {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}

    >>> y | ایکس
    {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

  • اقسام کے بلٹ ان مجموعہ میں فہرست، ڈکٹ اور ٹیپل شامل ہیں، جنہیں ٹائپنگ ماڈیول سے درآمد کیے بغیر بنیادی اقسام کے طور پر استعمال کیا جا سکتا ہے۔ وہ. typing.list، typing.Dict اور typing.Tuple کے بجائے اب آپ وضاحت کر سکتے ہیں
    صرف فہرست، ڈکٹ اور ٹیپل:

    def greet_all(نام: فہرست[str]) -> کوئی نہیں:
    ناموں میں نام کے لیے:
    پرنٹ ("ہیلو"، نام)

  • فراہم کی جاتی ہیں فنکشنز اور متغیرات کی تشریح کے لیے لچکدار ٹولز۔ تشریحات کو منسلک کرنے کے لیے، ٹائپنگ ماڈیول میں ایک نئی تشریح شدہ قسم شامل کی گئی ہے، جس میں موجودہ اقسام کو اضافی میٹا ڈیٹا کے ساتھ بڑھایا گیا ہے جو کہ جامد تجزیہ یا رن ٹائم آپٹیمائزیشن کے لیے استعمال کیا جا سکتا ہے۔ کوڈ سے میٹا ڈیٹا تک رسائی کے لیے، include_extras پیرامیٹر کو typing.get_type_hints() طریقہ میں شامل کیا گیا ہے۔

    charType = Annotated[int, ctype("char")] UnsignedShort = Annotated[int, struct2.ctype('H')]

  • نیچے ٹونڈ ڈیکوریٹرز کے لیے گراماتی تقاضے - اگر اور اس وقت بلاکس میں استعمال کے لیے موزوں کوئی بھی اظہار اب بطور ڈیکوریٹر استعمال کیا جا سکتا ہے۔ تبدیلی نے PyQt5 کوڈ کی پڑھنے کی اہلیت کو نمایاں طور پر بہتر کیا اور اس ماڈیول کی دیکھ بھال کو آسان بنایا:

    تھا:
    button_0 = بٹن[0] @button_0.clicked.connect

    اب آپ لکھ سکتے ہیں:
    @buttons[0].clicked.connect

  • معیاری لائبریری تک شامل کیا ماڈیول زوننفوجس میں IANA ٹائم زون ڈیٹا بیس سے معلومات شامل ہیں۔

    >>> زون انفو سے زون انفو درآمد کریں۔
    >>> ڈیٹ ٹائم درآمد سے ڈیٹ ٹائم، ٹائم ڈیلٹا
    >>> # گرمیوں کا وقت
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> پرنٹ (ڈی ٹی)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # معیاری وقت
    >>> dt += ٹائم ڈیلٹا (دن=7)
    >>> پرنٹ (ڈی ٹی)
    2020-11-07 12:00:00-08:00

    >>> پرنٹ(dt.tzname())
    PST

  • graphlib ماڈیول شامل کیا گیا ہے، جس میں لاگو کیا گراف کی ٹاپولوجیکل چھانٹنے کے لئے معاونت۔
  • مجوزہ سابقے اور لائن کے اختتام کو ہٹانے کے نئے طریقے - str.removeprefix(prefix) اور str.removesuffix(suffix)۔ str، bytes، bytearray اور collections.UserString آبجیکٹ میں طریقے شامل کیے گئے ہیں۔

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'بار'

  • ملوث نیا تجزیہ کار پت (Parsing Expression Grammar)، جس نے تجزیہ کار کی جگہ لے لی LL(1). نئے پارسر کے استعمال نے LL(1) میں پابندیوں کو نظرانداز کرنے کے لیے استعمال ہونے والے کچھ "ہیکس" سے چھٹکارا حاصل کرنا ممکن بنایا، اور پارسر کو برقرار رکھنے کے لیے لیبر کے اخراجات کو نمایاں طور پر کم کیا۔ کارکردگی کے لحاظ سے، نیا پارسر تقریباً پچھلے والی سطح پر ہے، لیکن لچک کے لحاظ سے اس سے کافی آگے ہے، جو آپ کو زبان کی نئی خصوصیات کو ڈیزائن کرتے وقت زیادہ آزاد محسوس کرنے کی اجازت دیتا ہے۔ پرانے پارسر کوڈ کو ابھی کے لیے برقرار رکھا گیا ہے اور اسے "-X oldparser" پرچم یا "PYTHONOLDPARSER=1" ماحولیاتی متغیر کا استعمال کرتے ہوئے واپس کیا جا سکتا ہے، لیکن اسے ریلیز 3.10 میں ہٹا دیا جائے گا۔
  • فراہم کی ماڈیولز کی حالت تک رسائی حاصل کرنے کے لیے C ایکسٹینشن کے طریقوں کی اہلیت جس میں PyState_FindModule فنکشن کا استعمال کرتے ہوئے ماڈیول حالت کو تلاش کرنے کے بجائے براہ راست پوائنٹر ڈیریفرنس کا استعمال کرتے ہوئے ان کی وضاحت کی گئی ہے۔ تبدیلی آپ کو ماڈیول کی حالت کو چیک کرنے کے اوور ہیڈ کو کم یا مکمل طور پر ختم کرکے C ماڈیولز کی کارکردگی کو بڑھانے کی اجازت دیتی ہے۔ ماڈیول کو کلاس کے ساتھ منسلک کرنے کے لیے، C-function PyType_FromModuleAndSpec() تجویز کیا جاتا ہے، ماڈیول اور اس کی حالت حاصل کرنے کے لیے، C-functions PyType_GetModule() اور PyType_GetModuleState() تجویز کیا جاتا ہے، اور کلاس کو ایک طریقہ فراہم کرنے کے لیے۔ جس میں اس کی تعریف کی گئی ہے، C-function PyCMethod اور METH_METHOD پرچم تجویز کیا گیا ہے۔
  • کوڑا اکٹھا کرنے والا پہنچایا دوبارہ متحرک اشیاء پر مشتمل مجموعوں کو لاک کرنے سے جو فائنلائزر کے چلنے کے بعد بیرونی طور پر قابل رسائی رہتے ہیں۔
  • شامل کردہ طریقہ os.pidfd_open، جو لینکس کرنل سب سسٹم "pidfd" کو PID کے دوبارہ استعمال کی صورت حال کو سنبھالنے کے لیے استعمال کرنے کی اجازت دیتا ہے (pidfd ایک مخصوص عمل سے منسلک ہوتا ہے اور تبدیل نہیں ہوتا ہے، جبکہ PID اس PID سے وابستہ موجودہ عمل کے ختم ہونے کے بعد کسی دوسرے عمل سے منسلک ہو سکتا ہے۔ )۔
  • یونیکوڈ تفصیلات کے لیے سپورٹ کو ورژن 13.0.0 میں اپ ڈیٹ کر دیا گیا ہے۔
  • ختم کر دیا یاداشت کا ضیاء اسی عمل میں ازگر مترجم کو دوبارہ شروع کرتے وقت۔
  • بلٹ ان اقسام کی حد، ٹوپل، سیٹ، منجمد، فہرست اور ڈکٹ کی کارکردگی کو بہتر بنایا گیا ہے۔ لاگو کیا C زبان میں لکھی گئی اشیاء تک تیزی سے رسائی کے لیے Vectorcall شارٹ کٹ پروٹوکول کے استعمال کے ذریعے۔
  • _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time اور _weakref ماڈیولز کو لوڈنگ میں منتقل کر دیا گیا ہے کئی مراحل میں آغاز.
  • معیاری لائبریری ماڈیول آڈیو اوپ، ast، grp، _hashlib، pwd، _posixsubprocess، random، سلیکٹ، struct، termios اور zlib کو محدود استعمال میں تبدیل کر دیا گیا ہے۔ مستحکم ABI، جو ازگر کے مختلف ورژنز کے لیے ایکسٹینشن ماڈیولز کی اسمبلیوں کی آپریبلٹی کے مسئلے کو حل کرتا ہے (ورژن کو اپ ڈیٹ کرتے وقت، ایکسٹینشن ماڈیولز کو دوبارہ بنانے کی ضرورت نہیں ہے، اور 3.9 کے لیے مرتب کردہ ماڈیولز 3.10 برانچ میں کام کر سکیں گے)۔
  • asyncio ماڈیول نے ممکنہ حفاظتی مسائل کی وجہ سے reuse_address پیرامیٹر کے لیے سپورٹ کو فرسودہ کر دیا ہے (Linux پر UDP کے لیے SO_REUSEADDR کا استعمال مختلف عملوں کو UDP پورٹ سے سننے کے ساکٹ منسلک کرنے کی اجازت دیتا ہے)۔
  • نئی اصلاحیں شامل کی گئی ہیں، مثال کے طور پر، ملٹی تھریڈ ایپلی کیشنز میں سگنل ہینڈلرز کی بہتر کارکردگی، فری بی ایس ڈی ماحول میں سب پروسیس ماڈیول کی رفتار میں اضافہ، اور عارضی متغیرات کی تیز تر تفویض (اظہار میں ایک متغیر تفویض کرنا y کے لیے [expr in] ]" اب اتنا ہی پرفارمنس ہے جتنا کہ "y = expr"")۔ عام طور پر، سب سے زیادہ ٹیسٹ دکھائیں برانچ 3.8 کے مقابلے کارکردگی میں کمی (اسپیڈ اپ صرف رائٹ_لوکل اور رائٹ_ڈیک ٹیسٹ میں دیکھا جاتا ہے):

    ازگر ورژن 3.4 3.5 3.6 3.7 3.8 3.9
    ———————————

    متغیر اور انتساب پڑھنے کی رسائی:
    پڑھیں_مقامی 7.1 7.1 5.4 5.1 3.9 4.0
    پڑھیں_غیر مقامی 7.1 8.1 5.8 5.4 4.4 4.8
    پڑھیں_عالمی 15.5 19.0 14.3 13.6 7.6 7.7
    ریڈ_بلٹن 21.1 21.6 18.5 19.0 7.5 7.7
    پڑھیں_کلاسوار_سے_کلاس 25.6 26.5 20.7 19.5 18.4 18.6
    پڑھیں_کلاسوار_سے_مثال 22.8 23.5 18.8 17.1 16.4 20.1
    read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    پڑھنے کا_باؤنڈ طریقہ 37.6 37.9 29.6 26.9 27.7 45.9

    متغیر اور انتساب تحریری رسائی:
    تحریر_مقامی 8.7 9.3 5.5 5.3 4.3 4.2
    غیر مقامی لکھیں 10.5 11.1 5.6 5.5 4.7 4.9
    تحریر_عالمی 19.7 21.2 18.0 18.0 15.8 17.2
    write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    44.6 45.8 40.0 38.9 35.5 40.7 لکھیں
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    ڈیٹا ڈھانچہ پڑھنے تک رسائی:
    پڑھنے کی_ فہرست 24.2 24.5 20.8 20.8 19.0 21.1
    Read_deque 24.7 25.5 20.2 20.6 19.8 21.6
    پڑھیں_ڈکٹ 24.3 25.7 22.3 23.0 21.0 22.5
    Read_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    ڈیٹا ڈھانچہ تحریری رسائی:
    تحریر_لسٹ 27.1 28.5 22.5 21.6 20.0 21.6
    write_deque 28.7 30.1 22.7 21.8 23.5 23.2
    تحریر_ڈکٹ 31.4 33.3 29.3 29.2 24.7 27.8
    write_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    اسٹیک (یا قطار) آپریشنز:
    list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
    deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
    deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5

    ٹائمنگ لوپ:
    لوپ_اوور ہیڈ 0.5 0.6 0.4 0.3 0.3 0.3

  • حذف کر دیا گیا۔ بہت سے Python 2.7 فنکشنز اور طریقے جو پہلے فرسودہ تھے اور پچھلی ریلیز میں DeprecationWarning کے نتیجے میں، بشمول html.parser.HTMLParser میں unescape() طریقہ،
    tostring() اور fromstring() array.array میں، isAlive() threading.Thread میں، getchildren() اور getiterator() ElementTree میں، sys.getcheckinterval()، sys.setcheckinterval()، asyncio.Task.current_task()، asyncio.Task.all_tasks(), base64.encodestring() اور base64.decodestring()۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں