Cython для IronPython

Есть ли что-то эквивалентное Cython для IronPython? То есть способ компилировать простые функции с использованием аннотаций типов для повышения производительности? Я знаю, что одним из преимуществ IronPython является возможность быстро писать функции на чем-то вроде C# или F#, а затем импортировать их, но это может быть обременительно для пользователей, знакомых только с Python.


person Tristan    schedule 12.01.2010    source источник


Ответы (1)


Хм... IronPython уже быстрее, чем старый добрый CPython :)

Сказав это, вы можете создавать двоичные файлы из исходного кода с помощью pyc (см. <IronPython 2.6 Install Dir>\Tools\Scripts\pyc.py).

Похоже, есть несколько вариантов вывода, включая создание dll. Я предполагаю, что можно import подобную dll из обычной .py программы (хотя я никогда этого не пробовал).

Я действительно не знаю, повысит ли это производительность по сравнению с тем, что вы уже получаете с IronPython (вероятно, это улучшит время запуска).


Обновлять:

Я только что провел небольшое тестирование, и преобразование в exe дает мне действительно незначительное улучшение скорости на 3-5% и не помогает времени запуска. Это казалось хорошей идеей :|

person Seth    schedule 12.01.2010
comment
Я не говорю о CPython, я говорю о Cython. Cython скомпилирован на языке C, переведенном из кода Pythonesque. Это может привести к 500-кратному увеличению скорости по сравнению с CPython или Ironpython для числового кода. Во-вторых, просто неправда, что IronPython намного быстрее CPython: он конкурентоспособен, иногда медленнее, иногда быстрее. Например, тест Ричардса на этой странице в два раза медленнее. - person Tristan; 13.01.2010
comment
Извините, я перечитал свой ответ и вижу, как это будет немного запутанно. Я хотел сказать, что IronPython уже динамически скомпилирован в машинный код; если вы конвертируете в EXE, вы получите двоичный образ DLR, который будет автоматически скомпилирован в машинный код. Я не могу представить, что вы можете работать быстрее (возможно, написать DLL на C# и вызвать ее будет быстрее, но тогда вы будете писать на C#). Кроме того, по моему опыту (с моими программами), IronPython быстрее, чем CPython, если исключить время запуска (которое нужно исключить). - person Seth; 13.01.2010
comment
Если вы хотите улучшить время запуска, вам следует использовать библиотеки AOT IronPython. - person konrad.kruczynski; 27.01.2012
comment
@konrad: что такое AOT, пожалуйста, избегайте таких расплывчатых аббревиатур - person Oliver; 10.07.2013
comment
@Schollii: mono-project.com/AOT эквивалентом .NET будет NGEN: msdn.microsoft.com/en-us/library/6t9t5wcf( v=vs.110).aspx - person konrad.kruczynski; 10.07.2013
comment
@Seth, смысл в том, чтобы получить код CLR вместо кода DLR. То есть иметь переменные с типами, которые СТАТИЧЕСКИ известны, чтобы JIT мог соответствующим образом оптимизировать. Например, если известно, что переменная содержит System.Integer32, и вы добавляете две такие переменные, оптимизированный код может быть одной машинной инструкцией. Избегайте любых проверок, которые должен выполнять код DLR. (Хотя, надеюсь, DLR достаточно умен, чтобы предварительно проверять типы переменных перед циклом и направлять оптимальный код внутри цикла. Если это так, то, возможно, CLR против DLR не такая уж большая проблема. Сейчас изучаю эту тему.) - person ToolmakerSteve; 18.12.2013