C++ Moscow
Open in Telegram
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΌΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² Π½Π° C++ Π§Π°Ρ: @cppmoscow_chat ΠΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ: @cppmoscow_bot ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡ: @eoanermine
Show more302
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
302
#proposals #resources
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ Π½ΠΎΠ²ΠΎΡΡΡΠΌ: Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΊΠΎΠΌΠΈΡΠ΅Ρ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ C++ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠΏΠΎΠ·Π°Π»Ρ.
ΠΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ:
1. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ std::hive: Π±ΡΠ» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ ΡΠ°Π·Π΄Π΅Π», ΠΊΠ°ΡΠ°ΡΡΠΈΠΉΡΡ
constexpr; Π²Π½Π΅ΡΠ΅Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
2. Π‘ ΡΡΡΡΠΎΠΌ Π²ΡΠ΅Ρ
Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠΉ LEWG Π±ΡΠ» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ P0876 fiber_context - fibers without scheduler, ΠΏΡΠΎΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΏΡΡΡ Π² Π½Π°ΡΠ΅ ΡΠ²Π΅ΡΠ»ΠΎΠ΅ ΠΊΠΎΡΡΡΠΈΠ½Π½ΠΎΠ΅ Π±ΡΠ΄ΡΡΠ΅Π΅: Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠΉ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ stackful ΠΊΠΎΡΡΡΠΈΠ½.
3. ΠΠΈΠΊΡΠΎΡ ΠΠ²Π΅ΡΠΎΠ²ΠΈΡ, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ std::format Π² ΡΡΠ°Π½Π΄Π°ΡΡ, Π²ΡΡ Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΊΠΎΠΉ, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΡΡΡΡΠΈΠ΅ Π²ΡΠ΅ ΠΏΡΠ΅Π»Π΅ΡΡΠΈ constexpr, Π½ΠΎ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΡΡΡΠΎΠΊ:
if (auto result = std::scan<std::string, int>("answer = 42", "{} = {}")) {
const auto& [key, value] = result->values();
// key == "answer", value == 42
}
Π Π΄Π°Π»ΡΡΠ΅, Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ, Π½ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ: Contracts for C++ (ΡΡΠ°Π²ΡΡΠΈΠΉ Π²ΡΡΠΎΠΊΡΡ ΡΠ΅Π»Ρ Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ Π²Π²Π΅ΡΡΠΈ Π² ΡΠ·ΡΠΊ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ²); A New Approach For Compiling C++ (Π·Π°Ρ
Π²Π°ΡΡΠ²Π°ΡΡΠΈΠΉ Π΄ΡΡ
Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°ΠΌΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π²ΡΠΈΠΌΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° 25β40%); optional<T&> (Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π·Π°Π΄Π΅Π»Π°ΡΡ ΡΠ°Π½Π΅Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π±ΡΠ΅ΡΡ), Reflection for C++26 (ΡΠΏΡΠΎΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Ρ Π½Π΅Π΅ Π±ΡΠ» ΡΠ°Π½Ρ ΠΏΡΠΎΠΉΡΠΈ Π² C++26), Low-Level Integer Arithmetic (ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠΉ Π½Π΅ Π²Π»Π΅ΠΊΡΡΠΈΠ΅ UB Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ
Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ) ΠΈ UFCS (ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²)
Π ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ
ΠΏΡΠΎΠΏΠΎΠ·Π°Π»ΠΎΠ² ΠΊΠ°ΠΆΡΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌΠΈ Π²Π°ΠΌ? ΠΠ»ΠΈ ΠΊΠ°ΠΊΠΈΡ
ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΠΈΡ, ΠΏΠΎ Π²Π°ΡΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ? ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
!302
#meetup
β ΠΠ°Ρ ΠΌΠΈΡΠ°ΠΏ ΡΠΎΡΡΠΎΠΈΡΡΡ ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π· 4 Π½Π΅Π΄Π΅Π»ΠΈ, 19 Π½ΠΎΡΠ±ΡΡ (ΠΡ) Ρ 15:20 Π΄ΠΎ 18:00 ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΠΎΡΠΊΠ²Π°, ΠΠ°Π»ΡΠΉ ΠΠΎΠ½ΡΡΠΊΠΎΠ²ΡΠΊΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΎΠΊ, Π΄. 2 (ΠΎΡΡΠ»Π°ΠΉΠ½ + ΠΎΠ½Π»Π°ΠΉΠ½ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²), ΠΈ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΎΠ³Π»Π°ΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠ΅ΠΉ:
1. ΠΠΎΠΊΠ»Π°Π΄: ΠΠΎΡΡΡΠΈΠ½Ρ ΠΈ Qt. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° QCoro
2. ΠΠΎΠΊΠ»Π°Π΄: ΠΠΠ Π² ClickHouse
3. ΠΠΎΠ½ΠΊΡΡΡ ΠΏΠΎ ΠΌΠΎΡΠΈΠ²Π°ΠΌ C++ Quiz
Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π²Π°Ρ Π±ΡΠ΄ΡΡ ΠΆΠ΄Π°ΡΡ Π²ΠΊΡΡΠ½ΡΠ΅ Π½Π°ΠΏΠΈΡΠΊΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ π
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠ΅ ΠΎΡΡΠ»Π°ΠΉΠ½, ΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, ΠΈΠ½Π°ΡΠ΅ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠΎΠΏΠ°ΡΡΡ.
ΠΡΡΠ°Π»ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡΡ? ΠΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π° Π²ΡΠ΅ ΠΎΡΠ²Π΅ΡΠΈΠΌ!
302
Finally!
Π CMake (3.28+) Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ!
ΠΡΠΎΠΌΠ΅ Π½ΠΎΠ²Π΅ΠΉΡΠ΅Π³ΠΎ CMake Π²Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ Π½ΠΎΠ²Π΅ΠΉΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ: msvc 14.34+, clang 16+, gcc 14+
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅
302
ΠΠΠ Π² ClickHouse
ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Π½ΠΈΡ
Π²ΡΠ΅ ΡΠ»ΡΡΠ°Π»ΠΈ, ΠΈΡ
Π²ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ (Π½Π°Π΄Π΅Π΅ΠΌΡΡ). Π Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π½ΠΈΡ
Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅? ΠΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ SOLID? ΠΠ°ΠΊ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅?
Π Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ² Π½Π΅ Π² ΠΏΡΠΎΡΡΠΎΠΌ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π° Π² Π‘Π£ΠΠ. ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ
C++ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ β ClickHouse
302
Π ΠΎΠ²Π½ΠΎ ΠΌΠ΅ΡΡΡ ΠΎΡΡΠ°Π»ΡΡ Π΄ΠΎ Π½Π°ΡΠ΅ΠΉ Π²ΡΡΡΠ΅ΡΠΈ! Π ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΎΡΡΠ°Π²ΡΠΈΠΉΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄ΠΎΠΊΠ»Π°Π΄: ΠΠΌΠΈΡΡΠΈΠΉ ΠΠΎΡΠ΅Π½ΠΊΠΎ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ClickHouse!
302
#digest
ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΡΠ°ΠΌΡΡ
ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΠΈΠ· ΠΌΠΈΡΠ° C++ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ (2 ΠΎΠΊΡΡΠ±ΡΡ β 15 ΠΎΠΊΡΡΠ±ΡΡ 2023)
Π§ΠΈΡΠ°ΡΡ Π΄Π°Π»Π΅Π΅ Π½Π° Π₯Π°Π±ΡΠ΅
302
ΠΠΎΡΡΡΠΈΠ½Ρ ΠΈ Qt. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° QCoro
Qt ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΡΠΆΠ΅ ΠΏΠΎΡΡΠΈ 30 Π»Π΅Ρ Π½Π°Π·Π°Π΄. Π₯ΠΎΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΊΡΡΠΏΠ½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠ°ΠΊ ΠΈ ΠΎΡ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ, Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
Π»ΡΠΌΠ±Π΄ ΠΈ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ C++ (ΠΏΡΠΈΠ²Π΅Ρ, userver).
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° QCoro ΠΏΡΠΈΠ·Π²Π°Π½Π° ΠΏΡΠΈΠ²Π½Π΅ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΡΡΡΠΈΠ½ Π² ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Qt ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π»ΠΈΡΠ½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΌΠ΅ΡΠΎΠ΄.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ. ΠΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΏΠΎ ΡΠΈΠΏΡ QNetworkManager, QFuture ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² IO-ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Ρ QCoro. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ QObject::connect Ρ ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠΎΠΌ Π½Π° co_await ΠΈ ΡΠ·ΡΠ΅ΡΡ ΠΌΠ°Π³ΠΈΡ.
ΠΡΠΈ ΡΡΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π°Π΄ΡΠΆΠ½Π° ΠΈ ΠΏΡΠΈΠ·Π½Π°Π½Π° ΠΌΠΈΡΠΎΠ²ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½Π° Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ (extra) Π΄Π»Ρ Manjaro Linux, Π° Π·Π½Π°ΡΠΈΡ, ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΡΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
302
Π§ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ ΠΌΠ΅ΡΡΡ ΠΎΡΡΠ°Π»ΡΡ Π΄ΠΎ Π½Π°ΡΠ΅ΠΉ Π²ΡΡΡΠ΅ΡΠΈ ΠΈ ΠΌΡ ΡΠ°Π΄Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡ Π²Π°Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²: ΠΠ»ΡΡ ΠΡΠΊΠΎΠ½Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ Π½Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡ Qt ΠΈ ΠΊΠΎΡΡΡΠΈΠ½Ρ!
302
ΠΠΎΡ ΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»Π°ΡΡ Π½Π΅Π΄Π΅Π»Ρ ΠΊΠΎΡΡΡΠΈΠ½. ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, Π½Π°ΡΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ, Π½ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ! Π, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΡΡΡ Π² ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ Β«ΠΠ΅Π΄Π΅Π»Ρ XΒ», ΠΌΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π²ΡΠ΅Ρ
ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
ΡΠ²ΠΎΠΈΠΌ ΠΌΠ½Π΅Π½ΠΈΠ΅ΠΌ: ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΡΡ Π»ΠΈ Π²Π°ΠΌ ΡΠΎΡΠΌΠ°Ρ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ»ΡΡΡΠΈΡΡ ΠΈ ΠΊΠ°ΠΊΡΡ Π½Π΅Π΄Π΅Π»Ρ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ?
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠ°Π΄Ρ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π΅Π½Ρ ΠΏΡΠΈΡΠΌΠ° Π·Π°ΡΠ²ΠΎΠΊ ΠΆΠ΅Π»Π°ΡΡΠΈΡ
Π²ΡΡΡΡΠΏΠΈΡΡ Ρ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ Π½Π° Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΌ ΠΌΠΈΡΠ°ΠΏΠ΅! Π Π·Π½Π°ΡΠΈΡ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π½Π΅Π΄Π΅Π»Ρ Π±ΡΠ΄Π΅Ρ Π½Π΅Π΄Π΅Π»Π΅ΠΉ Π°Π½ΠΎΠ½ΡΠΎΠ² Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² C++ Moscow β2!
302
#cpp20 #coroutines
β ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΊΠΎΡΡΡΠΈΠ½ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
, ΡΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, C++20 Π½Π΅ ΠΏΡΠΈΠ½Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ; Π²ΡΠ΅, ΡΡΠΎ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ:
coroutine_traits, coroutine_handle. Π ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ: ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½ΠΈΡ
ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ΠΌ Π² ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ ΠΏΠΈΡΠ°ΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠΎΠ΄, Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π³ΠΎΡΠΎΠ²Π΅Π½ΡΠΊΠΎΠ΅.
Π ΠΊΠΎΠΌΠΈΡΠ΅Ρ Π½Π΅ Π΄ΡΠ΅ΠΌΠ»Π΅Ρ; Π² C++23 Π±ΡΠ» ΠΏΡΠΈΠ½ΡΡ ΠΏΡΠΎΠΏΠΎΠ·Π°Π» (Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π΅ΡΠ΅ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅):
1. π¬π§ std::generator: Synchronous Coroutine Generator for Ranges, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΊΠΎΡΡΡΠΈΠ½Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ:
std::generator<int> iota(int start = 0) {
while (true)
co_yield start++;
}
void f() {
for (auto i: iota() | std::views::take(3))
std::cout << i << ' '; // ΠΠ΅ΡΠ°ΡΠ°Π΅Ρ 0 1 2
}
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π² ΠΊΠΎΠΌΠΈΡΠ΅ΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ:
1. π¬π§ std::lazy: Coroutine for Deferred Execution, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠΉ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ:
lazy<int> coro() {
int result = 0;
while (int v = co_await async_read())
result += v;
co_return result;
}
void f() {
lazy<int> task = coro(); // ΠΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ
co_await task; // Π ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΠΊΠΎΠ½Π΅Ρ Π΅Π΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌ
}
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΠ°ΠΊΡ, ΠΏΡΠΈΠΌΡΡ Π»ΠΈ ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² C++26: ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ΄Π°Π½ΠΎ Π² 2022-ΠΎΠΌ, ΡΠ°ΠΊ Ρ ΡΠ΅Ρ
ΠΏΠΎΡ ΠΈ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ° Π² ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈΠΈ ΠΊ Π΅Π³ΠΎ ΠΏΡΠΈΠ½ΡΡΠΈΡ.
Π Π½Π° ΡΡΠΎΠΌ Π²ΡΡ. ΠΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΡΡΡ. Π ΡΡΠ°ΡΡΡΡ, ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ
ΠΏΠΎΠΌΠΈΠΌΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ
ΠΊΠΎΡΡΡΠΈΠ½Π½ΡΡ
ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (scheduling) Π·Π°Π΄Π°Ρ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ I/O:
1. π¬π§ Facebook: Folly::Coro β ΠΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΡΡΡΠΈΠ½Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΎΡ Facebook, Π±ΡΡΡΡΡΠΉ ΠΈ ΠΏΠΎΠΌΠΈΠΌΠΎ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
2. π¬π§ Lewis Baker: CppCoro β ΠΡΠ°ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²ΡΠ΅Ρ
ΠΊΠΎΡΡΡΠΈΠ½Π½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠΆΠ΅ ΠΌΠ΅ΡΡΠ²ΡΠΉ, Π½ΠΎ Π²Π²ΠΈΠ΄Ρ ΡΠ²ΠΎΠ΅ΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ²ΡΠΈΠΉ ΠΆΠΈΠ·Π½Ρ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΊΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΠΈΠ΄Π΅ΠΉΠ½ΡΡ
ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΠ΅Π»Π΅ΠΉ: [1], [2], [3], [4], [5].
3. π¬π§ Dan VrΓ‘til: QCoro β ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Qt ΠΊΠΎΡΡΡΠΈΠ½Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠ³Π½Π°Π»ΠΎΠ².
Π ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π²Ρ? ΠΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΡΡΠΏΠ΅Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ? π302
#cpp20 #coroutines
ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ Π²Π°Ρ ΡΠΎΠΌΠΈΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ°ΡΡΠΈ ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Ρ ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ:
1. π·πΊ Habr: ΠΠΎΡΡΡΠΈΠ½Ρ Π² C++20 β ΡΡΠΎ ΡΡΠΎ ΠΈ ΠΊΠ°ΠΊ Ρ Π½ΠΈΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ
2. π·πΊ Habr: C++20. Coroutines
3. π¬π§ David MaziΓ¨res: My tutorial and take on C++20 coroutines
4. π¬π§ Lewis Baker: Asymmetric Transfer
ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ Π»ΡΠ±ΡΡ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ ΡΠ·ΡΠΊΠΎΠ²ΡΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡΠΌ β Π½Π΅ ΠΎΡΠΈΠ±Π΅ΡΠ΅ΡΡ. ΠΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ Π²ΡΠ΅ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠΈΠΉ ΡΡΡΠ΄ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΠ΅ΡΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ Assymetric Transfer (Lewis Baker). ΠΡΠΎ Π»ΠΎΠ½Π³-Π»ΠΎΠ½Π³ ΡΠΈΠ΄, Π½ΠΎ ΠΎΠ½ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΡ: ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΠΊΠΎΡΡΡΠΈΠ½; ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ ΠΈΡ
ΡΠ°Π±ΠΎΡΡ: operator coawait, promisetype, ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ; ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π΄ Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΡΡΠΈΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ β Π²ΡΠ΅ ΡΡΠΎ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ
Π΄Π΅ΡΠ°Π»ΡΡ
, ΠΈ Π²ΡΡΠ΄ Π»ΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ Ρ Π²Π°Ρ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Ρ
ΠΎΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΡΠΎ Π½Π° ΡΠ΅ΠΌΡ ΠΊΠΎΡΡΡΠΈΠ½ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
ΠΎΡΠΎΡΠΈΡ
Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²:
1. π¬π§ Andreas Fertig: C++20βs Coroutines for Beginners β ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΊΠΎΡΡΡΠΈΠ½Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²;
2. π¬π§ Andreas Weis: Deciphering C++ Coroutines - A Diagrammatic Coroutine Cheat Sheet β Π±ΠΎΠ»ΡΡΠ΅ ΡΠ³Π»ΡΠ±Π»ΡΡΡΠΈΠΉΡΡ Π² Π°Π½Π°ΡΠΎΠΌΠΈΡ ΠΊΠΎΡΡΡΠΈΠ½ ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡΠΈΠΉ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ.
Π Π΄Π²Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠ΅ Π»Π΅ΠΊΡΠΈΠΈ, Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π°ΡΠ΅ΠΉ:
1. π·πΊ ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΠ½ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²: Π‘ΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΡΡΡ 1 β ΠΠ±Π·ΠΎΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠ΅ΠΉ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ ΠΈΡ
ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ: ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ, ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π±ΠΎΡ ΡΠΎΠ½ΠΊΠΈΡ
ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ;
2. π·πΊ ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΠ½ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠΎΠ²: Π‘ΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΡΡΡ 2 β ΠΠ°ΡΠΈΠ°Π½ΡΡ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΠΈ Π² ΠΊΠΎΡΡΡΠΈΠ½Π°Ρ
, ΠΈΡ
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ
Π°Π²ΡΠΎΠΌΠ°ΡΠ°Ρ
, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΡΡΠΈ.
Π ΡΡΠΎ Π²ΡΠ΅, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π΅Π»Π° ΠΎΠ±ΡΡΠΎΡΡ Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π»Ρ ΠΊΠΎΡΡΡΠΈΠ½: Π²Π΅Π΄Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°ΠΌ Ρ
ΠΎΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ generator, task ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, Π° Π½Π΅ ΠΏΠΈΡΠ°ΡΡ ΠΈΡ
ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΈ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΈΡ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ? ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΡΡΠΎΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·!
302
#cpp20 #coroutines
ΠΠ°ΡΠ½Π΅ΠΌ ΠΆΠ΅ Π½Π°Ρ ΠΏΡΡΡ! ΠΠ΅ΡΠ²ΡΠ΅ ΡΡΠ°ΡΡΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ:
1. Habr: ΠΠΎΡΡΡΠΈΠ½Ρ C++20 Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
2. Habr: ΠΠΎΡΠΎΠ²ΠΈΠΌΡΡ ΠΊ Π‘++20. Coroutines TS Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅
ΠΠ±Π΅ ΠΎΠ½ΠΈ Π²Π²ΠΎΠ΄Π½ΡΠ΅, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΡΡΡΠΈΠ½Ρ (ΠΊΠ΅ΠΌ-ΡΠΎ Π·Π° Π½Π°Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΠΎ Π²ΡΠΎΡΠ°Ρ ΡΠΆΠ΅ ΡΠ»Π΅Π³ΠΊΠ° ΠΏΡΠΈΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π·Π°Π²Π΅ΡΡ: ΡΡΠΎ Ρ Π½ΠΈΡ
ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ?
ΠΡΠ»ΠΈ ΡΡΠΈ ΡΡΠ°ΡΡΠΈ ΠΊΠ°ΠΆΡΡΡΡ Π²Π°ΠΌ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π»Π°ΠΉΡΠΎΠ²ΡΠΌΠΈ, ΠΎΡΡΠ°Π²Π°ΠΉΡΠ΅ΡΡ Π½Π° ΡΠ²ΡΠ·ΠΈ, Π²ΠΏΠ΅ΡΠ΅Π΄ΠΈ Π½Π°Ρ ΠΆΠ΄Π΅Ρ Ρ
Π°ΡΠ΄ΠΊΠΎΡ!
302
ΠΠΎΡΡΡΠΈΠ½Ρ (ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) β ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ C++20, ΠΊΡΠ°ΠΉΠ½Π΅Π³ΠΎ ΠΈΠ· Π½Π° Π΄Π°Π½Π½ΡΡ
ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ
ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ². Π₯ΠΎΡΡ ΡΡΠ°ΡΠ΅ΠΉ ΠΏΡΠΎ Π½ΠΈΡ
Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ, ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ·Π½Π°Π½ΠΈΡ: Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ ΡΡΠ°Π·Ρ ΡΠ΅ΡΡΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ (promise object, coroutine handle, coroutine state, awaitable), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠΌΠ΅.
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ°ΡΠ΅ΠΉ ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠΎΡΡΡΠΈΠ½Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² (ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΠΏΠΈΡΠΎΠ½ΡΡΡΠΈΠΌ) β ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΡ
ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ
ΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ. ΠΠΎ ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌ ΠΊΠΎΠΌΠΈΡΠ΅Ρ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΠΈ C++ Π½Π΅ ΡΠΌΠΎΠ³ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ (ΡΠΎ, ΡΡΠΎ Π²ΡΠ΅ ΠΆΠ΅ Ρ Π½Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, Π²ΠΎΡΠ»ΠΎ Π² C++23 ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ std::generator)
ΠΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΎ Π³ΡΡΡΡΠ½ΠΎΠΌ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠΎΡΡΡΠΈΠ½Ρ ΡΡΠΆΠ΅Π»ΠΎ ΠΏΠΈΡΠ°ΡΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΡΠΈΡΡΠ½ΠΎ! ΠΡΠ΄Π΅ΠΌ ΡΠ°Π΄ΠΎΠ²Π°ΡΡΡΡ, Π²Π΅Π΄Ρ Π²ΡΡ ΡΡΡ Π½Π΅Π΄Π΅Π»Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»ΠΈΡΡΡΡ Ρ Π²Π°ΠΌΠΈ ΡΡΠ°ΡΡΡΠΌΠΈ ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°ΠΌΠΈ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ! Π Π°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Π² Π½ΠΈΡ
, Π²ΠΎ Π²ΡΠ΅Ρ
Π΄Π΅ΡΠ°Π»ΡΡ
, Π²ΠΌΠ΅ΡΡΠ΅
302
ΠΡΠΎΡΠ°Ρ Π²ΡΡΡΠ΅ΡΠ° ΠΌΠΎΡΠΊΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² Π½Π° C++ ΠΏΡΠΎΠΉΠ΄Π΅Ρ 19 Π½ΠΎΡΠ±ΡΡ (ΠΡ) Ρ 15:20 Π΄ΠΎ 18:00 ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΠΎΡΠΊΠ²Π°, ΠΠ°Π»ΡΠΉ ΠΠΎΠ½ΡΡΠΊΠΎΠ²ΡΠΊΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΎΠΊ, Π΄. 2 (ΠΎΡΡΠ»Π°ΠΉΠ½ + ΠΎΠ½Π»Π°ΠΉΠ½ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ²)
ΠΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π²ΡΠ΅Ρ
ΠΏΡΠΈΠ½ΡΡΡ Π² Π½Π΅ΠΉ ΡΡΠ°ΡΡΠΈΠ΅: ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ ΠΈ ΡΠΊΡΠΏΠ΅ΡΡΠΈΠ·ΠΎΠΉ, ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΊΡΡΠ³Ρ Π΅Π΄ΠΈΠ½ΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ²
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π΄Ρ Π²ΡΠ΅ΠΌ ΠΆΠ΅Π»Π°ΡΡΠΈΠΌ Π²ΡΡΡΡΠΏΠΈΡΡ Ρ ΠΌΠΈΠ½ΠΈ-Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ Π΄Π²Π°Π΄ΡΠ°ΡΠΈ ΠΌΠΈΠ½ΡΡ Π½Π° Π»ΡΠ±ΡΡ ΡΠ΅ΠΌΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° C++ (Π·Π°ΡΠ²ΠΊΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π΄ΠΎ 15 ΠΎΠΊΡΡΠ±ΡΡ Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ)
Π‘Π²ΡΠΆΠΈΡΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ, ΠΈ ΠΌΡ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π²Π°ΠΌ Π½Π° Π²ΡΠ΅Ρ
ΡΡΠ°ΠΏΠ°Ρ
: ΠΎΡ ΠΏΠΎΠ΄Π±ΠΎΡΠ° ΡΠ΅ΠΌΡ Π΄Π»Ρ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π²Ρ Π΅ΡΡ Ρ Π½Π΅ΠΉ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈΡΡ) Π΄ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠΉ ΠΈ ΡΡΠ½ΠΎΠΉ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ
ΠΠ°Ρ
ΠΎΠ΄ΠΈΡΠ΅ Π² ΡΠ°Ρ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠ΅ (Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ ΠΎΡΠ½ΠΎ, ΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°), ΠΈ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΠ΅ Π½Π° Π½Π°ΡΡ Π²ΡΡΡΠ΅ΡΡ, Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ!
302
#digest
ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΡΠ°ΠΌΡΡ
ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΠΈΠ· ΠΌΠΈΡΠ° C++ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ (18 ΡΠ΅Π½ΡΡΠ±ΡΡ β 1 ΠΎΠΊΡΡΠ±ΡΡ 2023)
Π§ΠΈΡΠ°ΡΡ Π΄Π°Π»Π΅Π΅ Π½Π° Π₯Π°Π±ΡΠ΅
302
#quiz #explanation
Π‘ΡΠ°Π½Π΄Π°ΡΡ Π³Π»Π°ΡΠΈΡ:
[temp.fct.spec]
Each function template specialization instantiated from a template has its own copy of any static variable.
Π’ΠΎ Π΅ΡΡΡ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΊΠΎΠΏΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
. Π Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄Π²Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Π΄Π»Ρ
T = int ΠΈ T = double. Π’Π°ΠΊ ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΡΡΠ΅ΡΠΈΠΉ (Π½ΠΎ Π½Π΅ Π²ΡΠΎΡΠΎΠΉ) Π²ΡΠ·ΠΎΠ² f ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄Π½Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
ΠΡΠ²Π΅Ρ: 112302
ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΡΠ΅?
302
#quiz #code
ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½ΠΈΠΆΠ΅? ΠΠ΅Π»ΠΈΡΠ΅ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΌΡΡΠ»ΡΠΌΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
! ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΈ Π΅Π³ΠΎ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ Π² 18:00 ΠΏΠΎ ΠΠΎΡΠΊΠ²Π΅.
#include <iostream>
using namespace std;
template <class T> void f(T) {
static int i = 0;
cout << ++i;
}
int main() {
f(1);
f(1.0);
f(1);
}302
Π Π°Π±ΠΎΡΠ° ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΈ ΡΡΠ΅Π±Π° ΡΡΠ΅Π±ΠΎΠΉ, Π½ΠΎ Π½Π°ΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΡ Π½Π΅ Π΄ΡΠ΅ΠΌΠ»ΡΡ ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΡΡΠΎΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ»Π°Π½Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠΈΡΠ°ΠΏ..
Π ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ Ρ
ΠΎΡΠ΅Π»ΠΈ Π²ΠΈΠ΄Π΅ΡΡ Π΅Π³ΠΎ Π²Ρ? ΠΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΌΡΡΠ»ΡΠΌΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
!
302
#quiz #explanation
Π‘ΡΠ°Π½Π΄Π°ΡΡ Π³Π»Π°ΡΠΈΡ:
[dcl.fct#8]
The return type, the parameter-type-list, the ref-qualifier, the cv-qualifier-seq, and the exception specification, but not the default arguments, are part of the function type.
Π’ΠΎ Π΅ΡΡΡ, ref-ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅
const&& Π΄Π»Ρ X::f) ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΈΠΏ ptr ΡΡΠΎ int(X::*)() const&&.
ΠΡΠ²Π΅Ρ: 00