الجديد في بايثون 3.8

python

#1

النسخة الألفا من بايثون 3.8 تم إصدارها في وقت مبكر من هذا العام وهي الآن متوفرة لعامة المطورين في انتظار صدور النسخة الرسمية لشهر أكتوبر القادم ، إلى حد الآن هناك أشياءٌ مثيرة تحصل في مجتمع تحسين بايثون PEP ! فهذه النسخة المبكرة من بايثون 3.8 قد نزلت مباشرة بعد الحدث المؤسف لإستقالة مؤسس اللغة “جايدو فان روسوم” من منصبه كرئيس فعلي لمجتمع المطورين .

التعبير PEP هو اختصار : Python Enhancement Propsoal .

البعض يظن أن هذه الميزات الجديدة التي جاءت بها بايثون 3.8 قد تؤدي إلى طمس هويتها باعتبارها لغة برمجة بسيطة المبنى ومفهومة المعنى ، غير أن الغالبية العظمى ترى أن هذه الإضافات والتحديثات ضرورية ومهمة، ولن يكون عندها أي تأثير على هوية اللغة وقابليتها للقراءة . رأيان متضاربان والجدل سيستمر ! إلا أن ما يهمنا نحن في هذه القضية هو رأيك أنت عزيزي / عزيزتي ،
ولكن قبل أن تحكم دعنا أولاً نستعرض أهم التحديثات التي جاءت بها بايثون 3.8 :

الميزة الأولى : walrus operator

image

هو عامل جديد (operator) تمت إضافته للتعابير الشرطية تحت الإقتراح PEP 572 ، وكلمة “walrus” تشير إلى “حصان البحر” ، مما يعني أن التعريب الكامل لهذا المصلح هو ” عامل حصان البحر ” ! ربما لا تدرك النكتة في هذا الإسم إلا أن السر في هذه التسمية هو إستخدام الرمز ” := ” للدلالة على هذا العامل ، وهو رمز يشبه شكل رأس حصان البحر ( راجع الصورة بالأعلى ) .

هذه الميزة PEP572 كانت سبب الخلاف الذي أدى إلى إستقالة “جايدو فان روسم” من رئاسة مجتمع المطورين .

الهدف من استخدام (walrus operator)

يستخدم عادة في الجمل الشرطية لإسناد تعبير معين (expression) كقيمة لأي متغير بهذه الصيغة :
(NAME := expr )
حيث أن expr هي كل تعبير (expression) صحيح في لغة بايثون، ويشمل ذلك تعابير القائمة ، و NAME هو إسم المتغير المراد إسناد قيمة التعبير expr له .
مثال للتوضيح :

persons = [
    { "name": "ahmed", "age": 27 },
    { "name": "fatima", "age": 33 },
    { "name": None , "age": 18 },
    { "name": "dalila" , "age": 45 },
    { "name": None , "age": 51 },
]
 
for person in persons: 
    if name := person.get("name")  :
        print(name)

Output

  • في السطر (10) استخدمنا المتغير name في الجملة الشرطية دون أن نقوم بتعريفه من قبل .
  • وفي السطر (11) أصبح المتغير متاح للطباعة ، هذا هو الغرض من الـ Walrus operator .
    لكي يتضح المثال أكثر سنرى كيف يمكننا تطبيق نفس المثال في النسخ السابقة من بايثون :
for person in persons:
    name = person.get("name")
    if name :
        print(name)

أرجوا أن تكون الفكرة واضحة .

الميزة الثانية : العمليات المتوازية في الـ multiprocessing تحصل على ذاكرة مشتركة

في النسخ السابقة من بايثون كانت مكتبة multiprocessing للبرمجة المتوازية تعتمد على ذاكرة مستقلة لكل عملية (process) مما يجعل تبادل البيانات بين العمليات المتوازية أمراً مكلِّفا بالنسبة لوقت التنفيذ ، الآن وبإضافة ذاكرة مشتركة بإمكان العمليات المتوازية أن تشارك البيانات فيما بينها دون الحاجة إلى استخدام الـ pickling مما سيجعلها أسرع .

الميزة الثالثة : تحسين الـ AST عبر دمج الـ typed_ast في المفسر الرسمي (cpython)**

ماذا نقصد بالـ AST وما دورها ؟
أثناء تنفيذ الشيفرة وفي تلك اللحظة التي يحوّل فيها المُفسر الكود المكتوب بلغة بايثون إلى لغة الآلة Bytecode سيكون الأوان قد فات الأوان لمعرفة كيفية تنفيذ الجهاز للكود لأن البايت كود سريع وبدائي جدا ولم يتم تصميمه للبشر ، من هنا ظهرت الحاجة إلى الـ (AST (Abstract Syntax Trees أو أشجار البنية المجردة بالعربي وهذه الأخيرة وظبفتها تقسيم الكود وتنظيمه إلى وحدات شجرية معلمة قبل تحويله إلى لغة الآلة ، عبر تقسيمات هذه البنية المجردة يستطيع المفسر متابعة الكود ومعرفة ما الذي يحصل في جانب الجانب المظلم للـ Bytecode .

إذن ما هو التحديث المهم الذي حصلت عليه بايثون 3.8 في الـ AST’s ؟

النسخ السابقة من بايثون كانت تعتمد على نموذج إسمه standard ast library لعمل أشجار البنية المجردة ، هذا النموذج كان يواجه بضعة مشاكل تتعلق بتفسير التعليقات وبكونه لا يتيح بنية متكاملة لاختبار الكود على النسخ المختلفة من بايثون ، لهذه الأسباب وغيرها قرر المطورون دمج حزمة الـ typed_ast في المكتبة القياسية كونها تعتبر بديلا منقحاً وسريعاً .

هذه أهم الميزات التي نزلت في نسخة الألفا الأخيرة python 3.8.0a2 .
المصدر :الجديد في بايثون 3.8


#2

Well done @pythonation :ok_hand:


#3

شكراً لك عزيزي محمد على هذه المعلومات


#4

ياااه :open_mouth:

معلومات رائعة بالفعل, شكراً محمد !

بالرغم من رحيل Guido, فما زالت بايثون تتمتع بجمالها :grin:


#5

الشكر لك ياسر :hugs:


#6

العفو صديقي


#7

thanx


#8

thanxxxx


#10

u r welcome