C++20 рдорд╛рдирдХ рдордВрдЬреВрд░

рд╕реА++ рднрд╛рд╖реЗрдЪреНрдпрд╛ рдорд╛рдирдХреАрдХрд░рдгрд╛рд╡рд░реАрд▓ ISO рд╕рдорд┐рддреА рдордВрдЬреВрд░ рдЖрдВрддрд░рд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╛рдирдХ"рд╕реА ++ 20" рд╡рд┐рд▓рдЧ рдкреНрд░рдХрд░рдгрд╛рдВрдЪрд╛ рдЕрдкрд╡рд╛рдж рд╡рдЧрд│рддрд╛ рддрдкрд╢реАрд▓рд╛рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреНрд╖рдорддрд╛, рд╕рдорд░реНрдерд┐рдд рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдордзреНрдпреЗ рдЬреАрд╕реАрд╕реА, рд░реЗрдВрдЧрд╛ ╨╕ рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓ рд╕реА ++. C++20 рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдгрд╛рд░реА рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реА рдкреНрд░рдХрд▓реНрдкрд╛рдд рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд рдмреВрд╕реНрдЯ.

рдкреБрдвреАрд▓ рджреЛрди рдорд╣рд┐рдиреНрдпрд╛рдВрдд, рдордВрдЬреВрд░ рддрдкрд╢реАрд▓ рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА рджрд╕реНрддрдРрд╡рдЬ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЕрд╕реЗрд▓, рдЬреНрдпрд╛рд╡рд░ рд╕реНрдкреЗрд▓рд┐рдВрдЧ рдЪреБрдХрд╛ рдЖрдгрд┐ рдЯрд╛рдпрдкрд┐рдВрдЧрдЪреНрдпрд╛ рд╕рдВрдкрд╛рджрдХреАрдп рджреБрд░реБрд╕реНрддреНрдпрд╛рдЪреЗ рдХрд╛рдо рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рдиреЛрд╡реНрд╣реЗрдВрдмрд░рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд╕, рдкрд░рд┐рдгрд╛рдореА рджрд╕реНрддрдРрд╡рдЬ ISO/IEC 14882:2020 рдпрд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рдирд╛рд╡рд╛рдиреЗ рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА ISO рдХрдбреЗ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддреАрд▓. рджрд░рдореНрдпрд╛рди, рд╕рдорд┐рддреАрдиреЗ рдЖрдзреАрдЪ рдкреБрдвреАрд▓ C++23 рдорд╛рдирдХ (C++2b) рд╡рд░ рдХрд╛рдо рд╕реБрд░реВ рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдкреБрдвреАрд▓ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдмреИрдардХреАрдд рд╕рдВрднрд╛рд╡реНрдп рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрд▓. рдирд╡рдХрд▓реНрдкрдирд╛.

рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╕реА ++ 20 (рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЗ):

  • рдЬреЛрдбрд▓реЗрд▓реЗ "рд╕рдВрдХрд▓реНрдкрдирд╛", рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╕реНрддрд╛рд░, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд рдЬреЗ рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА, рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдореНрд╣рдгреВрди рд╕реНрд╡реАрдХрд╛рд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рддрд░реНрдХрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рддрд╛рдд. рдЯреЗрдореНрдкреНрд▓реЗрдЯрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЧреБрдгрдзрд░реНрдорд╛рдВрдордзреАрд▓ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╕рдВрдЧрддреА рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

    рдЯреЗрдореНрдкрд▓реЗрдЯ
    рд╕рдорддрд╛рддреБрд▓рдиреАрдп рд╕рдВрдХрд▓реНрдкрдирд╛ = рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЗрдбрд░ рдлрд╛рдпрд▓реАрдВрдРрд╡рдЬреА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддреАрд▓ рдЕрд╢рд╛ рдореЙрдбреНрдпреВрд▓реНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдореЙрдбреНрдпреВрд▓ "#рд╕рдорд╛рд╡реЗрд╢" рджреНрд╡рд╛рд░реЗ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рди рдХрд░рддрд╛, рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рд╕реАрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реНрддреНрд░реЛрдд рдХреЛрдб рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдирд╡реАрди рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд.
  • рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯрдордзреАрд▓ рдЯреЛрдХрдирдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдореЕрдХреНрд░реЛрдЪреНрдпрд╛ рдЕрдиреБрдХреВрд▓реА рд╡рд┐рд╕реНрддрд╛рд░рд╛рд╕рд╛рдареА рдореЕрдХреНрд░реЛ __VA_OPT__.
  • рддреАрди-рдорд╛рд░реНрдЧ рддреБрд▓рдиреЗрд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рд╕рдорд░реНрдерди.
  • рдмрд┐рдЯрдлрд┐рд▓реНрдбрд╕рд╛рдареА рдбреАрдлреЙрд▓реНрдЯ рдШрдЯрдХ рдЖрд░рдВрднрд┐рдХрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди.
  • рд▓реЕрдореНрдмрдбрд╛ "*рд╣реЗ" рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдХреЕрдкреНрдЪрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.

    рд░рдЪрдирд╛ int_value {
    int n = 0;
    auto getter_fn() {
    //рд╡рд╛рдИрдЯ:
    // рдкрд░рддрд╛рд╡рд╛ [=]() { рдкрд░рддрд╛рд╡рд╛ n; };

    // рдЪрд╛рдВрдЧрд▓реЗ:
    рд░рд┐рдЯрд░реНрди [=, *рд╣рд╛]() { рд░рд┐рдЯрд░реНрди рдПрди; };
    }
    };

  • рдкреЙрдЗрдВрдЯрд░ (рдкреЙрдЗрдВрдЯрд░-рдЯреВ-рд╕рджрд╕реНрдп) рджреНрд╡рд╛рд░реЗ рдШрдЯрдХрд╛рдВрдирд╛ рдХреЙрд▓ рдХрд░рдгреЗ, "const рдЖрдгрд┐" рдЕрднрд┐рд╡реНрдпрдХреНрддреАрджреНрд╡рд╛рд░реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рд╡рд╕реНрддреВрдВрд╕рд╛рдареА рдкреЙрдЗрдВрдЯрд░ рд╡рд╛рдкрд░рдгреЗ.
  • рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░рд╕рд╣ рд╣рдЯрд╡рд╛ рдСрдкрд░реЗрдЯрд░ P0722R1.
  • рд╡рд░реНрдЧрд╛рдВрдирд╛ рдкреНрд░рдХрд╛рд░рд╛рд╢рд┐рд╡рд╛рдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ.

    рд░рдЪрдирд╛ foo {
    foo() = рдбреАрдлреЙрд▓реНрдЯ;
    constexpr foo(int) {}
    };

    рдЯреЗрдореНрдкрд▓реЗрдЯ
    рдСрдЯреЛ get_foo() {
    рдкрд░рддрд╛рд╡рд╛ f;
    }

    get_foo(); // рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд╛рдкрд░рддреЗ
    get_foo ();

  • рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░рд╕рд╣ рдиреЙрди-рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рд▓реЕрдореНрдмрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди.
  • рд▓реЕрдореНрдмрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрд╕рд╛рдареА рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛рд▓рд╛ рдЕрдиреБрдорддреА рджреЗрдд тАЛтАЛрдЖрд╣реЗ (тАЬрд╕реНрд╡рдпрдВ f = [] (std::рд╡реЗрдХреНрдЯрд░ v)").
  • рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдордзреНрдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЯрд░рд▓ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.
  • рд╕реА-рд╢реИрд▓реА рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рд╕рд┐рдВрдЯреЕрдХреНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди - рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рд╕реВрдЪреАрдордзреНрдпреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реВрдЪреАрдмрджреНрдз рдирд╕рд▓реЗрд▓реА рдлреАрд▓реНрдб рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕реБрд░реВ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд.

    рд░рдЪрдирд╛ A {
    рдЗрдВрдЯ рдПрдХреНрд╕;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2

  • рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди.
  • рд╕рд╢рд░реНрдд рд░рдЪрдирд╛ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдмрджреНрджрд▓ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░рд▓рд╛ рд╕реВрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдп рдЖрдгрд┐ рд╕рдВрднрд╡ рдирд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди (тАЬ[[рд╕рдВрднрд╛рд╡реНрдп]] рдЕрд╕рд▓реНрдпрд╛рд╕ (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ > 0) {тАЬ).
  • "рд╕рд╛рдареА" рд▓реВрдкрдордзреНрдпреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡реНрд╣реЕрд▓реНрдпреВ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╢реНрд░реЗрдгреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛

    рд╕рд╛рдареА (рд╕реНрд╡рдпрдВ v = std::рд╡реЗрдХреНрдЯрд░{1, 2, 3}; рд╕реНрд╡рдпрдВ& e : v) {

  • рдирд╡реАрди рдордзреНрдпреЗ рдЕреЕрд░реЗ рдЖрдХрд╛рд░рд╛рдЪреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЧрдгрдирд╛ (тАЬрдирд╡реАрди рджреБрд╣реЗрд░реА[]{1,2,3}тАЭ);
  • тАЬ[[no_unique_address]]тАЭ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдбреЗрдЯрд╛рд╢рд┐рд╡рд╛рдп рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЬрд╛рдЧрд╛ рдШреЗрдд рдирд╛рд╣реАрдд.
  • рдЕрдгреБ рдкреЙрдЗрдВрдЯрд░реНрд╕ (std::Atomic > рдЖрдгрд┐ std::atomic >).
  • рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдордзреНрдпреЗ рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдпреЗ рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.
  • рддрд╛рддреНрдХрд╛рд│ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЗ рдХреЗрд╡рд│ рд╕реНрдерд┐рд░рд╛рдВрдХрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддрд╛рдд.

    consteval int sqr(int n) {
    рдкрд░рдд рдХрд░рд╛ n * n;
    }

    constexpr int r = sqr(100); // рдареАрдХ рдЖрд╣реЗ
    int x = 100;
    int r2 = sqr(x); // рддреНрд░реБрдЯреА: 'x' рд╣рд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА

  • рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдлрдВрдХреНрд╢рдиреНрд╕рд╕рд╣ constexpr рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ (тАЬconstexpr virtual int f() const { return 2; }тАЭ).
  • рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ:
    • UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧрд╕рд╛рдареА char8_t рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.
    • рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реНрд╕ рдмрд┐рдЯ (рдмрд┐рдЯ рдСрдкрд░реЗрд╢рдиреНрд╕) рдЖрдгрд┐ рдЖрд╡реГрддреНрддреА рдЬреЛрдбрд▓реНрдпрд╛.
    • рдЖрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪрд╛ рдЙрдкрд╕рд░реНрдЧ рдЖрдгрд┐ рдкреНрд░рддреНрдпрдп рддрдкрд╛рд╕рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ (рд╕реНрдЯрд╛рд░реНрдЯреНрд╕_рд╡рд┐рде, рдПрдВрдбреНрд╕_рд╡рд┐рде).
    • std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible рдЖрдгрд┐ std::type_identity traits рдЬреЛрдбрд▓реЗ.
    • std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated рдЖрдгрд┐ std::assume_aligned рдлрдВрдХреНрд╢рдиреНрд╕ рдЬреЛрдбрд▓реА.
    • std::make_shared рдордзреНрдпреЗ рдЕреЕрд░реЗрд╕рд╛рдареА рд╕рдорд░реНрдерди рдЬреЛрдбрд▓реЗ.
    • рдЕреЕрд░реЗ-рд╕рджреГрд╢ рд╡рд╕реНрддреВ std::array рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА std::to_array рдлрдВрдХреНрд╢рди рдЬреЛрдбрд▓реЗ.
  • рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЧрдгрди рд╡рд╛рдХреНрдпрд░рдЪрдирд╛:

    enum рд╡рд░реНрдЧ rgba_color_channel { рд▓рд╛рд▓, рд╣рд┐рд░рд╡рд╛, рдирд┐рд│рд╛, рдЕрд▓реНрдлрд╛ };

    std::string_view to_string(rgba_color_channel my_channel) {
    рд╕реНрд╡рд┐рдЪ (рдорд╛рдп_рдЪреЕрдиреЗрд▓) {
    enum rgba_color_channel рд╡рд╛рдкрд░рдгреЗ;
    рдХреЗрд╕ рд▓рд╛рд▓: "рд▓рд╛рд▓" рдкрд░рдд рдХрд░рд╛;
    рдХреЗрд╕ рд╣рд┐рд░рд╡рд╛: "рд╣рд┐рд░рд╡рд╛" рдкрд░рдд рдХрд░рд╛;
    рдХреЗрд╕ рдирд┐рд│рд╛: "рдирд┐рд│рд╛" рдкрд░рдд рдХрд░рд╛;
    рдХреЗрд╕ рдЕрд▓реНрдлрд╛: "рдЕрд▓реНрдлрд╛" рдкрд░рдд рдХрд░рд╛;
    }
    }

  • рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрдордзреНрдпреЗ, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд░реНрддрдирд╛рдореБрд│реЗ, рдСрдкрд░реЗрд╢рди "," ("a[b,c]") рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдордирд╛рдИ рдЖрд╣реЗ. рдЕрд╕реНрдерд┐рд░ рдХреАрд╡рд░реНрдбрд╕рд╣ рдШреЛрд╖рд┐рдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рд╕рд╣ рдмрд╣реБрддреЗрдХ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рдмрдВрдж рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╣ тАЬ++тАЭ рдЖрдгрд┐ тАЬтАФтАЭ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╣.
  • рдкреНрд░рдХрд╛рд░рд╛рдЪреА рдЙрдкрд╕реНрдерд┐рддреА рджрд░реНрд╢рд╡рдгреНрдпрд╛рд╕рд╛рдареА "рдЯрд╛рдЗрдкрдиреЗрдо" рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХреЗрд▓реА.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛