рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЧрд▓рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реЗ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рддрдХред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкреАрдбреАрдПрдл рдХреЗ рдмрдЬрд╛рдп рдЕрдЪрд╛рдирдХ рдкреАрдПрдирдЬреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛, рдпрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдиреЗрдЯрд╡рд░реНрдХ рдХреЗрдмрд▓ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░ рджрд┐рдпрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рджреЛрд╕реНрддрд╛рдирд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИредрдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрдХ рднреНрд░рд╛рдордХ, рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░, рдЬреЛ рдХрдИ рд╕реА ++ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд╣реБрдд рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдХрдИ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреА рддрд░рд╣, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╣рдо C ++ рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддрд▓реНрд▓реАрди рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдЗрд╕рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдЧрддрд┐ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдареАрдХ рдЙрд╕реА рд╕рдордп рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рд╣реБрдИ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВ? рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЬрд┐рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рдкрд╛рдПрдВрдЧреЗредрддреНрд╡рд░рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг
рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ C ++ рдореЗрдВ рдХрд┐рддрдиреЗ рдзреАрдореЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВ?рдЕрдкрд╡рд╛рдж рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдмреНрд░реЗрдХ рдпрд╛ рд╡рд╛рдкрд╕реА рд╕рдВрдЪрд╛рд▓рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдХрд┐рддрдирд╛ рдзреАрдорд╛ рд╣реИ!рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░, рдПрдХ рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИ / рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИредрд╣рдордиреЗ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛:- рдкреВрд░реНрдгрд╛рдВрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реА ++ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВред
- Std :: runtime_error рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХреЗрдВ, рдЬреЛ рдПрдХ рдкрд╛рда рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк, рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдУрд╡рд░рд╣реЗрдб рд▓рд╛рдЧрдд рдореЗрдВ рдПрдХ рдареЛрд╕ рд╡реГрджреНрдзрд┐ рджреЗрдЧрд╛ред
- рдЦрд╛рд▓реА рд▓реМрдЯрдирд╛ред
- C рд╢реИрд▓реА int рддреНрд░реБрдЯрд┐ рдХреЛрдб рд▓реМрдЯрд╛рдПрдВ
рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕рд░рд▓ Google рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ ред рд╡рд╣ рдмрд╛рд░-рдмрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдЪрд▓рд╛рддрд╛ рдерд╛ред рдЖрдЧреЗ, рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рд╣реБрдЖред рдЕрдзреАрд░ рдкрд╛рдардХ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВ редрдЯреЗрд╕реНрдЯ рдХреЛрдбрд╣рдорд╛рд░реЗ рд╕реБрдкрд░ рдЬрдЯрд┐рд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░:const int randomRange = 2;
const int errorInt = 0;
int getRandom() {
return random() % randomRange;
}
рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп:
void exitWithBasicException() {
if (getRandom() == errorInt) {
throw -2;
}
}
void exitWithMessageException() {
if (getRandom() == errorInt) {
throw std::runtime_error("Halt! Who goes there?");
}
}
void exitWithReturn() {
if (getRandom() == errorInt) {
return;
}
}
int exitWithErrorCode() {
if (getRandom() == errorInt) {
return -1;
}
return 0;
}
рдпрд╣реА рд╣реИ, рдЕрдм рд╣рдо Google рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :
void BM_exitWithBasicException(benchmark::State& state) {
for (auto _ : state) {
try {
exitWithBasicException();
} catch (int ex) {
}
}
}
void BM_exitWithMessageException(benchmark::State& state) {
for (auto _ : state) {
try {
exitWithMessageException();
} catch (const std::runtime_error &ex) {
}
}
}
void BM_exitWithReturn(benchmark::State& state) {
for (auto _ : state) {
exitWithReturn();
}
}
void BM_exitWithErrorCode(benchmark::State& state) {
for (auto _ : state) {
auto err = exitWithErrorCode();
if (err < 0) {
}
}
}
BENCHMARK(BM_exitWithBasicException);
BENCHMARK(BM_exitWithMessageException);
BENCHMARK(BM_exitWithReturn);
BENCHMARK(BM_exitWithErrorCode);
BENCHMARK_MAIN();
рдЬреЛ рд▓реЛрдЧ рд╕реБрдВрджрд░ рдХреЛ рдЫреВрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдпрд╣рд╛рдВ рдкреВрд░рд╛ рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ редрдкрд░рд┐рдгрд╛рдо
рдХрдВрд╕реЛрд▓ рдореЗрдВ, рд╣рдо рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:рдбреАрдмрдЧ -рдУ0:------------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------------
BM_exitWithBasicException 1407 ns 1407 ns 491232
BM_exitWithMessageException 1605 ns 1605 ns 431393
BM_exitWithReturn 142 ns 142 ns 5172121
BM_exitWithErrorCode 144 ns 143 ns 5069378
рд░рд┐рд▓реАрдЬрд╝ -реи:------------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------------
BM_exitWithBasicException 1092 ns 1092 ns 630165
BM_exitWithMessageException 1261 ns 1261 ns 547761
BM_exitWithReturn 10.7 ns 10.7 ns 64519697
BM_exitWithErrorCode 11.5 ns 11.5 ns 62180216
(2015 рдореИрдХрдмреБрдХ рдкреНрд░реЛ 2.5GHz i7 рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛)рдкрд░рд┐рдгрд╛рдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИрдВ! рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ (рдЦрд╛рд▓реА рд░рд┐рдЯрд░реНрди рдФрд░ рдПрд░рд░рдХреЛрдб) рдХреЛрдб рдЧрддрд┐ рдХреЗ рдмреАрдЪ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдЕрдВрддрд░ рдХреЛ рджреЗрдЦреЗрдВред рдФрд░ рд╕рдВрдХрд▓рдХ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрдВрддрд░ рдФрд░ рднреА рдмрдбрд╝рд╛ рд╣реИ!рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдпрд╣ рдПрдХ рдорд╣рд╛рди рдкрд░реАрдХреНрд╖рд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ 3 рдФрд░ 4 рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдПрдХ рд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рд╡реИрд╕реЗ рднреА рдмрдбрд╝рд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рд╣рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдУрд╡рд░рд╣реЗрдб рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредрд╢реВрдиреНрдп рд▓рд╛рдЧрдд рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, C ++ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреИрдЪ-рдмреНрд▓реЙрдХ рдмрд╣реБрдд рдзреАрдорд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдХреИрд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдлреЗрдВрдХрдирд╛ рдФрд░ рдкрдХрдбрд╝рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрддрдиреЗ рдЫреЛрдЯреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рднреА! рдФрд░ рдмрдврд╝рддреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде, рдУрд╡рд░рд╣реЗрдб рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реЛредрдЦреИрд░, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрдкрд╡рд╛рдж рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╢рд╛рдпрдж рдЗрд╕реЗ рд░реЛрдХ рджреЗрдВ? рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИредрд╣рд░ рдХреЛрдИ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИ?
рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ C ++ рдкреНрд░рджрд░реНрд╢рди (рдЕрдзреНрдпрд╛рдп 5.4) рдкрд░ рддрдХрдиреАрдХреА рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :, , errorCode- [ ], . , . , .
рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдФрд░ рднреВрд▓рдиреЗ рдХреА рдЕрдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд C ++ рдЙрдкрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдард┐рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬреЛ рд╣рдореЗрдВ C рднрд╛рд╖рд╛ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрд╡рд╛рдж рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХ рднрд░реА рд╣реБрдИ рд╣реИред "рдпрд╛" рдиреЗрдЯрд╡рд░реНрдХ рдХреЗрдмрд▓ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рд╣реИред " рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЕрдкрд╡рд╛рдж рдЖрджрд░реНрд╢ рд╣реИрдВредрд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдРрд╕реЗ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдВрдХреЗрдд рджреЗ рдХрд┐ рдЙрд╕реЗ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЙрд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдпрджрд┐ рдпрд╣ рдЙрддреНрдкрдиреНрди рд╣реБрдИ), рддреЛ рдЗрд╕реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд▓реМрдЯ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рд╣рдо рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗредрдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛрдирд╛
рдУрд╡рд░рд╣реЗрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рджреЛрд╖ рд╣реИ: рд╡реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ рд╣реА рдЗрд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИредрд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдкреНрд░реЛрдлрд╝реЗрд╕рд░ рдЖрдВрджреНрд░реЗрдИ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдЬрд┐рд╕реЗ рдПрдХреНрд╕рдкреЗрдХреНрдЯреЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ T (рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рдХреНрд▓рд╛рд╕ рдЕрдкрд╡рд╛рдж (рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ) рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣ рд╣реИ, рдпрд╣ рдпрд╛ рд╡рд╣ред рдпрд╛ рдпрд╛редрд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдЬрд┐рд╕реЗ C ++ рдореЗрдВ рд╕рдВрдШ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредрдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЙрдирдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛:template <class T>
class Expected {
private:
union {
T value;
Exception exception;
};
public:
Expected(const T& value) ...
Expected(const Exception& ex) ...
bool hasError() ...
T value() ...
Exception error() ...
};
рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди Expected рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ (Expected & e) рдореЗрдВ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рдпрдорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдЬреНрдЮрд╛рдд рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рд╛рд░реВрдк рд╣реЛрдЧрд╛: T & value) рдФрд░ рддреНрд░реБрдЯрд┐ рдбреЗрдЯрд╛ ( рдЕрдкрд╡рд╛рдж рдФрд░ рдкреВрд░реНрд╡)ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдЖрдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реИрд╕рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)редрд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдХреЛрдИ рднреА рд╣рдореЗрдВ рдЗрд╕ рджреВрд╕рд░реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдереНрд░реЛ () рдХреЙрд▓ рдпрд╛ рдХреИрдЪ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛рдиреБрд╕рд╛рд░ рд╣рдорд╛рд░реЗ рдЕрдкрд╡рд╛рдж рд╡рд╕реНрддреБ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЙрдореНрдореАрдж рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг
рд╣рдо рдЕрдкрдиреЗ рдирдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВрдЧреЗ:
Expected<int> exitWithExpected() {
if (getRandom() == errorInt) {
return std::runtime_error("Halt! If you want...");
}
return 0;
}
void BM_exitWithExpected(benchmark::State& state) {
for (auto _ : state) {
auto expected = exitWithExpected();
if (expected.hasError()){
}
}
}
BENCHMARK(BM_exitWithExpected);
BENCHMARK_MAIN();
рдбреНрд░рдо рд░реЛрд▓!!!рдбрд┐рдмрдЧ -O0:------------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------------
BM_exitWithExpected 147 ns 147 ns 4685942
рд░рд┐рд▓реАрдЬрд╝ -реи:------------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------------
BM_exitWithExpected 57.5 ns 57.5 ns 11873261
рдмреБрд░рд╛ рдирд╣реАрдВ! рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ std :: runtime_error рдХреЗ рд▓рд┐рдП, рд╣рдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп рдХреЛ 1605 рд╕реЗ 147 рдиреИрдиреЛрд╕реЗрдХрдВрдб рддрдХ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдФрд░ рднреА рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИ: 1261 рд╕реЗ 57.5 рдиреИрдиреЛрд╕реЗрдХрдВрдб рддрдХ рдХреА рдЧрд┐рд░рд╛рд╡рдЯред -O0 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ 10 рдЧреБрдирд╛ рдЬреНрдпрд╛рджрд╛ рддреЗрдЬ рд╣реИ рдФрд░ -O2 рдХреЗ рдореБрдХрд╛рдмрд▓реЗ 20 рдЧреБрдирд╛ рдЬреНрдпрд╛рджрд╛ рддреЗрдЬ рд╣реИредрддреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЙрдореНрдореАрдж рдХрдИ рдмрд╛рд░ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рддрдВрддреНрд░ рднреА рджреЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рд╢рдмреНрджрд╛рд░реНрде рд╢реБрджреНрдзрддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдкрд╡рд╛рдж рдкреВрд░реНрдг рдмреБрд░рд╛рдИ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдХрднреА-рдХрднреА рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рдЕрд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВред рд╣рдо рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╕рдорд╛рдзрд╛рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВредрд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВ, рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЖрдк рдУрд╡рд░рд╣реЗрдб рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ (рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдкрдХрдбрд╝-рдмреНрд▓реЙрдХ), рдЬрд╣рд╛рдВ рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рд╡рд╛рдкрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)редрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡рд░реНрдЧ рдХреЛ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рдорд┐рд▓ рд╕рдХреЗред рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред