Cython
![]() | |
תאריך השקה |
28 ביולי 2007 ![]() |
---|---|
הושפעה על ידי |
פייתון ![]() |
רישיון | רישיון אפאצ'י |
cython.org | |
![]() ![]() |
Cython היא שפת תכנות דמוית פייתון המאפשרת קריאה לפונקציות בשפות C/C++ ואפשרות הכרזה מראש על טיפוס המשתנים (טיפוסיות סטטית).
Cython מאפשרת כתיבת מודולי הרחבה ל-CPython. קוד פייתון רגיל יכול להשתמש בהרחבות אלו בצורה דומה למודולי פייתון. בשונה מקוד פייתון, Cython מתקמפל לשפת C, והקוד עושה שימוש בקריאות ישירות ל-CPython ולספרייה הסטנדרטית. הודות לטכניקה זו זמן הריצה של פונקציות הנכתבות ב-Cython לרוב קצר יותר, אך יוצר תלות בין המודול לבין מפרש הפייתון והספרייה הסטנדרטית.
Cython היא נגזרת של שפת Pyrex והיא מרחיבה את האופטימזציות והיכולות שלה. השפה נוצרה כפיצול מ-Pyrex ב-2007 על ידי מפתחי התוכנה המתמטית Sage, שיצרו את SageX. לאחר שמתכנתים רבים הורידו את Sage רק כדי להשתמש ב-SageX, וכיוון שמתכנתים של הרחבות אחרות (LXML), תחזקו פיצולים משלהם לPyrex, הוחלט להוציא את SageX מSage, ולאחדו עם cython-lxml.
Cython נפוצה בשימוש בקרב מתכנתי פייתון המפתחים תוכנות וספריות מדעיות, ובפרט תוכנת המתמטיקה Sage וספריות הפייתון הפופולריות SciPy, pandas ו-scikit-learn.
דוגמת קוד
[עריכת קוד מקור | עריכה]![](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Cython_CPython_Ext_Module_Workflow.png/220px-Cython_CPython_Ext_Module_Workflow.png)
מקובל להשתמש בהרחבת distutils
לצורך קימפול, ומאחר ש-Cython מתממשקת עם Python C API מקובל להגדיר מספר קבצים:
- קובץ
setup.py
שעושה שימוש ב-distutils
לצורך בנייה ויצירת המודול - תוכנית פייתון שעושה שימוש במודול המרחיב
- קובצי קוד 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 distutils.core 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
קישורים חיצוניים
[עריכת קוד מקור | עריכה]אתר האינטרנט הרשמי של Cython (באנגלית)