Подтвердить что ты не робот

Swig tool и С++. Быть слишком умным

http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf Это происходит по ссылке выше:

введите описание изображения здесь

Я знаю, что это старая публикация, поэтому возможно, что информация устарела.

Я хотел бы спросить:

"Кажется, отлично работает с С++, если вы не слишком умны" Что значит быть слишком умным?

Известна ли ситуация/случай, что я shuold очень осторожен, когда я программирую модули С++ и расширяю Python с помощью инструмента swig?

4b9b3361

Ответ 1

Слайд странный и вводящий в заблуждение. SWIG не преобразует значение pass-by-value в pass-by-reference вообще. Позвольте мне пояснить на примере:

Скажем, что, как в примере, у вас есть функция С++

double dot_product(Vector a, Vector b);

Теперь на простом С++ (без SWIG, без упаковки) вы можете использовать эту функцию, как в следующих примерах:

1.

Vector a = Vector(1,0);
Vector b = Vector(0,1);
double zero = dot_product(a, b);

2.

Vector *a = new Vector(1,0);
Vector *b = new Vector(0,1);
double zero = dot_product(*a, *b);

В обоих случаях функция фактически вызывается точно так же, используя значение по умолчанию.

SWIG обертывает все объекты в структуру, содержащую указатель на объект, поэтому под капотом SWIG передает указатели вокруг всего и поэтому использует синтаксис, как во втором примере. Но преобразование/преобразование семантики вызова не происходит.

Чтобы ответить на ваши вопросы:

"Кажется, отлично работает с С++, если вы не слишком умны". Что значит быть слишком умным?

Я понятия не имею. Как сказано в другом ответе, вероятно, шутка.

Известна ли ситуация/случай, что я shuold очень осторожен, когда я программирую модули на С++ и расширяю Python с помощью инструмента swig?

Это очень широкий вопрос, и, безусловно, есть подводные камни, особенно связанные с управлением памятью. Однако это конкретное "преобразование" не является проблемой.

Для справки, здесь соответствующая запись в руководстве SWIG. Обратите внимание, что он сформулирован по-разному: функция преобразуется для принятия указателей. Ничего не сказано о "семантике вызова" (поскольку это не проблема).

Ответ 2

Этот PDF-документ представляет собой копию слайдов из презентации, представленной Дэвидом Бэйсли на 7-й Международной конференции Python. Я предполагаю, что это была шутка или словесное объяснение того, что он имел в виду под этой фразой.

Кажется, отлично работает с С++, если вы не слишком умны

Вот ссылка на ваш сайт, если вы хотите связаться с ним и спросить его прямо. Его счет в твиттере dabeaz, который может (или не может) быть лучшим способом связаться с ним.