software.wikisort.org - Язык_программирования

Search / Calendar

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

Cython
Класс языка открытое программное обеспечение, реализация языка программирования[d], Транспайлер, язык программирования, свободное программное обеспечение и библиотека для Питона[d]
Появился в 28 июля 2007
Автор Robert Bradshaw, Stefan Behnel и др.
Выпуск 0.29.32 (29 июля 2022)[1]
Тестовая версия 3.0.0a11 (31 июля 2022)[2]
Испытал влияние Pyrex
Лицензия Apache License
Сайт cython.org
ОС Linux и Unix-подобная операционная система

Код 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
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-подобной системы)[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].


См. также



Примечания


  1. 0.29.32. Дата обращения: 21 августа 2022. Архивировано 18 августа 2022 года.
  2. 3.0.0a11. Дата обращения: 21 августа 2022. Архивировано 21 августа 2022 года.
  3. Различия с Pyrex Архивировано 25 июля 2011 года.
  4. gmane.comp.python.cython.devel — Passing a pointer from Python (недоступная ссылка). Дата обращения: 30 ноября 2010. Архивировано 14 февраля 2017 года.
  5. Psyco — Introduction. Дата обращения: 30 ноября 2010. Архивировано 29 ноября 2019 года.
  6. wrapper benchmarks for several Python wrapper generators (except Cython) (недоступная ссылка). Дата обращения: 30 ноября 2010. Архивировано 4 апреля 2015 года.
  7. wrapper benchmarks for Cython, Boost.Python and PyBindGen. Дата обращения: 30 ноября 2010. Архивировано 3 марта 2016 года.
  8. Herron, 2014.
  9. Parakeet: a runtime compiler for numerical Python (недоступная ссылка). Дата обращения: 27 ноября 2014. Архивировано 12 ноября 2014 года.
  10. Nuitka Home. Дата обращения: 27 ноября 2014. Архивировано 30 мая 2020 года.

Ссылки



Источники





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

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

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