Re: C++ и интероп
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.10.24 09:04
Оценка: +3
Здравствуйте, cppguard, Вы писали:

C>Допустим, есть некоторый протокол, для которого определены структуры данных. Раньше можно было описать их на Си, затем подключать полученный заголовочный файл, куда нужно — хочешь, генерируй обёртки для Java, хочешь — для Python, а можешь сразу в С++ использовать. Сейчас же Си и С++ довольно далеко разошлись. Настолько, что простой union из нескольких полей и равного по размеру массива (типичное представление вектора в Си) может привести к UB.


Это всегда было UB. Но на практике работало. Потому, что все понимали, что есть 100500 системного кода, который на это рассчитывает.

Так что в принципе, ничего не изменилось. Можно как и раньше, описать сишную структуру и надеяться, что с #pragma pack (1) компилятор не будет умничать.

C>И что делать? То ли сразу на С++ писать (std::variant вместо union, std::array вместо []), теряя возможность легко и непринуждённо генерировать bindings в другие языки, то ли оставаться на сях, снова и снова привнося ложечку дряхлости в современный в остальных аспектах код на С++


Можно сделать полноценый маршалинг. Т.е., считаем внешнее представление последовательностью байтов, руками собираем, руками разбираем.

В принципе, нонешние компиляторы смышленые, итоговый машинный код может получиться не сильно хуже, чем в случае со структурами. Исходные тексты, конечно, читать-писать в таком стиле будет более муторно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.