Хорошие практики для написания динамического языка C библиотеки [DSO] (двоичная совместимость + управление памятью)

У меня есть некоторый опыт написания библиотек C, но я никогда не читал никаких официальных документов, описывающих передовой опыт при написании таких библиотек. Мой вопрос в основном касается двух тем:

  1. Как поддерживать двоичную совместимость? (Я слышал об идиоме pImpl, d-указатель)
  2. Как разрабатывать интерфейсы, которые оставались бы обратно совместимыми?

Главное в бинарной совместимости, которое я вижу в своих исследованиях, это то, что я могу сделать библиотеки бинарно совместимыми используя идиому pImpl, но изменение структуры / добавление новых элементов данных и т.д. может повлиять на его двоичную совместимость даже при использовании pImpl. Кроме того, есть ли способ добавить новые методы / функции в библиотеку без фактического нарушения двоичной совместимости? Я предполагаю, что добавление этих вещей изменит размер и структуру библиотеки, что нарушит совместимость.

Есть ли инструмент для проверки двоичной совместимости?

Я уже читал эти статьи. Могу ли я просмотреть какие-либо другие документы?

http://en.wikipedia.org/wiki/Opaque_pointer

http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++

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

23
задан linuxbuild 28 August 2011 в 14:02
поделиться