Update trivial_types_and_ABI.md

This commit is contained in:
Dmitry
2021-08-08 17:10:04 +03:00
committed by GitHub
parent c9fad02f4a
commit 69a70aee28

View File

@@ -148,7 +148,7 @@ zero_npoint(): # @zero_npoint()
В реализациях стандартной библиотеки C++03, например, шаблона `pair` можно [увидеть](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_pair.h#L624) user-provided, ничего дополнительно не делающие, конструкторы копий. В C++11 и выше их уже [нет](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_pair.h#L210). Так что это еще одна точка бинарной несовместимости библиотек на старом C++ с библиотеками нового C++.
Проблемы со сломом ABI вокруг тривиальных типов могут застать вас врасплох не только в самом C++, но и в Rust, если вы попытаетесь общаться с плюсовыми библиотеками. Например, есть [баг](https://github.com/rust-lang/rust-bindgen/issues/778) с генерацией биндингов.
Проблемы со сломом ABI вокруг тривиальных типов могут застать вас врасплох не только в самом C++, но и в любом другом языке, если вы попытаетесь через него общаться с плюсовыми библиотеками. Например, в утилите для генерации биндингов для Rust есть [баг](https://github.com/rust-lang/rust-bindgen/issues/778).
Будьте внимательны с тривиальными типами. И если вы намерены предоставлять стабильный ABI своей библиотеки, то выстраивайте его вокруг чистых сишных структур и функций, а не вокруг зоопарка из мира C++.
@@ -159,4 +159,4 @@ zero_npoint(): # @zero_npoint()
## Полезные ссылки
1. https://en.cppreference.com/w/cpp/types/is_trivial
2. https://www.youtube.com/watch?v=ZxWjii99yao
2. https://www.youtube.com/watch?v=ZxWjii99yao