Cython
| Cython | |
|---|---|
| | |
| Класс языка | свободное и открытое программное обеспечение, реализация языка программирования[вд], транспайлер, язык программирования и Python-библиотека[вд] |
| Появился в | 28 июля 2007 |
| Автор | Robert Bradshaw, Stefan Behnel и др. |
| Выпуск |
|
| Тестовая версия | 3.0.0 alpha 11 |
| Испытал влияние | Pyrex |
| Лицензия | Apache License |
| Сайт | cython.org |
| ОС | Linux, Unix-подобная операционная система, Windows[2] и macOS[2] |
Cython (произн. /ˈsaɪθɒn/) — язык программирования, упрощающий написание модулей на С/C++ для Python. Кроме стандартного синтаксиса Python, поддерживаются:
- прямой вызов функций и методов C/C++ из кода на Cython;
- строгая типизация переменных, классов, атрибутов классов.
Код Cython преобразуется в C/C++ код для последующей компиляции и впоследствии может использоваться как расширение стандартного Python или как независимое приложение со встроенной библиотекой выполнения Cython.
История
Cython является наследником языка программирования Pyrex, но имеет больше возможностей и оптимизаций[3].
Преимущества
Cython имеет очень близкий синтаксис к Python.
Особое преимущество такого «бесшовного» подхода в смешивании Python/C состоит в том, что существующий Python-код может быть настроен на работу почти со скоростью С простым добавлением нескольких статических объявлений типов и некоторыми адаптациями в критических циклах, без необходимости в сложном коде интерфейса. Скорость кодирования и удобочитаемость кода остаются сравнимы с Python.
В связи с пониженными накладными расходами в управляющих структурах (особенно в циклах), оптимистической оптимизацией и (ограниченным) выводом типов, скомпилированный Cython код Python обычно выполняется быстрее, чем в CPython 2.6.x, хотя абсолютное улучшение в значительной степени зависит от кода. С объявлениями типов типичные ускорения для численных вычислений/массивов составляет около 100—1000 раз[4]. Для сравнения, типичное увеличение скорости при использовании Psyco (JIT-компилятор для Python) составляет около 4—100 раз[5].
Cython был оптимизирован для низких накладных расходов на вызов подпрограмм, в связи с чем вызов из Python внешнего C/C++ кода через оболочку Cython, как правило, быстрее, чем при использовании большинства других решений[6][7].
Пример
Следующий пример вычисляет функцию Аккермана:
# Файл ackermann.pyx
def 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-подобной системы)[8]:
cython --embed ackermann.pyx -o ackermann.c
После чего можно откомпилировать полученный промежуточный файл[8]:
gcc -g -O2 -o ackermann ackermann.c `python-config --includes --ldflags`
Альтернативы
Для привязки библиотек Си может использоваться SWIG, который поддерживает сразу несколько языков программирования, но из-за своей обобщённости несколько проигрывает Cython в лёгкости использования (количестве необходимого дополнительного кода). Другие значимые аналоги: Parakeet (использует LLVM и JIT-компиляцию специальным образом размеченного кода на Python)[9] и Nuitka (транслятор из Python с C++, который подобно PyPy пытается типизировать программу на Python во время компиляции)[10][8].
См. также
Примечания
- ↑ Release 3.3.0 — 2026.
- ↑ 1 2 https://docs.cython.org/en/latest/src/quickstart/install.html
- ↑ Различия с Pyrex Архивировано 25 июля 2011 года.
- ↑ gmane.comp.python.cython.devel — Passing a pointer from Python. Дата обращения: 30 ноября 2010. Архивировано из оригинала 14 февраля 2017 года.
- ↑ Psyco — Introduction. Дата обращения: 30 ноября 2010. Архивировано 29 ноября 2019 года.
- ↑ wrapper benchmarks for several Python wrapper generators (except Cython). Дата обращения: 30 ноября 2010. Архивировано из оригинала 4 апреля 2015 года.
- ↑ wrapper benchmarks for Cython, Boost.Python and PyBindGen. Дата обращения: 30 ноября 2010. Архивировано 3 марта 2016 года.
- ↑ 1 2 3 Herron, 2014.
- ↑ Parakeet: a runtime compiler for numerical Python. Дата обращения: 27 ноября 2014. Архивировано из оригинала 12 ноября 2014 года.
- ↑ Nuitka Home. Дата обращения: 27 ноября 2014. Архивировано 30 мая 2020 года.
Ссылки
Источники
- 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.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.