Too often, C++ developers tend to ignore ABI compatibility problems and think that incompatibilities are limited to changes in the interface of the library motivated by new features or bugs. However, the ABI can also be affected by the context of the compilation (architecture, compiler, C++ runtime, ...) and even by the libraries that we are consuming. Using semantic versioning is not enough. In this presentation, Javier intends to make clear the difference between API and ABI, source and binary compatibility. He'll point out the extreme relevance that ABI compatibility has for library developers and give examples of things that affect the ABI and some techniques to minimize that pain. Taking care of ABI stability can become very important when libraries can't be built always from sources due to very long compilation times, licensing issues or closed source components. In the last part of the talk Javier will introduce Conan as the right tool to address this problem. He'll show how many different binaries can be generated by one simple library taking into account some settings (OS, compiler) and options (shared, static), and how the problem becomes more and more complex when the graph of dependencies of your project grows. Conan has some useful tools to help you know and handle the ABI compatibility problem.
ΠΠ»Ρ Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ±Π°Π·Ρ Π½Π° 2Π ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ ΠΎΡ 80 ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π²ΠΊΠ»ΡΡΠ°Ρ MFC) ΠΌΡ Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π‘++11 Π² Visual Studio 2013 (ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ Windows), Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π‘++17 Π² Viβ¦
Π§ΡΠΎ: ΠΈΠ½ΡΠ΅ΡΠΎΠΏ ΠΌΠ΅ΠΆΠ΄Ρ Java ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°ΡΠ΅ΠΌ: Π·Π°ΡΠ΅ΠΌ, ΡΡΠΎ Π·Π°ΡΠ°ΡΡΡΡ managed ΠΊΠΎΠ΄Π° Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ (Π² Π»ΡΡΡΠ΅ ΡΠ»ΡΡΠ°Π΅) Π½Π° C. ΠΠ°ΠΊ: ΡΠ°ΠΊ ΠΏΡΠΎ ΡΡΠΎ ΠΈ Π²Π΅Ρβ¦
What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are a big challenge even for the eβ¦
ΠΠΎΠ΄ ΡΠ·ΡΠΊΠ° C++ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠΈΠ½Π½ΠΎΠΌΡ ΠΏΠΎΠ»Ρ. ΠΠΎΡΡΠΎΠΌΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ code-review ΠΊΡΠ°ΠΉΠ½Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½. ΠΡΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ ΡΠ»ΡΡΡΠΈΡ Π²Π°ΡΠΈ Π½Π°Π²ΡΠΊΠΈ Π² ΡΡΠΎΠΌ Π½Π΅Π»ΡΠ³ΠΊΠΎΠΌ Π΄Π΅Π»Π΅. ΠΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΎ ΠΊΠΎβ¦
ΠΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΠΎΠΌΠΎΠ΄Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΡΠΎΠ²ΠΈΡ Π·Π°ΡΠ²ΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π±ΡΡΡΡΠ΅Π΅, Π½Π°Π΄ΡΠΆΠ½Π΅Π΅ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π»ΡΡΡΠ΅ C++
ClickHouse β column-oriented DBMS. ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ClickHouse ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΠΊΡΡΠΎΡΠΊΠ°ΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ² β ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±ΡΠ»ΠΎ β¦
Π Π°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ Π―Π½Π΄Π΅ΠΊΡ Go ΠΈ Π΅Π³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅. ΠΠΎΠΊΠ»Π°Π΄ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π»ΡΠ΄ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΊΠΎΡΡΡΠΈΠ½ΠΎΠ²ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅:β¦
ΠΠΎΠΊΠ»Π°Π΄ ΠΏΠΎΡΠ²ΡΡΡΠ½ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ² (ΠΏΡΠΎΠΏΠΎΠ·Π°Π» p0707 rev3 β ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ) Π΄Π»Ρ ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅β¦
ΠΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΠΠ, ΠΌΡ Π·Π°ΡΠ°ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΡΠ΅ Π±ΡΡΠ΅ΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΡΠΊΡΡΡ, ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² C++. Π Π°ΡΡΠΊΠ°Π· ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° PostgreSQβ¦
ΠΠ»ΡΠ±ΠΎΠΊΠΈΠΉ ΡΠ°ΡΡΠΊΠ°Π· ΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π² ΡΠ΅ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅. ΠΠ±ΡΡΠ΄ΠΈΠΌ ΠΎΠ±ΡΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ Π² ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ ΡΠΏΠΈΡΠΊΠ°ΠΌ ΡΠΈΠΏΠΎΠ². ΠΠΎ ΡΠ°Π³Π°ΠΌ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Ρβ¦
C++17 is a huge combination of small new features both in the language and the library. These features have more poser but also more traps than you might expect. These traps are not theoretical. Theyβ¦
Π Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ Π½Π°Π΄ Π½ΠΈΠΌΠΈ: ΠΎΡ single compilation unit, link time optimization ΠΈ static initialization Π΄ΠΎ constevaβ¦
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π°Π±Ρ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ. ΠΠ½ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠΌΠΎΡΡ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΡΠΎ β¦
Initialisation semantics is widely regarded as one of the most difficult aspects of the C++ language. We have many different kinds of initialisation and many different syntaxes for it, and they interβ¦
ΠΠ°Π±ΡΠ΄Π΅ΠΌ ΡΠΆΠ°ΡΡ C++/CLI ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. ΠΡΠΈ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΡΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ P/Invoke, ΠΎΠ½Π°, ΡΠ²Ρ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½Π° Π»ΠΈΡΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² C-ΡΡΠΈΠ»Π΅. ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎβ¦
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ β ΡΡΠΎ Π±ΠΎΠ³Π°ΡΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠΏΠ΅ΡΠΈΡΡΡΡΠ΅Π΅ ΡΠ°Π·Π²Π΅ΡΠΈΡΡΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ . ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΡΡΠ°Π²Π°ΡΡΡ Π² ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Β«ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΒ», ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΡ Π΅ΡΡ ΡΡΠ΅Π±ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³β¦
ΠΠ°ΡΡΠΎΠ²ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΎΡ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠΎΠ² ΠΊ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ ΡΠ΅ΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ β Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΈ Π΄ΠΎΡΠΎΠΆΠ΅, ΡΠ΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ. Π§Π°ΡΡΠΈΡΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ β¦
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌ: Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠ΅ΡΠΈ, Π±ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π΅ΡΡΡΠΊΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΡ ΡΠΊΠ°β¦
In this talk, Oren Eini, founder of RavenDB, is going to take apart a database engine on stage. We are going to inspect all the different pieces that make for an industrial-grade database engine, froβ¦