LINUX.ORG.RU

Импорт C++ кода в Python при помощи пакета SWIG

 ,


0

2

Довольно подробно описано взаимодействие различных модулей при импорте. Рассмотрены различные возможности по настройке импорта, обработка указателей и ссылок, массивов C++, генерация исключений, сериализация импортированных классов, импорт шаблонов. Приведен пример универсального Makefile для импорта.

>>> Подробности

★★★★★

Проверено: post-factum ()

Ответ на: комментарий от universe_entity

Да, как ни странно справляется. У SWIG-а свой препроцессор, некоторых вещей он не понимает (напр вложенных шаблонов, или сложных выражений при определении глобальных констант), но вобщем он причесывает довольно здоровые файлы. Что весьма здорово - он неплохо реализует и перегрузку ф-й, в т.ч. и параметризованных. Кучу невложенных шаблонов тоде хорошо обрабатывает...

Один из минусов - здоровые файлы оболочек получаются, собираются небыстро... (сек по 10 g++ тормозит;-)) но буст думаю в этом отношении не лучше, сырцов мало а бинарники - ну Вы сами писали;-)

AIv ★★★★★ ()
Ответ на: комментарий от universe_entity

А если использовать сип то.. Оригинальный хидер:

class x {
public:
  void make_me_happy(int how_many);
  //...
};
Для сипа просто достаточно записать так: Ну и указать только паблик или те что нужны методы.
class x {
%TypeHeaderCode
#include "Оригинальный хидер"
%End
public:
  void make_me_happy(int how_many);
  //...
};
После ковыряний со свингом, сип выглядит куда более органичней и удобней.

zJes ★★ ()
Ответ на: комментарий от baverman

Позориться? Да ничуть. Идея комбинирования языков у меня всегда вызывала только ассоциации с тормозами. Обычно получаются уродливые программы, в качестве зависимости имеющие питон. Какого хрена? Интерфейсы писать можно на C++ безо всякого питона, хоть на gtk, хоть на qt. Или не осилили?

HappySquirrel ()
Ответ на: комментарий от HappySquirrel

> Интерфейсы писать можно на C++ безо всякого питона, хоть на gtk, хоть на qt. Или не осилили?

А можно и на ассемблере, без всяких Qt. Или не осилили?

tailgunner ★★★★★ ()
Ответ на: комментарий от AIv

Ну только то, что планируется использовать в питоне.
Внутреннюю структуру не надо. :)

zJes ★★ ()
Ответ на: комментарий от HappySquirrel

Если честно - не осилил. В жизни есть много гораздо более интересных вещей, чем писание интерефейсов на С++ и Qt. Странная тендениця - как тока какой нить коллега начинал писать форточки на C++, он тут же оказывался потерянным для науки. И по секрету - в моих задачах, благодаря питону, интерфейсы как правило вообще не нужны - просто правишь параметры в питоновском файле;-)

AIv ★★★★★ ()
Ответ на: комментарий от zJes

Вот... а для свига в простейшем случае надо только указать имя собиаемого модуля, хидеры и спп файлы;-)))

AIv ★★★★★ ()
Ответ на: комментарий от HappySquirrel

Интерфейсы писать можно на C++ безо всякого питона, хоть на gtk, хоть на qt. Или не осилили?

Этап, когда я перестал пихать C++ во все щели прошел 6 лет назад. Тоже считал, что это достаточно высокоуровневый язык, годный для десктопа. Чего и тебе желаю.

baverman ★★★ ()
Ответ на: комментарий от AIv

Для сипа и сорсы не нужны. :)
И бардака не будет, когда выгенируется всё, чтобы использовать 1 класс(функцию).

В общем от задачи зависит, просто показал, что есть сип, что тоже удобный. :)

zJes ★★ ()
Ответ на: комментарий от HappySquirrel

> Идея комбинирования языков у меня всегда вызывала только ассоциации с тормозами.

А UNIX WAY кстати у Вас какие ассоциации вызывает?

Помнится в одном проекте коллеги (тоже адепты языковой чистоты) потолтора года только переписывали одну оптическую либу с какого то ЯП на С - дескать все должно быть единообразно... У нас проект взлетел за две недели - смесь С++ и фортрана скленная питоном.

Каждый ЯП хорошо под свой кург задач. Если Вам С++ хватает - значит просто задачи узкоспецифические, се ля ви.

AIv ★★★★★ ()

Пользуюсь numpy, scipy, если не хватает, то f2py. C++ для моделирования использовать смысла не вижу, поскольку в производительности будет уступать тому же Фортрану заметно, а геморроя не меньше, поэтому пример считаю неудачным. А так, спасибо.

Vudod ★★★★★ ()
Ответ на: комментарий от zJes

Ну, как я понял, с сипом в принципе аналогично бустпитону получается. Т.е. для каждой функции надо сделать экспорт. Или нет?

Кстати, по второму куску кода - это прям в хедере или в отдельный файл надо совать?

universe_entity ()
Ответ на: комментарий от Vudod

> C++ для моделирования использовать смысла не вижу, поскольку в производительности будет уступать тому же Фортрану заметно

От задачи зависит. В наших задачах фортран уступает плюсам так... от одного до трех порядков. Про скорость разработки не говорю;-)

AIv ★★★★★ ()
Ответ на: комментарий от HappySquirrel

Идея комбинирования языков у меня всегда вызывала только ассоциации с тормозами.

Это с чего вдруг? Наоборот, комбинирование часто делается, чтобы перенести критичные по скорости места в C++, а высокоуровневую логику написать в питоне, ибо быстрее и удобнее.

Кроме того, сфига ли обязательно зависимости от питона? Ну соберет твоя сишная программа биндинги в питон, дык не хочешь - не пользуй. От кого убудет, если в зависимости от ключа соберется дополнительная либа с биндингами, к-рые цепляются питоном? Люди тебе только спасибо скажут, а если ты по-настоящему суров - используй сишные интерфейсы без всяких зависимостей.

universe_entity ()
Ответ на: комментарий от universe_entity

Отдельный файл. Обычно копи паста хидера с публичной секцией.
Для каждой фунции не надо, для типа надо.

zJes ★★ ()
Ответ на: комментарий от zJes

Все же сурово ИМНО... гляньте статью, стр 16 - пишите только макефайл в четыре котротких строчки и все;-)

AIv ★★★★★ ()
Ответ на: комментарий от AIv

> Все же сурово ИМНО...

Я использовал свинг. :) Есть много плюсов. Но и остальных решений есть плюсы.

Простой пример использования сипа. Есть сошка с хидерами. Делаешь сип файл, в котором указываешь что будешь использовать, примеру, только 1 класс/функцию из со. Делаешь конфигур, в котором указывается линковка с той со. Все, python(2|3) configure.py & make. Готово.

То есть не надо делать поддержку биндинга в хидерах, не надо генерить все типы, что есть в библиотеке.

Как-то так. :)

zJes ★★ ()
Ответ на: комментарий от alx_me

> 10 лет это минимум для языка.

питону в этом году 20 стукнет. Ты с сишарпом не путаешь?)

Zubchick ()
Ответ на: комментарий от zJes

> Есть много плюсов. Но и остальных решений есть плюсы

С этим полностью согласен;-)

AIv ★★★★★ ()

у пистона одна область применения: автоматизация мелкой возни (скрипты). На большее он не способен, т.к.: - GIL, - GC убог, - совместимостей между версиями нет.

Да, фанатики вывели его в web, но там его преимущества перед тем же пыхом ничтожны. Я имею ввиду объективные преимущества, а не эстетические предпочтения сексуального меньшинства, которые уже отметились в этой теме.

И я не устану об этом повторять в каждой теме, упоротая вы школота.

anonymous ()
Ответ на: комментарий от anonymous

Что, так часто повторяешь, что уже и сам поверил? :)

zJes ★★ ()

> производительность на три порядка ниже

Думаю, это все-таки перебор...

Ichiro ()
Ответ на: комментарий от alx_me

Адекватные люди не используют этот эксперимент для реальной работы, только экстремалы которым наплевать на потребителя


Отберите кто-нибудь клей Момент у аналитиков.

http://company.yandex.ru/job/vacancies/dev_antivirus_python.xml
http://company.yandex.ru/job/vacancies/dev_research.xml
http://company.yandex.ru/job/vacancies/dev_comm_serv.xml
http://company.yandex.ru/job/vacancies/intranet_python.xml

http://panela.blog-city.com/python_at_google_greg_stein__sdforum.htm
«At Google, python is one of the 3 „official languages“»

Alsvartr ★★★★★ ()
Ответ на: комментарий от Alsvartr

Прям раскрыли мне глаза. Люди десятилетиями под IE пишут сайты, дальше что? IE стал в ваших глазах стандартом?

alx_me ★★☆ ()
Ответ на: комментарий от Zubchick

Это вы с анакондой путаете. Тот python и теперешний, это как delphi и pascal. Создатели этого чуда не уважают труды своих почитателей. Хоть я в них и не вхожу, но я не уважаю их за это.

alx_me ★★☆ ()
Ответ на: комментарий от anonymous

> у пистона одна область применения: автоматизация мелкой возни (скрипты)

Не уловил выгоды от его изобретения при живом perl/awk/sed/bash(zsh).

alx_me ★★☆ ()
Ответ на: комментарий от Ichiro

> Вы б еще залогинились — цены б вам не было

Точно. Не игнорить же всех анонимусов из-за одного идиота.

tailgunner ★★★★★ ()
Ответ на: комментарий от anonymous

у пистона одна область применения: автоматизация мелкой возни (скрипты).

А давай проверим ? :)

Десктоп:
ss@ACER:~$ ps ax | grep python
12666 pts/8    Sl+    0:01 python -i /home/ss/Work/SALOME-MECA-2010.1-i386-GPL/SALOME/SALOME5/V5_1_3/KERNEL_V5_1_3/bin/salome/runSalome.py
12718 ?        Sl     0:00 python /home/ss/Work/SALOME-MECA-2010.1-i386-GPL/SALOME/SALOME5/V5_1_3/KERNEL_V5_1_3/bin/salome/SALOME_ContainerPy.py FactoryServerPy

Это геометрический 3D моделлер + генератор сеток


Логин-узел кластера:

ss@hyperblade-master:~> ps ax | grep python
 3724 ?        S      0:00 python /usr/sbin/jobmond --pidfile=/var/run/jobmond.pid

Плагин для ganglia

19869 ?        S      0:00 python2.4 /usr/mpi/gcc/mvapich2-1.0.2/bin/mpd --ncpus=4 -e -d

демон mpd-кольца

ЗЫ: Как языг - петон не люблю и не использую...

sS ★★★★★ ()
Ответ на: комментарий от alx_me

О перле - Вы пробовали смотреть и дорабатывать свой собственный перловый код годичной давности? А питоновский код понимают даже люди, не знающие питона. У меня сосед зав отделом разработки не самой маленькой конторы юзает и перл и питон в зависимости от задач, и категоричных высказываний вроде Ваших себе не позволяет. М.б. Вам просто надо немного поднять свой уровень?;-)))

Про остальные примеры - давно ль в баше появилось ООП, ФП и элементы аспектного программирования?

Еще яву к ночи вспомните и шарпы, ага...

AIv ★★★★★ ()
Ответ на: комментарий от tailgunner

> Точно. Не игнорить же всех анонимусов из-за одного идиота.

Зря Вы так, это не идиотизм... Я тут подумал и у меня возникла Гипотеза.

Предположительно, в связи с крайне неблагоприятной экологической обстановкой и анатомическими особенностями у некоторых посетителей ЛОРа избыток солей металлов из нефильтрованной водопроводной воды откладывается в яичках. В результате, возникающий при каждом движении звон приводит к тремору пальцев рук (что не позволяет ввести пароль и залогиниться), и негативно влияет на психику, создавая ошибочное представление о своей исключительной феноменальности, что и приводит к появлению странных постов с категоричными высказываниями и оскорблениями оппонентов.

ИМНО фильтры Петрика и давящее звукоизолирующее белье должны бы помочь этим несчастным, но Вы же знаете в каком бедственном состоянии находится наша медицина...

AIv ★★★★★ ()
Ответ на: комментарий от alx_me

Люди десятилетиями под IE пишут сайты, дальше что? IE стал в ваших глазах стандартом?


Раньше - да, де факто. Сейчас - нет. Ну и тезис был:

Адекватные люди не используют этот эксперимент для реальной работы, только экстремалы которым наплевать на потребителя


Что не соответствует реальности. Не стоит так оголтело бросаться словами.

Alsvartr ★★★★★ ()

Спасибо большое. Статья замечательная.

dotbg ★★★★ ()
Ответ на: комментарий от AIv

в связи с крайне неблагоприятной экологической обстановкой и анатомическими особенностями у некоторых посетителей ЛОРа избыток солей металлов из нефильтрованной водопроводной воды откладывается в яичках. В результате, возникающий при каждом движении звон приводит к тремору пальцев рук


Ололо, подавился чаем.

Alsvartr ★★★★★ ()
Ответ на: комментарий от AIv

> у меня боольшие сомнения в том, что их скрипт по автоконвертации правильно сконвертит

Нет, все не сконвертит.

здорово извращался


Тем более, если вы извращались.

Экономьте собственное время - в следующий раз извращайтесь меньше.

shylent ()
Ответ на: комментарий от shylent

> Экономьте собственное время - в следующий раз извращайтесь меньше.

Так я и извращаюсь что бы время сэкономить... ;-)

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Мне наоборот больше нравится 3, так как она более целостна и логична.
Покажи изврат, который не пойдет под 3 версией? :)

zJes ★★ ()
Ответ на: комментарий от AIv

Так понимать свой же код на perl-е это низкий уровень или таки высокий? Мне поднять надо уровень до python или опустить, я не уловил.

А про отличие порога вхождения от функциональности и эффективности я уже упоминал.

Java, Net, python, D, PHP и ruby считаю не удачной идеей. Исторически обусловлены perl, lisp, javascript, awk, bash, C, C++. Новые, перспективные и исторически обусловленные только erlang. Зачем куча всего остального? Изголение и распыление.

alx_me ★★☆ ()
Ответ на: комментарий от zJes

Я даже пробовать не хочу. Извратов много, начиная от каких то замороченных структур данных и эмуляции словарей для eval и оператора форматирования, и заканчивая читерством со стеком. Даже разбираться не хочу что пойдет а что нет - НЕЛЬЗЯ ТЕРЯТЬ ОБРАТНУЮ СОВМЕСТИМОСТЬ.

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

НЕЛЬЗЯ ТАК ДЕЛАТЬ. Сугубое ИМНО.

AIv ★★★★★ ()
Ответ на: комментарий от universe_entity

>Вообще, чтобы юзать бустпитон совсем не обязательно знать «весь буст». Его вполне можно брать по необходимым тебе частям

По чуть-чуть рассасывать говно намного приятней, ага.

anonymous ()
Ответ на: комментарий от alx_me

Сравните простоту понимания своего кода на перле и на питоне.

Про уровень - я заметил тенденцию, чем выше скил у человека, тем более он толерантен и осторожен в своих высказываниях.

Эффективность и порог вхождения не одно и то же, но все же связаны, как ни крутите.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Ну что поделать. :( Мне тоже многое что не нравится.
Посмотрим что будет дальше.

zJes ★★ ()
Ответ на: комментарий от AIv

>Про остальные примеры - давно ль в баше появилось ООП, ФП и элементы аспектного программирования?

Так часто повторял, что поверил в это? ООП, ха-ха, какие там модификаторы доступа? Их нет? Ах какой отсос... А может есть MOP? Нет. Снова отсос. Ну хоть message-passing? И тут причмокнул. ФП? Вывод типов, статическая типизация, TCO, GIL рассосался? Ой, за больное задел. Ну в общем белым людям все уже давно ясно, только питонорабы заливают шары тухлой ссаниной Гвидо, да свои мантры повторяют.

anonymous ()
Ответ на: комментарий от AIv

>>>приложений на Python на порядок выше чем на C++, а их производительность на три порядка ниже

По производительности - увы, медицинский факт.

А вы знаете, что такое «три порядка?» Касается и автора документа.

cthulhu ★☆ ()
Ответ на: комментарий от anonymous

> Ну в общем белым людям все уже давно ясно, только питонорабы заливают шары тухлой ссаниной Гвидо, да свои мантры повторяют.

Похоже на терминальную стадию исключительной феноменальности. Срочно обратитесь в местное отделение ЕР за фильтром Петрика и трусами из ниопрена - мб Вас еще успеют спасти... ;-(((

AIv ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.