پایتون 3.13 بهتازگی منتشر شده است. این مقاله مروری بر مهمترین ویژگیهای جدید پایتون 3.13 و معنای آنها برای توسعهدهندگان پایتون ارائه میدهد.
ویژگیهای جدید اصلی در پایتون ۳.۱۳
در اینجا مروری بر بزرگترین ویژگیهای جدید پایتون 3.13 داریم:
- کامپایلر JIT آزمایشی
- نسخه بدون GIL از پایتون
- یک REPL جدید
- پیامهای خطای بهبودیافته
- بهبودهای تایپ در پایتون
- حذف ماژولهای غیرضروری
کامپایلر JIT آزمایشی
پایتون 3.11 مفسر تطبیقی تخصصی (Specializing Adaptive Interpreter) را معرفی کرد. زمانی که مفسر تشخیص دهد برخی عملیات بهطور قابل پیشبینی از یک نوع مشخص استفاده میکنند، این عملیات “تخصصی” میشوند. در این حالت، بایتکد عمومی برای آن کد با بایتکدی که مخصوص آن نوع است جایگزین میشود، که منجر به افزایش سرعت 10 تا 25 درصدی در بخشهایی از کد میشود.
پایتون 3.12 تخصصیسازیهای بیشتر و بهینهسازیهای دیگری به مفسر اضافه کرد. اکنون، پایتون ۳.۱۳ عناصری جدید به JIT افزوده است که به جای بایتکد تخصصی، کد ماشین واقعی را در زمان اجرا تولید میکند. افزایش سرعت حاصل از این تغییر در حال حاضر زیاد نیست—شاید حدود 5 درصد—اما راه را برای بهینهسازیهای آینده که قبلاً ممکن نبودند هموار میکند.
در حال حاضر، JIT بهعنوان یک ویژگی آزمایشی در نظر گرفته میشود—بهطور پیشفرض فعال نیست و فقط با کامپایل کردن CPython از سورس با پرچمهای خاص قابل فعالسازی است. اگر در آینده این ویژگی افزایش عملکرد قابل توجهی (حداقل 5 درصد یا بیشتر) ارائه دهد و بار مدیریتی زیادی بر تیم CPython یا کاربران پایتون بهطور کلی تحمیل نکند، بهعنوان یک گزینه کاملاً پشتیبانیشده ارائه خواهد شد. اینکه آیا این ویژگی در نسخههای رسمی فعال خواهد شد یا خیر، همچنان به مدیران بیلد CPython برای هر پلتفرم بستگی دارد.
چرخه انتشار پایتون
زبان برنامهنویسی پایتون نسخههای جدید خود را بهصورت سالانه منتشر میکند، با یک نسخه بتای قفلشده از نظر ویژگیها در نیمه اول سال و نسخه نهایی در اواخر سال. به توسعهدهندگان توصیه میشود این نسخه جدید را روی کدهای غیرتولیدی امتحان کنند، هم برای اطمینان از سازگاری آن با برنامههای خود و هم برای بررسی اینکه آیا کد آنها از مجموعه ویژگیها و بهبودهای عملکرد در این نسخه جدید بهرهمند خواهد شد یا خیر.
نسخه بدون GIL «چندریسمانی آزاد» از پایتون
اصطلاح رسمی برای نسخههای احتمالی آینده CPython که بدون قفل مفسر جهانی (GIL) هستند، «CPython چندریسمانی آزاد» (free-threaded CPython) است. این نسخه از CPython اجازه میدهد ریسمانها بهصورت کامل و موازی اجرا شوند، بدون نیاز به مدیریت توسط GIL. به این ترتیب، کارهایی که از نظر پردازنده سنگین هستند و پیشتر فقط با اجرای چندین فرایند بهرهمند میشدند، اکنون میتوانند در چند ریسمان اجرا شوند.
نسخه چندریسمانی آزاد CPython نیز آزمایشی است. این ویژگی بهصورت پیشفرض در نسخههای ارائهشده فعال نیست و باید هنگام کامپایل فعال شود. اگر تحقیقات آینده نشان دهند که این نسخه میتواند عملکرد چندریسمانی را بدون تأثیر منفی بر عملکرد تکریسمانی بهبود بخشد، بهعنوان یک گزینه کاملاً پشتیبانیشده معرفی خواهد شد. در طول زمان، ممکن است این نسخه به گزینه پیشفرض CPython تبدیل شود.
یک REPL جدید
REPL یا مفسر تعاملی، زمانی اجرا میشود که پایتون را از خط فرمان بدون اجرای یک برنامه راهاندازی کنید. REPL در پایتون ۳.۱۳ بهبودهایی داشته است تا کمتر خشک و سخت به نظر برسد و بیشتر شبیه یک ویرایشگر واقعی عمل کند:
- خروجی کنسول بهصورت پیشفرض دارای رنگ است. این ویژگی، برای مثال، پیامهای خطای غنیتری ارائه میدهد.
- میتوانید با فشار دادن کلید F1 مرورگر راهنمای تعاملی
pydoc
را باز کنید. - با F2 میتوانید تاریخچه دستورات خط فرمان را مرور کنید.
- با فشار دادن F3 و فعال کردن حالت خاص بلوکچسبانی (block-paste mode)، میتوانید بلوکهای بزرگ کد را راحتتر جایگذاری کنید.
- برای خروج از REPL، بهجای
exit()
یاquit()
، میتوانید بهسادگیexit
یاquit
تایپ کنید.
توجه داشته باشید که این بهبودها در حال حاضر فقط در سیستمعاملهای لینوکس و macOS در دسترس هستند و در سیستمعامل Microsoft Windows حتی هنگام استفاده از میزبان کنسول جدید Windows Terminal نیز در دسترس نیستند.
پیامهای خطای بهبودیافته
پیامهای خطای پایتون در دو نسخه اخیر دقیقتر و جزئیتر شدهاند. پایتون ۳.۱۳ این روند را ادامه میدهد.
- اگر سعی کنید چیزی را وارد کنید (import) که نام آن با نام ماژول فعلی در کانتکست یکسان است، پایتون خطایی دقیق در این مورد ارائه میدهد و شما را تشویق میکند که نام ماژول فعلی را تغییر دهید. این یک منبع بسیار رایج از خطاها است—و نه فقط برای مبتدیان. اشتباه نامگذاری ماژولها با چیزی از کتابخانه استاندارد، یک اشتباه متداول است.
- اگر به یک تابع آرگومان کلیدی نادرستی بدهید، پیام خطا تعدادی آرگومان صحیح ممکن را بر اساس آرگومانهای موجود در تابع مورد نظر پیشنهاد میدهد.
- در صورت پشتیبانی، پیامهای خطا اکنون از رنگ در Tracebackها استفاده میکنند تا خواندن آنها آسانتر شود.
بهبودهای تایپ در پایتون
سیستم تایپگذاری در پایتون با هر نسخه جدید گسترش یافته و کاربردیتر شده است. نسخه ۳.۱۳ سه تغییر بزرگ جدید به آن اضافه میکند.
پارامترهای تایپ از پیشفرضها پشتیبانی میکنند
اکنون typing.TypeVar
، typing.ParamSpec
و typing.TypeVarTuple
به شما اجازه میدهند پیشفرضهایی تعریف کنید که در صورت مشخص نشدن یک تایپ صریحاً استفاده شوند. به عنوان مثال:
T = TypeVar("T", default=str)
در مواردی که T بهطور صریح تعریف نشده باشد، مقدار پیشفرض بهعنوان str
در نظر گرفته میشود.
typing.TypeIs
برای محدودسازی تایپ
در پایتون بهطور کلی میتوانیم از isinstance()
برای تصمیمگیری بر اساس اینکه چیزی از یک نوع خاص هست یا نه استفاده کنیم. typing.TypeIs
امکان انجام این کار را در مکانیزمهای تایپگذاری پایتون فراهم میکند. به این ترتیب، توابعی که برای بررسی اینکه چیزی از یک نوع خاص هست یا نه استفاده میشوند، میتوانند طوری توضیح داده شوند که نشان دهند این رفتار محدودسازی تایپ را انجام میدهند، نه فقط نوع بازگشتی. این ویژگی برای افزایش دقت بررسی تایپ توسط تایپچکرها در این توابع مفید است.
typing.ReadOnly
برای حاشیهنویسی فقط خواندنی
نوع typing.TypedDict
برای حاشیهنویسی دیکشنریها با تایپهای ثابت برای مقادیر مرتبط با کلیدهای خاص ایجاد شد. اکنون typing.ReadOnly
به شما امکان میدهد مقادیر خاصی در یک TypedDict
را بهعنوان فقط خواندنی حاشیهنویسی کنید. بهعنوان مثال، یک لیستی که فقط میتوانید به آن مقدار اضافه کنید یا از آن مقدار حذف کنید، اما نمیتوانید آن را با یک رشته یا نوع دیگری جایگزین کنید.
پایان «ماژولهای غیرضروری»
پایتون 3.11 مجموعهای از ماژولهای کتابخانه استاندارد پایتون را که قدیمی و دیگر نگهداری نمیشدند شناسایی کرد. برنامه این بود که آنها در نسخههای 3.11 و 3.12 بهعنوان منسوخشده علامتگذاری شوند و سپس در پایتون ۳.۱۳ بهطور کامل حذف شوند. اکنون، این «ماژولهای غیرضروری» (که به این نام شناخته میشوند) بهطور دائمی حذف شدهاند. بسیاری از ماژولهای حذفشده میتوانند با ماژولهای شخص ثالث جایگزین شوند یا عملکرد آنها با استفاده از دیگر اجزای کتابخانه استاندارد شبیهسازی شود.
کاربران همچنین میتوانند انتظار داشته باشند که در سه نسخه بعدی پایتون موارد بیشتری منسوخ شوند. بیشتر آنها، متدهایی از کتابخانه استاندارد هستند که بهندرت استفاده میشوند یا مستند نشدهاند.