Как я могу использовать класс C++ из Perl?

У меня есть набор классов, написанных на C++. Как лучше всего вызвать их из Perl-скрипта? Спасибо.


person Sam Lee    schedule 01.06.2009    source источник


Ответы (3)


Я не особо люблю SWIG и предпочитаю писать интерфейсный код самостоятельно. Perl поставляется с своего рода псевдоязыком под названием «XS» для взаимодействия с C или C++. К сожалению, для того, чтобы его использовать, вам нужно будет знать как минимум C, Perl, а затем еще и кое-что узнать об API интерпретатора. Если вы уже хорошо знаете Perl и C, это не такой уж большой шаг. Взгляните на следующие основные документы по XS:

  1. perlxstut (руководство по XS)
  2. perlxs (справочник по XS)
  3. perlapi (API интерпретатора)

Кроме того, в Интернете есть множество руководств и инструкций.

Теперь взаимодействие с C++ с помощью XS требует некоторых дополнительных шагов. Поначалу это может немного разочаровывать, но как только вы это сделаете, все встанет на свои места. В этом отношении основная документация в лучшем случае скудна. Но еще не все потеряно. Маттиа Барбон, создатель привязок wxWidgets для Perl, написал отличный инструмент «XS++», который делает это почти невероятно простым (или таким же простым, как XS). Он включен в Wx, но мы работаем над тем, чтобы выделить его в отдельный дистрибутив. Эта работа в процессе. Вы можете найти код Mattia XS++ и моя модифицированная версия на github.

За исключением выпуска автономного XS++ для CPAN, я бы посоветовал научиться писать XS для C++ из других ресурсов:

  • Довольно давно Джон Кейзер написал отличное руководство по XS и C++. Он также включает дополнительные указатели на полезные инструменты и документацию.
  • Я изучил XS&C++ из этого учебника и нескольких примеров, которые нашел на CPAN. Не помню, что я тогда смотрел. Но теперь я могу указать на свою собственную работу в качестве примера (хорошего или плохого, я не знаю): Math::SymbolicX::FastEvaluator.
  • Точно так же планируемый дистрибутив XS++ содержит полный (хотя и бессмысленный) пример использования XS++ для взаимодействия с C++ и Perl. Поскольку XS++ переводится в обычный XS, вы можете использовать его для создания примеров.

PS: есть еще модуль Inline::CPP. Если это работает, это, вероятно, самое простое решение. Я сомневаюсь, что он может обрабатывать шаблоны.

person tsee    schedule 01.06.2009
comment
Забыл упомянуть небольшую деталь: в учебнике Джона Кейзера есть ссылка на каталог CPAN Дина Рериха. Ссылка на устаревшее зеркало CPAN. Вместо этого попробуйте следующее: search.cpan.org/CPAN/authors/id/DMR - person tsee; 01.06.2009
comment
XS++ был выпущен как ExtUtils::XSpp для CPAN: search.cpan.org/dist/ExtUtils- XSpp Он все еще находится в зачаточном состоянии, но я успешно создал с его помощью Wx.pm. - person tsee; 19.06.2009

Проверьте http://www.swig.org :

«SWIG — это инструмент разработки программного обеспечения, который связывает программы, написанные на C и C++, с различными языками программирования высокого уровня. SWIG используется с различными типами языков, включая распространенные языки сценариев, такие как Perl, PHP, Python, Tcl и Ruby».

person Igor Krivokon    schedule 01.06.2009

Обычно я выбираю XS, например tsee, но есть также Inline::C ( или Inline::CPP в этом случае). Я не люблю SWiG и стараюсь избегать пакетов, построенных вокруг него.

person jettero    schedule 01.06.2009
comment
ОП, вероятно, хочет Inline::CPP. - person runrig; 02.06.2009
comment
Конечно верно. Я лично даже не знал об этом. - person jettero; 02.06.2009
comment
+1 Модули Inline действительно значительно упрощают интеграцию чужого кода в Perl. - person mob; 10.10.2009