C++20 рдорд╛рдирдХ рд╕реНрд╡реАрдХреГрдд

C++ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХреАрдХрд░рдг рдкрд░ ISO рд╕рдорд┐рддрд┐ рдЕрдиреБрдореЛрджрд┐рдд рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рдорд╛рдирдХ "рд╕реА ++ 20". рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреНрд╖рдорддрд╛рдПрдВ, рдкреГрдердХ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдЬреАрд╕реАрд╕реА, рдмрдЬрдирд╛ ╨╕ Microsoft рджреГрд╢реНрдп C ++. C++20 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдмрдврд╝рд╛рд╡рд╛.

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

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

  • "рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ", рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝реЗ рдЧрдП, рдЬреЛ рдЖрдкрдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░, рддрд░реНрдХреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рднреАрддрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЧреБрдгреЛрдВ рдХреЗ рдмреАрдЪ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    рдЦрд╛рдХрд╛
    рдЕрд╡рдзрд╛рд░рдгрд╛ EqualityComparable = рдЖрд╡рд╢реНрдпрдХ(T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

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

    рд╕рдВрд░рдЪрдирд╛ int_value {
    рдЗрдВрдЯ рдПрди = 0;
    рдСрдЯреЛ рдЧреЗрдЯрд░_рдПрдлрдПрди() {
    //рдЦрд░рд╛рдм:
    // рд╡рд╛рдкрд╕реА [=]() { рд╡рд╛рдкрд╕реА рдПрди; };

    // рдЕрдЪреНрдЫрд╛:
    рд╡рд╛рдкрд╕реА [=, *рдпрд╣]() { рд╡рд╛рдкрд╕реА рдПрди; };
    }
    };

  • рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ (рдкреЙрдЗрдВрдЯрд░-рдЯреВ-рдореЗрдВрдмрд░), "рдХреЙрдиреНрд╕реНрдЯ рдПрдВрдб" рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
  • рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рд╕рд╛рде рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдкреА0722рдЖрд░1.
  • рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

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

    рдЦрд╛рдХрд╛
    рд╕реНрд╡рддрдГ get_foo() {
    рд╡рд╛рдкрд╕реА рдПрдл;
    }

    get_foo(); // рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
    get_foo ();

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

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

    рдП рдП {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2

  • рдЦрд╛рд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
  • рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрдХреВрд▓рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдФрд░ рдЕрд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди ("[[рд╕рдВрднрд╛рд╡рдирд╛]] рдпрджрд┐ (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ > 0) {")ред
  • "рдлреЙрд░" рд▓реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

    рдХреЗ рд▓рд┐рдП (рдСрдЯреЛ рд╡реА = рдПрд╕рдЯреАрдбреА::рд╡реЗрдХреНрдЯрд░{1, 2, 3}; рдСрдЯреЛ& рдИ : рд╡реА) {

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

    рд╕реНрдерд┐рд░рд╛рдВрдХ int sqr(int n) {
    рд╡рд╛рдкрд╕реА n * n;
    }

    constexpr int r = sqr(100); // рдареАрдХ рд╣реИ
    рдЗрдВрдЯ рдПрдХреНрд╕ = 100;
    int r2 = sqr(x); // рддреНрд░реБрдЯрд┐: 'x' рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛

  • рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде constexpr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ ("constexpr рд╡рд░реНрдЪреБрдЕрд▓ 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 рд▓рдХреНрд╖рдг рдЬреЛрдбрд╝реЗ рдЧрдПред
    • рдЬреЛрдбрд╝реЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рдВрд╕ 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 рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
  • рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЧрдгрдирд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕:

    рдПрдирдо рдХреНрд▓рд╛рд╕ рдЖрд░рдЬреАрдмреАрдП_рдХрд▓рд░_рдЪреИрдирд▓ {рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛, рдЕрд▓реНрдлрд╛ };

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ