Вопрос

В настоящее время я работаю над проектом, в котором мне пришлось обернуть классы C ++ в Python, чтобы иметь возможность создавать сценарии программы.Итак, мой конкретный опыт также включал встраивание интерпретатора Python в нашу программу.

Альтернативы, которые я пробовал, были:

  • Повышение.Python

    Мне понравился более чистый API, созданный Boost.Python, но тот факт, что для этого потребовалось бы, чтобы пользователи устанавливали дополнительную зависимость, заставил нас переключиться на SWIG.

  • ГЛОТОК

    Главным преимуществом SWIG для нас было то, что конечным пользователям не требуется устанавливать его для использования готовой программы.

Что вы использовали для этого, и каков был ваш опыт работы с этим?

Это было полезно?

Решение

Я использовал оба варианта (для одного и того же проекта):Boost лучше интегрирован с STL, и особенно с исключениями C ++.Кроме того, его механизм управления памятью (который пытается объединить управление памятью C ++ и Python GC) намного более гибкий, чем у SWIG.Тем не менее, SWIG имеет намного улучшенная документация, никаких внешних зависимостей, и если вы получите библиотеку, завернутую в SWIG для Python, вы пройдете более половины пути к получению оболочки Java / Perl / Ruby.

Я не думаю, что есть четкий выбор:для небольших проектов я бы выбрал Boost.Python опять же, для более крупных долгоживущих проектов дополнительные инвестиции в SWIG того стоят.

Другие советы

РЕДАКТИРОВАТЬ - проект Robin, к сожалению, заброшен, и сегодня от него мало толку

Я использовал Робин с большим успехом.

Великий интеграция с типами C ++ и создает единый cpp-файл для компиляции и включения в ваш общий объект.

Я предлагаю ГЛОТОК.ГЛОТОК лучше, чем глоток, по следующим причинам:

  1. Для данного набора файлов swig генерирует больше повторяющегося (служебного) кода, чем SIP.SIP удается генерировать меньше дублирующегося (служебного) кода за счет использования файла библиотеки, который может быть статически или динамически связан.Другими словами, SIP обладает лучшей масштабируемостью.

  2. Время выполнения SIP намного меньше, чем у SWIG.Ссылаться Инструменты для создания оболочки Python:Исследование производительности.К сожалению, ссылка кажется неработающей.У меня есть личная копия, которой можно поделиться по запросу.

пирекс или китон это также хорошие и простые способы смешения двух миров.

Перенос C ++ с помощью этих инструментов немного сложнее, чем перенос C, но это можно сделать. Здесь есть страница вики об этом.

Большим плюсом Boost::Python является то, что он позволяет завершать табуляцию в оболочке ipython:Вы импортируете класс C ++, предоставляемый Boost напрямую, или создаете его подкласс, и с этого момента он действительно ведет себя как чистый класс Python.

Обратная сторона:Установка и использование Boost занимает так много времени, что вся экономия времени на заполнении вкладок никогда не окупится ;-(

Так что я предпочитаю Глоток:Никаких наворотов, но работает надежно после короткого вводного примера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top