پایتون ۳.۱۴ و جنگو ۵.۲ LTS؛ پایان GIL و کلیدهای مرکب
5 تیر 1405سال ۲۰۲۵ برای اکوسیستم پایتون سالی پربار بود. پایتون ۳.۱۴ در ۷ اکتبر ۲۰۲۵ منتشر شد و جنگو ۵.۲ بهعنوان نسخهٔ پشتیبانی بلندمدت (LTS) در ۲ آوریل ۲۰۲۵ عرضه شد. این دو نسخه روی هم، تجربهٔ توسعهٔ بکاند با پایتون را بهطور محسوسی ارتقا میدهند. در این مقاله مهمترین تغییرات هر دو را مرور میکنیم.
پایتون ۳.۱۴: پایان رسمی محدودیت GIL
شاخصترین خبر این نسخه، رسمیشدن حالت Free-threaded (بدون GIL) بر اساس PEP 779 است. قفل سراسری مفسر (Global Interpreter Lock) سالها مانع از موازیسازی واقعی نخها (threads) روی چند هسته بود. اکنون این قابلیت بهصورت کامل پیادهسازی شده و رسماً پشتیبانی میشود، هرچند مفسر free-threaded هنوز بهصورت پیشفرض نصب نمیشود و باید آن را جداگانه فعال کنید. این تغییر برای کارهای CPU-bound و پردازش موازی یک نقطهٔ عطف به شمار میرود.
رشتههای قالبی (Template Strings)
پایتون ۳.۱۴ نوع جدیدی از رشتهها به نام t-strings را معرفی میکند. برخلاف f-strings که بلافاصله به یک رشته تبدیل میشوند، t-strings یک شیء قابلپردازش برمیگردانند که اجزای ثابت و مقادیر درونگذاریشده را جدا نگه میدارد. این موضوع برای ساخت کوئریهای ایمن، HTML بدون آسیبپذیری تزریق، و سناریوهای مشابه فوقالعاده مفید است.
name = "<script>"
template = t"Hello {name}"
# template یک شیء Template است نه رشتهٔ خام؛
# میتوان مقادیر را پیش از رندر نهایی escape یا اعتبارسنجی کرد
سایر تازههای پایتون ۳.۱۴
چند بهبود مهم دیگر نیز در این نسخه قرار دارد. ارزیابی بهتعویقافتادهٔ annotation ها (deferred evaluation) از سربار زمان اجرا میکاهد. ماژول جدید compression.zstd پشتیبانی از الگوریتم فشردهسازی Zstandard را بهصورت داخلی فراهم میکند. محیط تعاملی PyREPL اکنون از syntax highlighting برخوردار است و ابزارهای خط فرمان مثل argparse، json، unittest و calendar رنگی شدهاند. همچنین یک رابط دیباگر خارجی با سربار صفر برای CPython اضافه شده که ابزارهای پروفایلینگ و دیباگ را قدرتمندتر میکند.
جنگو ۵.۲ LTS: کلیدهای اصلی مرکب
جنگو ۵.۲ یک نسخهٔ LTS است و دستکم تا سه سال (تا آوریل ۲۰۲۸) بهروزرسانی امنیتی دریافت میکند، که آن را برای پروژههای پروداکشن انتخابی مطمئن میسازد. مهمترین قابلیت جدید، پشتیبانی از کلید اصلی مرکب (Composite Primary Key) از طریق کلاس جدید CompositePrimaryKey است. این قابلیت اجازه میدهد جدولهایی با کلید اصلی متشکل از چند فیلد بسازید — هرچند فعلاً با پنل ادمین و بهعنوان مقصد کلید خارجی کار نمیکند.
from django.db import models
class OrderItem(models.Model):
pk = models.CompositePrimaryKey("order_id", "product_id")
order_id = models.IntegerField()
product_id = models.IntegerField()
quantity = models.PositiveIntegerField()
ایمپورت خودکار مدلها در Shell
یکی از قابلیتهای کوچک اما بسیار کاربردی، ایمپورت خودکار مدلها در دستور shell است. دیگر لازم نیست مدلها را دستی ایمپورت کنید؛ جنگو همهٔ مدلهای اپهای نصبشده را بهصورت خودکار در دسترس قرار میدهد.
python manage.py shell
>>> User.objects.count() # بدون نیاز به import User
سایر تغییرات جنگو ۵.۲
سفارشیسازی BoundField اکنون سادهتر شده و میتوان آن را در سطح فرم، فیلد یا کل پروژه تنظیم کرد. اتصالهای MySQL بهصورت پیشفرض از مجموعهکاراکتر utf8mb4 استفاده میکنند (بهجای utf8 که در واقع همان utf8mb3 منسوخ بود) که برای پشتیبانی کامل از یونیکد و ایموجی اهمیت دارد. همچنین response.text اکنون نمایش رشتهای بدنهٔ پاسخ را برمیگرداند که نوشتن تستها را راحتتر میکند. نکتهٔ مهم برای ارتقا: جنگو ۵.۲ از پایتون ۳.۱۰ تا ۳.۱۴ پشتیبانی میکند و حداقل نسخهٔ PostgreSQL پشتیبانیشده ۱۴ است.
جمعبندی
ترکیب پایتون ۳.۱۴ و جنگو ۵.۲ LTS یک پایهٔ مدرن و باثبات برای توسعهٔ بکاند فراهم میکند. رسمیشدن free-threading افق تازهای برای موازیسازی واقعی باز میکند، t-strings ابزاری امن برای ساخت رشتههای پویا است، و در سمت جنگو، کلیدهای مرکب و LTS بودن آن را برای پروژههای جدی جذاب میسازد. توصیه میشود پروژههای جدید را روی جنگو ۵.۲ آغاز کنید و برای استفاده از حالت free-threaded، ابتدا سازگاری کتابخانههای C-extension خود را آزمایش کنید.