c ++ 11 — Какие изменения вызывают нарушение ABI в C ++?

Когда комитет по стандартизации C ++ исследует модификации STL, большое внимание уделяется тому, чтобы не вводить ломающие изменения ABI.

Что вызывает нарушение ABI, а что не приводит к нарушению ABI в C ++? ((ссылка на курсы или документ, ориентированный на то, что приветствуется)

11

Решение

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

Для стандартной библиотеки основными проблемами, вызывающими потенциальную поломку ABI, являются те, которые изменяют компоновку класса или шаблона класса или изменяют поведение обычно встроенных функций. В большинстве случаев проблемы могут быть решены с помощью несколько иной формулировки или путем небольшого изменения функциональности.

Для C ++ 11 я помню обсуждения, связанные с ABI о std::list<...>::size() постоянное время и реализация COW для std::basic_string<...> быть запрещенным Что касается проблемы со списком, то проблема заключалась не в том, что большинство реализаций в любом случае уже использовали постоянный размер времени, а те, которые не смогли сделать достаточно веские аргументы. За std::basic_string<...> ABI для реализаций COW был нарушен, потому что недостаток в том, что не было гарантий гонки данных для разных строковых объектов, был просто неприемлем.

Для некоторых предложений, которые были выдвинуты, например, идея предписания трассировки стека для std::exceptionЕсли бы кто-то нарушил исключение ABI, то разрыв ABI является в значительной степени убийственным аргументом. Несмотря на то, что иногда вносятся изменения, требующие взлома изменений ABI, дело следует аргументировать гораздо сильнее, чем изменения, которые ни на что не влияют: если выгода от изменения не перевешивает заявленный потенциал взлома ABI какого-либо поставщика, это не будет сделано , В некоторых спорных случаях разработчики возвращались и исследовали, есть ли шанс реализовать потенциально слабую неэффективную версию для обратной совместимости.

Проблема с ABI заключается в том, что есть компании, которые будут громко жаловаться, если не смогут использовать свои старые библиотеки с новыми компиляторами. В некоторых случаях поставщики предоставляют коммутаторы для их поддержки, но, например, std::string запекается в слишком много библиотек, что это было бы просто изменить.

7

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector