mirror of
https://github.com/Nekrolm/ubbook.git
synced 2025-12-18 13:14:41 +03:00
Update trivial_types_and_ABI.md
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user