Cython
Програмски језик Cython је надскуп Пајтона са интерфејсом стране функције за позивање C/C++ рутина и способношћу да декларише статични тип подрутинских параметара и резултата, локалних променљивих, и својстава класа.[1][2] ПрегледCython је компајлован језик који генерише модуле екстензија CPython-а. Ови модули екстензија онда могу бити учитани и коришћени од стране обичног Пајтон кода коришћењем import наредби. Cython је написан у Пајтону и ради на системима Microsoft Windows, Линукс, и Mac OS X, производећи изворне фајлове компатибилне са CPython 2.4 до 3.4. Ради тако што производи стандардан Пајтон модул. Али, понашање се разликује од стандардног Пајтона у том модулу кода, првобитно написаног у Пајтону, је преведен у C. Док је резултујући код брз, он прави пуно позива у CPython интерпретатору и користи CPython стандардне библиотеке да изврше сав посао. Овакав начин рада је сачувао прилично доста времена у развоју Cython-а, али модули имају зависност на Пајтон интерпретатор и стандардну библиотеку. Иако је већина кода заснована на C-у, мали део лоудера написан у интерпретатору Пајтона је обично неопходан (осим ако је циљ да се направи лоудер потпуно написан у језику C, што може захтевати рад са недокументованим унутрашњостима CPython-а). Али, ово није главни проблем због присуства интепретатора Пајтона. Пример програма![]() Пример hello world програма за Cython је сложенији него у другим језицима јер долази у додир са Пајтон C АПИ и
Следећи код демонстрира процес градње и покретања: # 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 је дериват језика Пирекс, и подржава више карактеристика и оптимизација него Пирекс.[3][4] Cython је форкован из Пирекса током 2007. од стране програмера Сејџ пакета компјутерске алгебре, јер нису били задовољни Пирексовим ограничењима и нису могли добијати закрпе прихваћене од Пирексовог одржаваоца Грега Евинга, који је имао представу о много мањем обиму свог алата него што су то Сејџ програмерили мислили. Они су затим форковали Пирекс као SageX. Када су сазнали да људи преузимају Сејџ само да би добили SageX, и програмери других пакета (укључућуји Стефана Бехнела, који је одржавао XML библиотеку LXML) су такође одржавали форкове Пирекса, SageX се поделио на Сејџ пројекат и уврстио са cython-lxml да постане Cython.[5] Пример
Cython фајлови имају def primes(int kmax): # The argument will be converted to int or raise a TypeError.
cdef int n, k, i # These variables are declared with C types.
cdef int p[1000] # Another C type
result = [] # A Python type
if kmax > 1000:
kmax = 1000
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result
Статични типови декларација и ПерформансеCython програм који имплементира исти алгоритам као и одговарајући Пајтон програм може трошити мање рачинарских ресураса као што су меморија и циклуси процесовања због разлика између CPython-а и Cython модела извршења. У једну руку, основни Пајтон програм је учитан и извршен од стране CPython виртуалне машине, тако да и време покретања као и сам програм троше ресурсе. У другу руку, Cython програм је компајлован у коду C-а, који је даље компајлован у машински код, тако да виртуелна машина се само користи привремено када се програм учитава.[6][7][8][9] Cython садржи:
Пошто је C осредњи језик по тежини, перформансе ће зависити од C компајлера. КоришћеностCython је посебно популаран код научних корисника Пајтона,[8][12][13] где има "савршену публику" према речима Пајтон програмера Гвидо ван Росум.[14] Истакнујући:
Cython-ов домен није ограничен само на нумеричко израчунавање. На пример, lxml XML алатка је написана највише у Cython-у, и као његов претходник Пирекс, Cython се користи да се обезбеди Пајтону бајндинг за многе C и C++ библиотеке као што је библиотека размењеивања порука ZeroMQ.[19] Cython такође може бити коришћен да се направи паралелна обрада за машине вишејезгарних процесора; ова карактеристика користи библиотеку OpenMP. Види јошРеференце
Литература
|