Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Стоит ли писать модули с XSUB ?


Автор: fray 26.5.2008, 18:22
Вопрос такой, стоит ли писать модули через XSUB, каков выигрышь в скорости, поделитесь кто уже писал ? 

Автор: yura_nev 28.5.2008, 11:07
при вычислениях, например стоит. у меня вычисление специфической хеш-функции ускорилось по субъективным ощущениям раз в 100 после переписывания ее с PP на XS.

на PP:
1500 вычислений этого хеша занимало ~10 сек.

на XS:
1500 вычислений этого хеша с записью в файл заняло доли секунды, плюс к тому когда количество вычислений вырасло до 7500 - на время это никак заметно не повлияло.

вот даж замерил - 7500 вычислений = ~0.04 сек.
итого, производительнось этого модуля увличилась примерно в (7500/1500)*(10/0.04) = 1250 раз smile

Автор: fray 30.5.2008, 14:57
да у же сделал модуль понял, слабые стороны xs.  smile 

Автор: ginnie 30.5.2008, 15:02
Уважаемый fray, не поделитесь своими соображениями по слабым сторонам XS?

Автор: shamber 30.5.2008, 15:21
Хоть и не fray.


 компилирование

Автор: ginnie 30.5.2008, 15:28
Уважаемый shamber, если возможно, расширьте свой ответ, почему компиляция является для Вас слабой стороной? По соображениям кросплатформенности?

Автор: shamber 30.5.2008, 15:37
Цитата(ginnie @  30.5.2008,  15:28 Найти цитируемый пост)
 По соображениям кросплатформенности?


И это тоже, но не только.

Не на каждой машине возможно откомпилировать модули, для это нужна MS как минимум (ЕСЛи ActiveState стоит).
А если и еще на чужие хостинги ставить, а доступа к косоли нет.
Хотя конечно *.ppm может помочь, но может инета не быть.


Хотя все-таки, это полностью минусом назвать нельзя(больше похоже на отговорку smile). Особенно если прирост производительности 1250 раз smile

Автор: ginnie 30.5.2008, 15:59
Уважаемый shamber, XS и фраза "А если и еще на чужие хостинги ставить, а доступа к косоли нет" у меня в голове плохо совмещаются. XS эффективен, когда не хватает скорости эквивалента на Perl, т.е. когда для проекта важна производительность. И в таком случае вариантов с отсутствием доступа к консоли обычно не бывает smile 

Автор: shamber 30.5.2008, 16:06
Уважаемый ginnie, 
я ж и сказал что это больше из разряда отговорок.
т.е. я с вами полностью согласен.

Автор: tolkien 30.5.2008, 17:10
Если для произоводительности нужно компилировать, то зачем тогда PERL? Не лучше ли писать на С++. Ведь будет быстрее чем на PERL всегда. 

Автор: shamber 30.5.2008, 17:17
hollywar?

Автор: ginnie 30.5.2008, 17:31
Уважаемый tolkien, предположим нам надо разработать некоторый проект. Оцениваем время разработки макета и получаем, что разработка на Perl занимает в 5 раз меньше времени, чем на С++. Реализовываем макет. Тестируем и получаем, что разработанная система очень интенсивно использует один из модулей (например вывод с использованием шаблонизатора). Переписывание части (или всего) шаблонизатора на XS займет еще какое-то время, но гораздо меньшее чем разработка всей системы, а выигрыш окажется весьма ощутимым. Обычно происходит именно так. Поэтому производительность почти всегда - не единственный критерий.

P.S. Приятно, что Perl позволяет это делать!

Автор: sir_nuf_nuf 31.5.2008, 08:56
Еще недостатки:
1) работа с много поточностью
Если мы используем не thread safe C библиотеку , получаем такую же на перле. => все вытекающие
2) Отладка ошибок.
Согласитесь, что segmentation fault отловить довольно сложно, по крайней мере сложнее, чем die.

Автор: vadiml 1.6.2008, 17:02
shamber
Не на каждой машине возможно откомпилировать модули, для это нужна MS как минимум (ЕСЛи ActiveState стоит).
А если и еще на чужие хостинги ставить, а доступа к косоли нет.


в большинстве случаев можно создать можно создать пердкомпилированый пакет, например rpm

tolkien
Если для произоводительности нужно компилировать, то зачем тогда PERL? Не лучше ли писать на С++. Ведь будет быстрее чем на PERL всегда. 

я бы посоветовал Вам попробовать написать более-менее крупную программу на C++ и перле, и сравнить трудозатраты.
У меня на перле получается быстрее.

другой вопрос, как программа будет распространяться -- чаще проще приложить пару библиотек для с++, чем весь перл
поэтому я когда пишу программу совершенно незнакомым людям чтоб 1 раз отдать -- пишу на С, если я буду её постоянно сопровождать -- то буду писать на перле что мне съэкономит массу времени как при разработке, так и в дальнем.

---
и ещё по поводу XS
если мне хочется использовать какую-нибудь С-библиотеку, то я скорее буду её использовать на перле через XS, чем писать на С, т.к. делается это очень легко.
а отладку XS можно делать, например, в gdb

Добавлено через 3 минуты и 36 секунд
sir_nuf_nuf
segmentation fault отловить довольно сложно, по крайней мере сложнее, чем die. 

это сильно зависит от того, как Вы пишите на С и понимаете сборку мусора перла.

Автор: sir_nuf_nuf 2.6.2008, 22:15
vadiml, segmantation fault бывает даже когда не пишешь на C совсем и хорошо понимаешь механизм сборки мусора перл:

Если используешь XS библиотеку - такое возможно.
Самое неприятное когда бага XS библиотеки проявляется не сразу, а при определенных условиях.
Имеем: при определенных условия perl интерпретатор просто получает segmentation fault, что бы найти откуда он ее получает, 
нужно уметь юзать gdb и хорошо понимать стек вызовов самого интерпретатора, ну или апача как в нашем случае

Автор: vadiml 3.6.2008, 20:10
sir_nuf_nuf, 
у меня уже есть хороший опыт ловли сегфолтов на http://www.qt-apps.org/content/show.php/Perl+Qt4?content=69748  smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)