Cython

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.

דוגמת קוד
ממוזער|ימין|Hello World ב-Cython
מקובל להשתמש בהרחבת 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

קישורים חיצוניים


קטגוריה:פייתון