Когда вы должны использовать XS? - PullRequest
2 голосов
/ 13 июля 2011

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

Ответы [ 2 ]

10 голосов
/ 13 июля 2011

Я могу придумать, по крайней мере, три причины использовать XS:

  1. У вас есть библиотека C, к которой вы хотите получить доступ в Perl 5
  2. У вас есть блок кода, который явно замедляет вашу программу, и он будет быстрее, если будет написан на C
  3. Вам нужен доступ к тому, что доступно только в XS

Причина 1 очевидна и не нуждается в объяснении.

Когда вам действительно нужна причина 2, она менее очевидна. Часто вам лучше посмотреть, как структурирован код. Вы должны вызывать причину 2, только если вы профилировали свой код и у вас есть тест и набор тестов , чтобы доказать, что код XS быстрее и правильнее.

Причина 3 - опасная причина. Редко когда вам действительно нужно посмотреть в Perl, чтобы что-то сделать, но есть хотя бы один действительный случай .

3 голосов
/ 13 июля 2011

В некоторых случаях лучшее управление памятью является еще одной причиной использования XS. Например, если у вас очень большой блок объектов похожего типа, этим можно управлять более эффективно с помощью XS. KinoSearch использует это для токенов, например, когда начальные и конечные смещения в большой строке могут управляться более эффективно через XS, чем в виде огромного пула скаляров. PDL также имеет аспект управления памятью, а также скорость.

Существуют предложения по интеграции некоторых из этого подхода в ядро ​​Perl в долгосрочной перспективе, изначально, потому что это дает возможность улучшить обмен данными в потоке: см .: http://openparallel.com/2011/07/05/a-new-hope-for-efficient-safe-data-sharing-between-threads-in-perl/.

...