Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2011 20:38:11

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Препроцесор в Python

Андрей Светлов
Не только yield. Неприятно удивило, что в Cython отсутствуют class attributes. Было и еще по мелочам.
Всё равно остаётся из чего выбрать =)
Андрей Светлов
Про release и debug - ничего не понял.
Суть в том что релиз в такой комбинации можно собрать только из шела, или с помощью отдельного скрипта. ПрепроцесСор - это более менее удобное решение для поддержания совместимости.
P.S. Даже не релиз а вообще любой питоновский проект оптимизированный ситоном.



Отредактировано (Янв. 16, 2011 20:42:43)

Офлайн

#2 Янв. 16, 2011 20:46:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Препроцесор в Python

Окончательно запутался. Видимо, мы совсем по разному используем Python/Cython.



Офлайн

#3 Янв. 16, 2011 20:52:18

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Препроцесор в Python

Андрей Светлов
Окончательно запутался. Видимо, мы совсем по разному используем Python/Cython.
Давай распутаем, объясняй как у тебя.



Офлайн

#4 Янв. 17, 2011 16:02:50

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Препроцесор в Python

alexx11
Давай распутаем
Хорошо, я попробую первый шаг. Изложу вышесказанное, на пальцах.

Типичный проект, который надо оптимизировать
1. Кодинг букв на Python.
2. Выбор критических участков кода, подлежащих оптимизации.
3. Перевод этой части кода в Cython.
4. Сборка. Теперь мы имеем проект на двух языках, который надо собирать двумя различными сборщиками. Вообще говоря не сложно.
5. Запуск. Тестирование.
6. ??? Проделать пп1-5 N раз.
7. PROFIT

Одни хитрые люди подумали, что если меньше собирать то можно больше кодить, и решили сделать п.3 такой что б он был на 2 языках одновременно (т.е. совместить с п.1), а переключался препроцессором. В таком случае сборка понадобится всего лишь один раз, непосредственно перед п.7, все остальные разы это обычный проект на Python. А хитрые они потому что препроцессора в питоне нет, а gpp перекручен через одно место.
Да ещё, чуть не забыл ещё: п4 включает в себя ловлю блох на Cython, что при каждой сборке должно “доставлять” тру питонеру.



Отредактировано (Янв. 17, 2011 16:15:19)

Офлайн

#5 Янв. 17, 2011 17:07:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Препроцесор в Python

alexx11
2. Выбор критических участков кода, подлежащих оптимизации.
3. Перевод этой части кода в Cython.
Полезно иметь две версии - Python и Cython. Переключать их, например, так: если есть Cython оптимизация - используем ее.
Нет - возвращаемся к pure python implementation. Оставляем возможность принудительного использования pure python для тестирования.
Делается, например, через установку environment variable.
alexx11
4. Сборка. Теперь мы имеем проект на двух языках, который надо собирать двумя различными сборщиками. Вообще говоря не сложно.
Пишем setup.py в котором все есть. Для сборки нужно выполнить setup.py install или setup.py develop

alexx11
5. Запуск. Тестирование.
Как правило Cython модули великолепно подходят для юниттестов. Которые тоже запускаются одной командой.

Проверять Cython модули нужно всё равно в “рабочей” конфигурации, причем постоянно.
Это связано с тем, что при оптимизации довольно сильно изменяется реализация при неизменном public API.

Наличие юниттестов позволяет меньше полагаться на внимательность и не обременять себя обезьяньим клацаньем по кнопкам.
Запустил тесты, увидел заветное ok - двигайся дальше.

Как-то так. При этом подходе не вижу необходимости в препроцессоре - все и так получается быстро и здорово.



Офлайн

#6 Янв. 17, 2011 18:16:47

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Препроцесор в Python

Андрей Светлов Я понял, попробую подытожить в двух словах и привести сравнение.
В пользу препроцессора.
Синхронизация кода.
Разделение труда. (кодим, потом собираем.)

В пользу комплексной сборки.
Не нужен препроцессор.
Повышенная готовность, рабочей версии.

Андрей Светлов
При этом подходе не вижу необходимости в препроцессоре
Возможно, мне как новичку, который стоит в начале пути, перед выбором одного из вариантов, хочется велосипед понадёжней и побыстрей, и легче принимаются подобные решения. Поэтому я думаю таки да, ситону быть, и препроцессору тоже =)



Офлайн

#7 Янв. 17, 2011 18:35:41

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Препроцесор в Python

Используя свой опыт программирования, выращенный из … (пропускаю) и приведший к си++ (как универсальному инструменту) , могу сказать, что питон самодостаточен (CPython - это от лукавого). Но питон без си - это то же самое, что полиэтиленовые пакетики без химической промышленности. Другими словами, надо быть готовым уметь при необходимости писать даже на ассемблере (а значит чухать ресурсы). Что я хочу сказать, нельзя понять интегральное уравнение, если не знаешь таблицу умножения.



Отредактировано (Янв. 17, 2011 20:03:28)

Офлайн

#8 Янв. 17, 2011 20:16:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Препроцесор в Python

alexx11, мой подход не является чем-то уникальным - так работают на очень многих проектах, начиная с CPython.



Офлайн

#9 Янв. 17, 2011 20:23:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Препроцесор в Python

Isem
CPython - это от лукавого.
Это как?
Ежели имелся в виду Cython - то утверждение тоже не верное. Очень удобный способ писать C Extensions. Один из самых лучших, ИМХО. Для плюсов еще есть альтернативы, но в мире С Cython весьма неплох.



Офлайн

#10 Янв. 17, 2011 20:26:43

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Препроцесор в Python

Андрей Светлов
Ежели имелся в виду Cython - то утверждение тоже не верное. Очень удобный способ писать C Extensions. Один из самых лучших, ИМХО. Для плюсов еще есть альтернативы, но в мире С Cython весьма неплох.
Cython, конечно же.
Только чем плох Python тогда?
Я не говорю, что Cython-ом не надо пользоваться. Считаем, что это просто библиотека (нестандартная) для питона. Он не базисный с точки зрения фундаментального подхода к программированию (об этом речь, как я понимаю).



Отредактировано (Янв. 17, 2011 20:38:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version