WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Cython
Класс языка язык программирования
Появился в 28 июля 2007
Автор Robert Bradshaw, Stefan Behnel и др.
Выпуск 0.28.5 (3 августа 2018)
Испытал влияние Pyrex
Лицензия Apache License
Сайт cython.org

Cython — язык программирования, упрощающий написание модулей С/С++ кода для Python. Кроме стандартного синтаксиса Python, поддерживаются:

  • прямой вызов функций и методов С/С++ из кода на Cython;
  • строгая типизация переменных, классов, атрибутов классов.

Код Cython преобразуется в С/С++ код для последующей компиляции и впоследствии может использоваться как расширение стандартного Python или как независимое приложение со встроенной библиотекой выполнения Cython.

История

Cython является наследником языка программирования Pyrex, но имеет больше возможностей и оптимизаций.[1]

Преимущества

Cython имеет очень близкий синтаксис к Python.

Особое преимущество такого «бесшовного» подхода в смешивании Python/C состоит в том, что существующий Python-код может быть настроен на работу почти со скоростью С простым добавлением нескольких статических объявлений типов и некоторыми адаптациями в критических циклах, без необходимости в сложном коде интерфейса. Скорость кодирования и читабельность кода остаются сравнимы с Python.

В связи с пониженными накладными расходами в управляющих структурах (особенно в циклах), оптимистической оптимизацией и (ограниченным) выводом типов, скомпилированный Cython код Python обычно выполняется быстрее, чем в CPython 2.6.x, хотя абсолютное улучшение в значительной степени зависит от кода. С объявлениями типов типичные ускорения для численных вычислений/массивов составляет около 100—1000 раз.[2] Для сравнения, типичное увеличение скорости при использовании Psyco (JIT-компилятор для Python) составляет около 4—100 раз.[3]

Cython был оптимизирован для низких накладных расходов на вызов подпрограмм, в связи с чем вызов из Python внешнего C/C++ кода через оболочку Cython, как правило, быстрее, чем при использовании большинства других решений.[4][5]

Пример

Следующий пример вычисляет функцию Аккермана:

# Файл ackermann.pyx
cdef ackermann(int m, int n):
    if m == 0:
        return n + 1
    elif n == 0:
        return ackermann(m - 1, 1)
    else:
        return ackermann(m - 1, ackermann(m, n - 1))

print("Ackermann:")
print(ackermann(0, 3))
print(ackermann(1, 4))

Чтобы получить исполняемый файл, его нужно транслировать в Си (здесь и ниже - команды оболочки UNIX-подобной системы)[6]:

cython --embed ackermann.pyx -o ackermann.c

После чего можно откомпилировать полученный промежуточный файл[6]:

gcc -g -O2 -o ackermann ackermann.c `python-config --includes --ldflags`

Альтернативы

Для привязки библиотек Си может использоваться SWIG, который поддерживает сразу несколько языков программирования, но из-за своей обобщённости несколько проигрывает Cython в лёгкости использования (количестве необходимого дополнительного кода). Другие значимые аналоги: Parakeet (использует LLVM и JIT-компиляцию специальным образом размеченного кода на Python)[7] и Nuitka (транслятор из Python с C++, который подобно PyPy пытается типизировать программу на Python во время компиляции)[8][6].

См. также

Примечания

Ссылки

Источники

  • Stefan Behnel, Robert Bradshaw, Craig Citro, Lisandro Dalcin, Dag Sverre Seljebotn, Kurt Smith. Cython: The Best of Both Worlds // Computing in Science and Engineering. — 2011. № 13.2. — P. 31-39. DOI:10.1109/MCSE.2010.118.
  • Philip Herron. Cython: Python to native code // Linux Format. — 2014. № 12 / LXF191. — P. 84-87. ISSN 1470-4234.
  • Philipp Herron. Learning Cython Programming. — Packt, Сентябрь2013. — 110 p. ISBN 9781783280797.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии