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 подскажет развёрнутый ответ в реальном времени.