Почему двоичная совместимость?

Я изучаю язык PIMPL. Одним из его преимуществ является двоичная совместимость. Мне интересно, каковы преимущества бинарной совместимости. Спасибо!

4

Решение

Избегает Хрупкая проблема двоичного интерфейса. Это выглядит так:

  1. Программа использует библиотеку.

  2. Пользователь обновляет библиотеку. Обновление изменяет что-то в двоичном интерфейсе библиотеки.

  3. Программа теперь не работает до тех пор, пока не будет перекомпилирована, потому что она была встроена в старый двоичный интерфейс.

Одним из преимуществ идиомы PIMPL является то, что она позволяет вам перемещать вещи, которые обычно являются частью открытого интерфейса класса, в его частный интерфейс (фактически, в интерфейс частного класса). Вы можете изменить частный интерфейс, не нарушая бинарную совместимость.

3

Другие решения

Преимущество идиомы PIMPL заключается не столько в двоичной совместимости, сколько в уменьшенной необходимости перекомпиляции, если вы измените реализацию или даже макет класса. Например, если вы добавите новый элемент данных в класс, это изменит макет класса, и вам, как правило, потребуется перекомпилировать все клиенты класса, но не при использовании идиомы PIMPL.

Бинарная совместимость больше связана с совместимостью с несколькими компиляторами (и версиями компилятора), и единственный способ сделать это в C ++ — это интерфейсы (абстрактные классы), которые реализуются классами, не доступными для клиентов. Это связано с тем, что макет абстрактных классов vtable реализован одинаково всеми компиляторами. Многие API, такие как DirectX API, доступны таким образом, что их можно использовать с любым компилятором.

0