Svoboda | Graniru | BBC Russia | Golosameriki | Facebook

Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Cython — язык программирования, упрощающий написание модулей С/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].

См. также

Примечания

  1. Release 3.0.5 — 2023.
  2. 1 2 https://docs.cython.org/en/latest/src/quickstart/install.html
  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. 1 2 3 Herron, 2014.
  9. Parakeet: a runtime compiler for numerical Python. Дата обращения: 27 ноября 2014. Архивировано из оригинала 12 ноября 2014 года.
  10. 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.
Эта страница в последний раз была отредактирована 1 марта 2023 в 16:48.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).