Cython

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.

דוגמת קוד

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

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