Hardabi

Что такое ABI-stable библиотека?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

ABI-stable библиотека сохраняет binary-совместимость между версиями — клиенты, скомпилированные со старой версией, работают с новой DLL без перекомпиляции.

// pimpl: детали скрыты в неполном типе — можно менять без перекомпиляции
class Widget {
public:
    Widget();
    void doStuff();
private:
    struct Impl;
    std::unique_ptr<Impl> pimpl;   // размер фиксирован (указатель)
};

Приёмы: pimpl, virtual interface, extern "C" (фиксированный ABI), не давать std-типы через границу (std::string ABI не стабилен), versioning символов.

Нарушения ABI: добавление virtual в middle, изменение размера класса, смена alignment, изменение inline-функции. Stable ABI важен для DLL distribution, plugin-систем, lang bindings.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.