آموزش سایتون

آنچه در این صفحه می خوانید:

معرفی سایتون (Cython)

ماهیت اساسی Cython را می توان به صورت زیر خلاصه کرد: Cython زیرمجموعه پایتون با انواع داده C است. تقریبا هر قطعه از کد پایتون یک کد معتبر Cython است. کامپایلر Cython آن را به کد C تبدیل می کند که فراخوان های مشابهی را در API سی یا پایتون ایجاد می کند. اما Cython بیشتر از این تعریف است، زیرا پارامترها و متغیرها می توانند در انوع داده C اعلام شوند. کدی که که مقادیر پایتون و مقادیر C را کنترل می کند می توانند آزادانه با هم ادغام شوند. نظارت بر نگهداری حساب و بررسی خطاهای عملیات پایتون نیز به صورت خودکار انجام می شود و همچنین توانایی کامل از امکانات ذخیره سازی استثنائی پایتون و تغییر و کنترل انواع داده ها در سی را برایتان فراهم می کند. در حقیقت، Cython یک کامپایلر استاتیک بهینه سازی برای زبان برنامه نویسی پایتون و زبان برنامه نویسی Cython توسعه یافته (مبتنی بر Pyrex) است. این باعث می شود که نوشتن توسعه های C برای Python همانند پایتون ساده باشد.

Cython یک زبان برنامه نویسی است که هدف آن قرار گرفتن یک زبان برنامه نویسی پایتون است، به گونه ای طراحی شده است که عملکردی مانند C را با کدی ارائه دهد که بیشتر در Python با نحوی اضافی الهام گرفته از C نوشته شده است.

Cython یک زبان کامپایل شده است که به طور معمول برای تولید ماژول های پسوند CPython استفاده می شود. کد شبیه پایتون حاشیه نویسی به سی پلاس پلاس وارد شده و سپس بصورت خودکار در کد رابط پیچیده می شود، ماژول های پسوندی را تولید می کند که می توان با استفاده از دستور وارد کردن توسط کد معمولی Python بارگیری و استفاده کرد، اما با سربارهای محاسباتی به میزان قابل توجهی کمتر در زمان اجرا. Cython همچنین بسته بندی کد مستقل C یا C ++ را در ماژول های قابل وارد کردن پایتون تسهیل می کند.

Cython در Python و C نوشته شده است و در ویندوز، macOS و لینوکس کار می کند و فایل های منبع سازگار با CPython 2.6، 2.7 و 3.3 از 3.8 تولید می کند. Cython 3.0.0 در حال توسعه است.

تاریخچه سایتون (Cython)

Cython مشتق از زبان Pyrex است و از ویژگی های بیشتر و بهینه سازی بیشتری نسبت به Pyrex پشتیبانی می کند. Cython در سال 2007 توسط Pyrex فریب خورده بود، زیرا آنها از محدودیت های Pyrex ناراضی بودند و نتوانستند وصله هایی را که Greg Ewing، نگهدار Pyrex، قبول می کرد، بدست آورد که پیش بینی می کرد دامنه ای بسیار کوچکتر از ابزار خود در مقایسه با توسعه دهندگان Sage داشته باشد. ذهن آنها سپس Pyrex را به عنوان SageX چنگ زدند. هنگامی که آنها دریافتند که مردم برای دریافت SageX فقط Sage را بارگیری می کردند، و توسعه دهندگان سایر بسته ها (از جمله استفان بهنل، که کتابخانه XML LXML را حفظ می کند) نیز چنگال های Pyrex را حفظ می کردند، SageX پروژه Sage را جدا کرده و با Cython-lxml ادغام شده و تبدیل به کیتون شده است.

طراحی سایتون (Cython)

سایتون با تولید یک ماژول استاندارد پایتون کار می کند. با این حال، این رفتار با پایتون استاندارد متفاوت است زیرا کد ماژول، که در ابتدا در پایتون نوشته شده است، به C. ترجمه شده است. در حالی که کد حاصل سریع است، باعث می شود تماس های زیادی به مفسر CPython و کتابخانه های استاندارد CPython انجام شود تا کارهای واقعی انجام شود. انتخاب این ترتیب بطور قابل توجهی در زمان توسعه Cython صرفه جویی می شود، اما ماژول ها به مفسر پایتون و کتابخانه استاندارد وابستگی دارند.

اگرچه بیشتر کد مبتنی بر C است، معمولاً یک لودر خرد خرد که به صورت پایتون تفسیر شده نوشته شده است مورد نیاز است (مگر اینکه هدف از این کار ایجاد یک لودر است که به طور کامل در C نوشته شده باشد، که ممکن است شامل کار با داخلی های بدون سند CPython باشد). با این وجود به دلیل حضور مترجم پایتون این مشکل اساسی نیست.

Cython برای استفاده از روالهای C++ / C و قابلیت اعلام نوع استاتیک پارامترهای فرعی و نتایج، متغیرهای محلی و ویژگیهای کلاس دارای رابط کاربری خارجی است.

برنامه Cython که همان الگوریتم را به عنوان یک برنامه Python مربوطه پیاده سازی می کند، ممکن است منابع محاسباتی کمتری مانند حافظه هسته و چرخه پردازش را به دلیل تفاوت بین مدلهای اجرای CPython و Cython مصرف کند. یک برنامه اساسی Python توسط ماشین مجازی CPython بارگیری و اجرا می شود، بنابراین هم زمان اجرا و هم برنامه خود منابع محاسباتی را مصرف می کند. یک برنامه Cython با کد C کامپایل می شود، که در ادامه با کد ماشین کامپایل می شود، بنابراین ماشین مجازی فقط در هنگام بارگذاری برنامه مختصراً استفاده می شود. عملکرد هر دو به بستگی به کد C توسط Cython و نحوه تهیه آن توسط کامپایلر C بستگی دارد.

مقایسه سایتون (Cython) با Cpython

  • CPython اجرای زبان به نام "پایتون" در C. است نه تنها Cpython، برخی دیگر مانند IronPython و Jython نیز اجرا می شوند (پایتون در جاوا).
  • پایتون یک زبان برنامه نویسی تفسیری است. از این رو، برنامه نویسان پایتون برای تبدیل کد پایتون به کد دستگاه، به مترجم نیاز دارند. در حالی که Cython یک زبان برنامه نویسی کامپایل شده است. برنامه های Cython را می توان به طور مستقیم توسط CPU رایانه اصلی و بدون استفاده از مترجمی اجرا کرد.
  • سایتون بسیار سریعتر از پایتون است. بسیاری از برنامه نویسان برای انتخاب Cython برای نوشتن کد مختصر و قابل خواندن در پایتون که به سرعت کد C عمل می کند، تصمیم می گیرند.
  • Cython به عنوان یک پسوند C برای پایتون طراحی شده است. توسعه دهندگان می توانند از Cython برای سرعت بخشیدن به اجرای کد پایتون استفاده کنند. اما آنها هنوز هم می توانند بدون استفاده از پایتون، برنامه های پایتون را بنویسند و اجرا کنند. اما برنامه نویسان باید برنامه Python و C-compiler را به عنوان پیش نیاز برای اجرای برنامه های Cython نصب کنند.

تفاوت بین پایتون (Python) و سایتون (Cython)

پایتون یک زبان برنامه نویسی تفسیری است. از این رو، برنامه نویسان پایتون برای تبدیل کد پایتون به کد دستگاه، به مترجم نیاز دارند. هر بار که یک برنامه نویس یک برنامه Python را اجرا می کند، کد قبل از اجرا نیاز به تجزیه و تفسیر دارد. از طرف دیگر، Cython یک زبان برنامه نویسی کامپایل شده است. برنامه های Cython را می توان به طور مستقیم توسط CPU رایانه اصلی و بدون استفاده از مترجمی اجرا کرد.

هدف طراحی

همانطور که قبلاً اشاره شد، پایتون به عنوان یک زبان برنامه نویسی با هدف کلی طراحی شده است. این برنامه تعدادی از پارادایم های برنامه نویسی را که معمولاً استفاده می شود، پشتیبانی می کند - شی گرا، کاربردی، رویه ای و ضروری. این سیستم همچنین از یک سیستم نوع پویا برخوردار است، از مدیریت خودکار حافظه پشتیبانی می کند و بر خوانایی کد تأکید دارد. Cython به عنوان یک زبان برنامه نویسی پایتون طراحی شده است. علاوه بر اینکه در پایتون نوشته شده است، سایتون توانایی تولید ماژول های استاندارد پایتون را نیز دارد.

سینتکس

برنامه نویسان این گزینه را دارند که از دو نسخه مجزا Python - 2.x و 3.x استفاده کنند. قوانین نحوی دو نسخه پایتون متفاوت است. همچنین، دو نسخه از زبان های برنامه نویسی سطح بالا با یکدیگر سازگار نیستند. از این رو، توسعه دهندگان باید مطابق نسخه ترجیحی خود از پایتون، قوانین نحو را بیاموزند و از آنها استفاده کنند. سایتون از نحو استفاده می کند که بسیار تحت تأثیر پایتون 2.6 است. حتی از اکثر نحو پایتون 2.x پشتیبانی می کند. اما Cython هنوز از تمام ویژگی های Python 3.x پشتیبانی نمی کند.

رفتار

پایتون برنامه نویسان را قادر می سازد تا کد را از طریق ماژول ها سازماندهی کنند. هر ماژول Python حاوی یک کد خاص Python است و ویژگی های خاص خود را دارد. این ماژول ها باعث می شوند که برنامه نویسان بتوانند پایه کد را سازماندهی و نگهداری کنند. Cython توانایی تولید ماژول های استاندارد Python را دارد. اما کد ماژول نوشته شده در پایتون را به C. ترجمه می کند. فرایند ترجمه سرعت اجرای کد را به میزان قابل توجهی بهبود می بخشد. اما ماژول های تولید شده توسط سایتون بدون مترجم پایتون و کتابخانه استاندارد قابل استفاده نیستند.

عملکرد و سرعت

همانطور که قبلاً ذکر شد، پایتون یک زبان برنامه نویسی تفسیری است، در حالی که سایتون یک زبان برنامه نویسی کامپایل شده است. علیرغم اینکه سوپر پایتون است، سایتون بسیار سریعتر از پایتون است. با کامپایل کردن کد پایتون در کد C، سرعت اجرای کد پایتون را به میزان قابل توجهی بهبود می بخشد. این مجموعه بیشتر به توسعه دهندگان کمک می کند تا بدون استفاده از منابع محاسباتی اضافی، برنامه های پایتون را به راحتی اجرا کنند. از این رو، بسیاری از برنامه نویسان برای انتخاب کیتون مختصر و خواندنی در Python، که به همان سرعت سریعتر کد C را انجام می دهند، تصمیم گرفتند.

وابستگی

Cython به عنوان یک پسوند C برای پایتون طراحی شده است. توسعه دهندگان می توانند از Cython برای سرعت بخشیدن به اجرای کد پایتون استفاده کنند. اما آنها هنوز هم می توانند بدون استفاده از پایتون، برنامه های پایتون را بنویسند و اجرا کنند. اما برنامه نویسان باید برنامه Python و C-compiler را به عنوان پیش نیاز برای اجرای برنامه های Cython نصب کنند. آنها قبل از نصب Cython، باید اطمینان حاصل کنند که یک کامپایلر C در حال حاضر روی سیستم نصب شده است. همچنین، توسعه دهندگان نمی توانند از ماژول های Python تولید شده توسط Cython بدون کتابخانه و مفسر استاندارد Python استفاده کنند.

قابلیت همکاری

علاوه بر اینکه یک ابرقهرمان پایتون است، پایتون در پایتون نیز نوشته شده است. این برنامه به عنوان یک پسوند C برای پایتون برای کامپایل کد پایتون به کد C++ / C طراحی شده است. از این رو، هر دو برنامه Python و Cython الگوریتم های یکسانی را پیاده سازی می کنند. توسعه دهندگان می توانند ماژول های فرمت CPython تولید شده توسط Cython را در کد پایتون از طریق بیانیه های واردات جاسازی کنند. آنها حتی می توانند از طریق Cython نکات نوع را به برنامه های پایتون موجود اضافه کنند. Cython حتی توسعه دهندگان را قادر می سازد تا از طریق کد پایتون با کد C یا C ++ تماس بگیرند. برنامه نویسان می توانند Cython را بصورت یکپارچه در برنامه های موجود، کدها و کتابخانه های پایتون وارد کنند.

موارد استفاده

پایتون یک زبان برنامه نویسی با هدف کلی است. علاوه بر استفاده گسترده به عنوان زبان برنامه نویسی برای توسعه وب، پایتون در حال حاضر در پروژه های محاسبات علمی، داده های بزرگ، هوش مصنوعی، یادگیری ماشین و اینترنت اشیاء (IoT) مورد استفاده قرار می گیرد. همچنین، پایتون، در حال حاضر، توسط شرکت های بزرگی مانند گوگل، ناسا، سرن و ویکی پدیا مورد استفاده قرار می گیرد. از طرف دیگر، Cython به طور گسترده در پروژه های محاسبات علمی و عددی مورد استفاده قرار می گیرد. تعدادی کتابخانه رایانه ای رایج برای پایتون - Pandas و SciPy - در پایتون نیز نوشته شده اند. همچنین، Cython در حال حاضر توسط تعدادی از وب سایت های پر ترافیک از جمله Quora مورد استفاده قرار می گیرد.

در کل، پایتون یک زبان برنامه نویسی با هدف کلی است، در حالی که سایتون یک مجموعه برنامه نویسی پایتون است. توسعه دهندگان Python می توانند از Cython به عنوان یک پسوند C برای Python استفاده کنند و عملکرد و سرعت برنامه های پایتون را بهینه کنند. آنها حتی می توانند از Cython برای کامپایل کردن کد پایتون با کد C++ / C استفاده کنند. اما Cython بدون زبان برنامه نویسی پایتون، کتابخانه استاندارد و مترجم قابل استفاده نیست.

مثال سایتون (Cython)

یک برنامه سلام جهانی برای Cython پیچیده تر از بسیاری از زبان ها است زیرا با API Python C و تأسیسات ساخت افزونه setuptools ارتباط دارد. حداقل یک پرونده برای یک پروژه اصلی لازم است:

  • یک پرونده setup.py برای فراخوانی مراحل ساخت setuptools که ماژول فرمت را تولید می کند
  • برنامه اصلی پایتون برای بارگذاری ماژول فرمت
  • فایل (های) منبع Cython

لیست کد های زیر روند ساخت و راه اندازی را نشان می دهد:

# hello.pyx - Python Module, this code will be translated to C by Cython.
def say_hello():
    print "Hello World!"

# launch.py - Python stub loader, loads the module that was made by Cython.

# This code is always interpreted, like normal Python. # It is not compiled to C.

import hello hello.say_hello()

# setup.py - unnecessary if not redistributing the code, see below
from setuptools import setup
from Cython.Build import cythonize

setup(name = 'Hello world app', ext_modules = cythonize("*.pyx"))

این دستورات برنامه را ایجاد و راه اندازی می کنند:

$ python setup.py build_ext --inplace
$ python launch.py

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود