| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 раз |
| Автор: fray 30.5.2008, 14:57 |
| да у же сделал модуль понял, слабые стороны xs. |
| Автор: 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 |
И это тоже, но не только. Не на каждой машине возможно откомпилировать модули, для это нужна MS как минимум (ЕСЛи ActiveState стоит). А если и еще на чужие хостинги ставить, а доступа к косоли нет. Хотя конечно *.ppm может помочь, но может инета не быть. Хотя все-таки, это полностью минусом назвать нельзя(больше похоже на отговорку |
| Автор: ginnie 30.5.2008, 15:59 |
| Уважаемый shamber, XS и фраза "А если и еще на чужие хостинги ставить, а доступа к косоли нет" у меня в голове плохо совмещаются. XS эффективен, когда не хватает скорости эквивалента на Perl, т.е. когда для проекта важна производительность. И в таком случае вариантов с отсутствием доступа к консоли обычно не бывает |
| Автор: 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 |