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 interact in complex and often surprising ways. C++11 introduced the concept of "uniform initialisation". But instead of unifying, this feature introduced even more complex rules, which were subsequently amended in C++14, C++17, and will be changed again for C++20. In this talk, Timur will first summarise the history of initialisation in C++. He'll then give a systematic overview over the current initialisation rules and common pitfalls and surprises. There will be some practical coding guidelines to help using those rules effectively. Finally, Timur will offer to discuss recent proposals towards making initialisation semantics in C++20 simpler and more user-friendly.
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,β¦
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β¦
ΠΠ»Ρ Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ±Π°Π·Ρ Π½Π° 2Π ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ ΠΎΡ 80 ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π²ΠΊΠ»ΡΡΠ°Ρ MFC) ΠΌΡ Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π‘++11 Π² Visual Studio 2013 (ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ Windows), Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π‘++17 Π² Viβ¦
ΠΠΎΠ΄ ΡΠ·ΡΠΊΠ° C++ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠΈΠ½Π½ΠΎΠΌΡ ΠΏΠΎΠ»Ρ. ΠΠΎΡΡΠΎΠΌΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ code-review ΠΊΡΠ°ΠΉΠ½Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½. ΠΡΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ ΡΠ»ΡΡΡΠΈΡ Π²Π°ΡΠΈ Π½Π°Π²ΡΠΊΠΈ Π² ΡΡΠΎΠΌ Π½Π΅Π»ΡΠ³ΠΊΠΎΠΌ Π΄Π΅Π»Π΅. ΠΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΎ ΠΊΠΎβ¦
Π Π°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ Π―Π½Π΄Π΅ΠΊΡ Go ΠΈ Π΅Π³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅. ΠΠΎΠΊΠ»Π°Π΄ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π»ΡΠ΄ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΊΠΎΡΡΡΠΈΠ½ΠΎΠ²ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅:β¦
Π§ΡΠΎ: ΠΈΠ½ΡΠ΅ΡΠΎΠΏ ΠΌΠ΅ΠΆΠ΄Ρ Java ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π·Π°ΡΠ΅ΠΌ: Π·Π°ΡΠ΅ΠΌ, ΡΡΠΎ Π·Π°ΡΠ°ΡΡΡΡ managed ΠΊΠΎΠ΄Π° Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ (Π² Π»ΡΡΡΠ΅ ΡΠ»ΡΡΠ°Π΅) Π½Π° C. ΠΠ°ΠΊ: ΡΠ°ΠΊ ΠΏΡΠΎ ΡΡΠΎ ΠΈ Π²Π΅Ρβ¦
ClickHouse β column-oriented DBMS. ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ClickHouse ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΠΊΡΡΠΎΡΠΊΠ°ΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ² β ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±ΡΠ»ΠΎ β¦
ΠΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΠΎΠΌΠΎΠ΄Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΡΠΎΠ²ΠΈΡ Π·Π°ΡΠ²ΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π±ΡΡΡΡΠ΅Π΅, Π½Π°Π΄ΡΠΆΠ½Π΅Π΅ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π»ΡΡΡΠ΅ C++
ΠΠΎΠΊΠ»Π°Π΄ ΠΏΠΎΡΠ²ΡΡΡΠ½ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ² (ΠΏΡΠΎΠΏΠΎΠ·Π°Π» 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β¦
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π°Π±Ρ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ. ΠΠ½ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠΌΠΎΡΡ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΡΠΎ β¦
ΠΠ°Π±ΡΠ΄Π΅ΠΌ ΡΠΆΠ°ΡΡ 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β¦