Здравствуйте, коллеги!
Последнее время плотно занялся изучением вопроса стабильности ABI. Для себя выработал два основных подхода:
- придерживаться некоторых рекомендаций для выбранного компилятора, например, Itanium C++ ABI;
- заложить стабильность в дизайн приложения, например, использовать идиому pimpl.
По поводу 2 подхода появилось несколько вопросов, на которые хотелось бы получить ответы. Далее вопросы подразумевают, что публичный интерфейс не изменяется и требуется совместимость в рамках одного компилятора.
- Динамическая загрузка библиотеки (dlopen, LoadLibrary, Boost.DLL). Актуальны ли для этого случая проблемы (как минимум отсутствует искажение имен) ABI?
- Pimpl:
- Влияет ли добавление абстрактного интерфейса на стабильность ABI (появление vtable)?
- Как обыграть шаблонные методы/шаблонный класс?
Извиняюсь за некоторый сумбур. Старался написать кратко.