У меня есть некоторый опыт написания библиотек на Си, но я никогда не читал никаких формальных документов, описывающих хорошие практики при написании таких библиотек.Мой вопрос касается в основном двух тем:
- Как поддерживать двоичную совместимость?(Я слышал об идиоме pImpl, d-указатель)
- Как проектировать интерфейсы, которые остаются обратно совместимыми?
Главное о двоичной совместимости, которую я вижу из моегоисследование заключается в том, что я могу сделать библиотеки двоично-совместимыми, используя идиому pImpl, но изменение структуры / добавление новых элементов данных и т. д. может повлиять на их двоичную совместимость даже при использовании pImpl.Кроме того, есть ли способ добавить новые методы / функции в библиотеку, фактически не нарушая бинарную совместимость?Я предполагаю, что добавление этих вещей изменило бы размер, расположение библиотеки, таким образом нарушая совместимость.
Есть ли инструмент для проверки двоичной совместимости?
Я уже читал эти статьи.Есть ли другие документы, которые я могу просмотреть?
http://en.wikipedia.org/wiki/Opaque_pointer
http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++
Также есть статьи, которые описывают проблемы владения памятью в контексте проектирования библиотекиинтерфейсы.Каковы общие соглашения?Кто владеет памятью, как долго, кто отвечает за освобождение памяти и т.д.?