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.
דוגמת קוד
מקובל להשתמש בהרחבת 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
קישורים חיצוניים
29418681Cython