سيثون
Cython ( / ˈ saɪ θ ɒ n / ) هي مجموعة فرعية من لغة البرمجة Python ، والتي تسمح للمطورين بكتابة كود Python (مع امتدادات بناء الجملة الاختيارية المستوحاة من لغة C) والتي تحقق أداءً مماثلاً لأداء لغة C. [ 5 ] [ 6 ]
سايثون هي لغة مُصرّفة تُستخدم عادةً لإنشاء وحدات CPython الإضافية. يتم تجميع الشيفرة المُعلّقة الشبيهة بـ Python إلى لغة C، ثم تُغلّف تلقائيًا بشيفرة واجهة ، مما يُنتج وحدات إضافية يُمكن تحميلها واستخدامها بواسطة شيفرة Python العادية باستخدام عبارة الاستيراد، ولكن مع تقليل كبير في الحمل الحسابي أثناء التشغيل . كما تُسهّل سايثون تغليف شيفرة C أو C++ المستقلة في وحدات قابلة للاستيراد بواسطة Python.
كُتبت لغة Cython بلغة Python وC، وتعمل على أنظمة Windows و macOS و Linux ، وتُنتج ملفات مصدر C متوافقة مع CPython 2.6 و2.7 و3.3 والإصدارات الأحدث. يمكن لشفرة Cython المصدرية التي تُترجمها Cython (إلى C) استخدام كلٍ من Python 2 وPython 3، حيث تستخدم Cython 0.x افتراضيًا صيغة Python 2، بينما تستخدم Cython 3.x صيغة Python 3. ويمكن تغيير هذا الإعداد الافتراضي (مثلًا في تعليقات شفرة المصدر) إلى صيغة Python 3 (أو 2). ونظرًا لتغيير صيغة Python 3 في الإصدارات الحديثة، فقد لا تكون Cython مُحدثة بأحدث الإضافات. تدعم Cython معظم لغة C++ بشكلٍ أصلي، وتُترجم جميع شفرات Python الموجودة تقريبًا. [ 7 ]
تم إصدار Cython 3.0.0 في 17 يوليو 2023. [ 8 ]
تصميم
يعمل Cython عن طريق إنتاج وحدة بايثون قياسية. مع ذلك، يختلف سلوكه عن بايثون القياسية في أن كود الوحدة، المكتوب أصلاً بلغة بايثون، يُترجم إلى لغة C. ورغم أن الكود الناتج سريع، إلا أنه يستدعي العديد من الدوال إلى مترجم CPython ومكتباته القياسية لتنفيذ العمليات الفعلية. وقد وفّر هذا الأسلوب وقتًا كبيرًا في تطوير Cython، لكن الوحدات تعتمد على مترجم بايثون ومكتباته القياسية.
على الرغم من أن معظم الشيفرة مكتوبة بلغة C، إلا أنه عادةً ما يلزم وجود مُحمِّل صغير مكتوب بلغة بايثون المُفسَّرة (إلا إذا كان الهدف هو إنشاء مُحمِّل مكتوب بالكامل بلغة C، وهو ما قد يتطلب التعامل مع التفاصيل الداخلية غير الموثقة لـ CPython). ومع ذلك، لا تُشكِّل هذه مشكلة كبيرة نظرًا لوجود مُفسِّر بايثون. [ 9 ]
يحتوي Cython على واجهة وظائف خارجية لاستدعاء إجراءات C / C++ والقدرة على تعريف النوع الثابت لمعلمات ونتائج الإجراءات الفرعية والمتغيرات المحلية وسمات الفئة.
قد يستهلك برنامج Cython الذي يُنفّذ نفس خوارزمية برنامج Python المقابل موارد حاسوبية أقل، مثل الذاكرة الأساسية ودورات المعالجة، نظرًا للاختلافات بين نموذجي تنفيذ CPython وCython. يُحمّل برنامج Python الأساسي ويُنفّذ بواسطة الآلة الافتراضية CPython ، لذا يستهلك كلٌّ من وقت التشغيل والبرنامج نفسه موارد حاسوبية. أما برنامج Cython، فيُترجم إلى كود C، الذي يُترجم بدوره إلى كود الآلة، لذا تُستخدم الآلة الافتراضية لفترة وجيزة فقط عند تحميل البرنامج. [ 10 ] [ 11 ] [ 12 ] [ 13 ]
توظف شركة سايثون:
- التحسينات المتفائلة
- استنتاج النوع (اختياري)
- انخفاض التكاليف العامة في هياكل التحكم
- انخفاض تكلفة استدعاء الوظيفة [ 14 ] [ 15 ]
يعتمد الأداء على كل من كود C الذي يتم إنشاؤه بواسطة Cython وكيفية تجميع هذا الكود بواسطة مترجم C. [ 16 ]
تاريخ
لغة Cython مشتقة من لغة Pyrex ، لكنها تدعم ميزات وتحسينات أكثر من Pyrex. [ 17 ] [ 18 ] تم تطوير Cython من Pyrex عام 2007 من قبل مطوري حزمة Sage للجبر الحاسوبي، نظرًا لعدم رضاهم عن قيود Pyrex وعدم تمكنهم من الحصول على موافقة جريج إيوينغ، المسؤول عن صيانة Pyrex، على التعديلات التي قدموها، حيث كان يتصور نطاقًا أضيق بكثير لأداته مقارنةً بما كان يتصوره مطورو Sage. ثم قاموا بتطوير نسخة معدلة من Pyrex باسم SageX. وعندما اكتشفوا أن المستخدمين يقومون بتنزيل Sage خصيصًا للحصول على SageX، وأن مطوري حزم أخرى (بمن فيهم ستيفان بينيل، المسؤول عن مكتبة XML المسماة LXML ) يقومون أيضًا بتطوير نسخ معدلة من Pyrex، تم فصل SageX عن مشروع Sage ودمجه cython-lxmlليصبح Cython. [ 19 ]
ملفات Cython لها .pyxامتداد . في أبسط صورها، تبدو شيفرة Cython مطابقة تمامًا لشيفرة Python. مع ذلك، بينما تُعتبر Python القياسية ذات كتابة ديناميكية ، في Cython، يمكن تحديد أنواع البيانات اختياريًا، مما يسمح بتحسين الأداء، ويتيح تحويل الحلقات إلى حلقات C حيثما أمكن. على سبيل المثال:
# سيتم تحويل الوسيط إلى عدد صحيح أو سيتم رفع خطأ من نوع TypeError. def primes ( int kmax ):# تم تعريف هذه المتغيرات باستخدام أنواع C. cdef int n , k , i# تعريف نوع C آخر cdef int p [1000]# نتيجة نوع بايثون = []إذا كانت قيمة kmax أكبر من 1000 : فإن قيمة kmax تساوي 1000k = 0 n = 2بينما k < kmax : i = 0بينما i < k و n % p [ i ] != 0 : i = i + 1إذا كان i يساوي k : p [ k ] = n ، k = k + 1 ، result.append ( n )ن = ن + 1إرجاع النتيجةأمثلة

يُعدّ برنامج "مرحباً بالعالم" النموذجي في لغة Cython أكثر تعقيداً من نظيره في معظم اللغات الأخرى، وذلك لأنه يتفاعل مع واجهة برمجة تطبيقات Python C أو setuptoolsغيرها من أدوات بناء الإضافات المتوافقة مع معيار PEP517 . يتطلب المشروع الأساسي ثلاثة ملفات على الأقل.
- ملف
setup.pyلاستدعاءsetuptoolsعملية البناء التي تُنشئ وحدة الإضافة - برنامج بايثون رئيسي لتحميل وحدة الإضافة
- ملفات مصدر Cython
توضح قوائم التعليمات البرمجية التالية عملية البناء والتشغيل:
# hello.pyx - وحدة بايثون، سيتم ترجمة هذا الكود إلى لغة C بواسطة Cython. def say_hello (): print ( "Hello World!" )# launch.py - مُحمِّل بايثون الأولي، يقوم بتحميل الوحدة التي تم إنشاؤها بواسطة Cython.# يتم تفسير هذا الكود دائمًا، مثل كود بايثون العادي. # لا يتم تجميعه إلى لغة C.استيراد hello hello . say_hello ()# setup.py - غير ضروري إذا لم تكن تعيد توزيع الكود، انظر أدناه من setuptools import setup من Cython.Build import cythonizesetup ( name = "Hello world app" , ext_modules = cythonize ( "*.pyx" ))تقوم هذه الأوامر ببناء البرنامج وتشغيله:
$ بيثون setup.py build_ext --inplace $ python launch.py الاستخدام في IPython/Jupyter notebook
هناك طريقة أكثر مباشرة للبدء باستخدام Cython وهي من خلال سطر الأوامر IPython (أو من خلال وحدة تحكم بايثون داخل المتصفح المسماة Jupyter notebook ):
في [ 1 ]: % تحميل امتداد Cythonفي [ 2 ]: %% cython ... : def f ( n ): ... : a = 0 ... : for i in range ( n ): ... : a += i ... : return a ... : : : cpdef g ( int n ) : ... : cdef long a = 0 ... : cdef int i ... : for i in range ( n ): ... : a += i ... : return a ... :في [ 3 ]: % timeit f ( 1000000 ) 10 حلقات ، أفضل 3 : 26.5 مللي ثانية لكل حلقةفي [ 4 ] : % timeit g ( 1000000 ) 1000 حلقة ، أفضل 3 : 279 ميكروثانية لكل حلقةمما يُحقق تحسناً بمقدار 95 ضعفاً مقارنةً بنسخة بايثون النقية. لمزيد من التفاصيل حول هذا الموضوع، يُرجى مراجعة صفحة البدء السريع الرسمية. [ 20 ]
استخدامات السيثون
يحظى Cython بشعبية خاصة بين مستخدمي Python في المجال العلمي، [ 12 ] [ 21 ] [ 22 ] حيث يمتلك "الجمهور المثالي" وفقًا لمبتكر Python، غيدو فان روسوم . [ 23 ] جدير بالذكر:
- يعتمد نظام الجبر الحاسوبي SageMath المجاني على لغة Cython، سواء من حيث الأداء أو للتفاعل مع المكتبات الأخرى. [ 24 ]
- أجزاء كبيرة من مكتبات الحوسبة العلمية SciPy و pandas و scikit-learn مكتوبة بلغة Cython. [ 25 ] [ 26 ]
لا يقتصر نطاق استخدام لغة Cython على الحوسبة العددية فحسب. فعلى سبيل المثال، كُتبت مجموعة أدوات lxml XML في الغالب بلغة Cython، ومثل سابقتها Pyrex، تُستخدم Cython لتوفير روابط Python للعديد من مكتبات C وC++، مثل مكتبة المراسلة ZeroMQ . [ 27 ] كما يمكن استخدام Cython لتطوير برامج متوازية لأجهزة المعالجات متعددة النوى ؛ وتعتمد هذه الميزة على مكتبة OpenMP .
انظر أيضاً
مراجع
- ↑ بهنيل، ستيفان (2008). "مترجم سايثون لامتدادات لغة سي في بايثون" . يورو بايثون (28 يوليو 2007: الإطلاق الرسمي لسايثون). فيلنيوس/ليتوفا.
- ↑ "الإصدار 3.2.8" . 30 يونيو 2026. تم الاطلاع عليه في 1 يوليو 2026 .
- ↑ سجل تغييرات Cython ، Cython، 15 مايو 2023 ، تم الاطلاع عليه في 19 مايو 2023
- ↑ "أساسيات اللغة - وثائق Cython 3.0.0a9" . cython.readthedocs.io . تم الاطلاع عليه بتاريخ 9 سبتمبر 2021 .
- ↑ "نظرة عامة على Cython - وثائق Cython 0.19.1" . Docs.cython.org . تم الاطلاع عليه بتاريخ 21 يوليو 2013 .
- ↑ سميث، كورت (2015). سايثون: دليل لمبرمجي بايثون . دار نشر أورايلي ميديا . رقم ISBN 978-1-4919-0155-7.
- ↑ "الأسئلة الشائعة · cython/cython Wiki" . GitHub . تم الاطلاع عليه بتاريخ 11 يناير 2023 .
- ↑ "سجل تغييرات Cython" . cython.org . تم الاطلاع عليه بتاريخ 21 يوليو 2023 .
- ↑ "دليل تعليمي أساسي - وثائق Cython 3.0a6" . cython.readthedocs.io . تم الاطلاع عليه بتاريخ 11 ديسمبر 2020 .
- ↑ أوليفانت، ترافيس (20 يونيو 2011). "الاكتشاف التقني: تسريع بايثون (NumPy، Cython، وWeave)" . Technicaldiscovery.blogspot.com . تم الاطلاع عليه بتاريخ 21 يوليو 2013 .
- ↑ بهنيل، ستيفان؛ برادشو، روبرت؛ سيترو، كريغ؛ دالسين، ليساندرو؛ سيلجيبوتن، داغ سفير؛ سميث، كورت (2011). "سايثون: أفضل ما في العالمين" . الحوسبة في العلوم والهندسة . 13 (2): 31-39 . Bibcode : 2011CSE....13b..31B . doi : 10.1109/MCSE.2010.118 . hdl : 11336/13103 . S2CID 14292107 .
- 1 2 سيلجيبوت، داغ سفير (2009). "حسابات عددية سريعة باستخدام سايثون" . وقائع المؤتمر الثامن لبايثون في العلوم . الصفحات 15-22 . doi : 10.25080/GTCA8577 .
- ↑ ويلبرز، آي.؛ لانغتانجن، إتش بي؛ أوديجارد، أ. (2009). سكاليرود، بي.؛ أندرسون، إتش آي (محرران). "استخدام سايثون لتسريع برامج بايثون العددية" . وقائع مؤتمر ميك آي تي 09 : 495-512 . مؤرشف من الأصل (ملف PDF) في 4 يناير 2017. تم الاطلاع عليه في 14 يونيو 2011 .
- ↑ "معايير أداء التغليف لعدة مولدات تغليف بايثون (باستثناء سايثون)" . مؤرشف من الأصل في 4 أبريل 2015. تم الاطلاع عليه في 28 مايو 2010 .
- ↑ "معايير أداء التغليف لـ Cython و Boost.Python و PyBindGen" . مؤرشف من الأصل في 3 مارس 2016. تم الاطلاع عليه في 28 مايو 2010 .
- ↑ "Cython: C-Extensions for Python" . تم الاطلاع عليه بتاريخ 22 نوفمبر 2015 .
- ↑ "الاختلافات بين Cython و Pyrex" . GitHub .
- ↑ إيوينغ، غريغ (21 مارس 2011). "ردًا على: معلومات قمة الآلات الافتراضية واللغات لمن لم يحضروا مؤتمر بايكون (ولمن حضروا أيضًا!)" (رسالة إلى القائمة البريدية الإلكترونية ) . تم الاطلاع عليها في 5 مايو 2011 .
python-dev - ↑ يقول روبرت برادشو، مطور Sage وCython، في مؤتمر Sage Days 29 (22 مارس 2011). "Cython: الماضي والحاضر والمستقبل" . مؤرشف من الأصل في 21 ديسمبر 2021. تم الاطلاع عليه في 5 مايو 2011 - عبر يوتيوب .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ "بناء كود Cython" . cython.readthedocs.io . تم الاطلاع عليه بتاريخ 24 أبريل 2017 .
- ↑ "inSCIight: The Scientific Computing Podcast" (الحلقة 6). مؤرشف من الأصل بتاريخ 10 أكتوبر 2014. تم الاطلاع عليه بتاريخ 29 مايو 2011 .
- ↑ ميلمان، جارود؛ أيفازيس، مايكل (2011). "بايثون للعلماء والمهندسين" . الحوسبة في العلوم والهندسة . 13 (2): 9-12 . Bibcode : 2011CSE....13b...9M . doi : 10.1109/MCSE.2011.36 .
- ↑ غيدو فان روسوم (21 مارس 2011). "ردًا على: معلومات قمة الآلات الافتراضية واللغات لمن لم يحضروا مؤتمر بايكون (ولمن حضروا أيضًا!)" (رسالة إلى القائمة البريدية الإلكترونية ) . تم الاطلاع عليها في 5 مايو 2011 .
python-dev - ↑ إيروكال، بورسين؛ شتاين، ويليام (2010). "مشروع سيج: توحيد برامج الرياضيات المجانية لإنشاء بديل عملي لبرامج ماجما، ومابل، وماثيماتيكا، وماتلاب". برامج الرياضيات - المؤتمر الدولي لعلوم الرياضيات 2010 (ملف PDF) . سلسلة محاضرات في علوم الحاسوب. المجلد 6327. سبرينغر برلين / هايدلبرغ. الصفحات 12-27 . CiteSeerX 10.1.1.172.624 . doi : 10.1007/978-3-642-15582-6_4 . ISBN 978-3-642-15581-9.
- ↑ "ملاحظات إصدار SciPy 0.7.2" . مؤرشفة من الأصل في 4 مارس 2016. تم الاطلاع عليها في 29 مايو 2011 .
- ^ بيدريجوسا، فابيان. فاروكووكس، جايل؛ غرامفورت، الكسندر. ميشيل، فنسنت؛ تيريون، برتراند. جريسيل، أوليفييه؛ بلونديل، ماتيو؛ بريتنهوفر، بيتر؛ فايس، رون. دوبورج، فنسنت؛ فاندربلاس، جيك؛ باسوس، الكسندر؛ كورنابو ، ديفيد (2011). “Scikit-Learn: التعلم الآلي في بايثون”. مجلة أبحاث التعلم الآلي . 12 : 2825 – 2830. أرخايف : 1201.0490 . بيب كود : 2011JMLR...12.2825P .
- ↑ "ØMQ: ربط بايثون" .
روابط خارجية
- بايثون (لغة برمجة)
- تطبيقات لغة البرمجة بايثون
- برنامج يستخدم ترخيص أباتشي
- مترجمات من المصدر إلى المصدر
