Когда вы должны использовать XS?
Я пишу доклад по XS, и мне нужно знать, когда сообщество считает, что это правильно - обратиться к XS.
2 ответа
Я могу придумать как минимум три причины использовать XS:
- У вас есть библиотека C, к которой вы хотите получить доступ в Perl 5
- У вас есть блок кода, который заметно замедляет вашу программу и будет быстрее, если он будет написан на C
- Вам нужен доступ к тому, что доступно только в XS
Причина 1 очевидна и не нуждается в объяснении.
Когда вам действительно нужна причина 2, это менее очевидно. Часто вам лучше посмотреть, как структурирован код. Вы должны вызывать причину 2 только в том случае, если вы профилировали свой код и имеете набор тестов и тестов, чтобы доказать, что код XS быстрее и правильнее.
Причина 3 - опасная причина. Редко когда вам действительно нужно посмотреть в Perl, чтобы что-то сделать, но есть хотя бы один действительный случай.
В некоторых случаях лучшее управление памятью является еще одной причиной использования XS. Например, если у вас очень большой блок объектов похожего типа, этим можно управлять более эффективно с помощью XS. KinoSearch
использует это для токенов, например, когда начальные и конечные смещения в большой строке могут управляться более эффективно через XS, чем в виде огромного пула скаляров. PDL
также имеет аспект управления памятью, а также скорость.
Существуют предложения по интеграции некоторых из этого подхода в ядро Perl в долгосрочной перспективе, первоначально потому, что он дает возможность улучшить обмен данными в потоке: см.: http://openparallel.com/2011/07/05/a-new. надежда на эффективный, безопасный обмен данными между потоками в perl /.