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