C ++ ืจื•ืกืœืึทื ื“: ื•ื•ื™ ืขืก ื’ืขื˜ืจืืคืŸ

ืื•ื™ื‘ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ืฉืคึผื™ืœ ืื™ืจ ื–ืึธื’ืŸ ืึทื– ืขืก ืื™ื– C ++ ืงืึธื“ ื›ืึทื ื’ื’ื™ื ื’ ืื•ื™ืฃ ื“ื™ ื•ื•ืึทื ื˜, ื“ืขืžืึธืœื˜ ื“ื•ืจืš ื“ื™ ืกื•ืฃ ืขืก ืื™ื– ื’ืขื‘ื•ื ื“ืŸ ืฆื• ื“ืจื™ื™ืขืŸ ืื™ืจ ืื™ืŸ ื“ื™ ืคึฟื™ืก.

Bjarne Stroustrup

ืคื•ืŸ 31 ืืงื˜ืื‘ืขืจ ื‘ื™ื– 1 ื ืื•ื•ืขืžื‘ืขืจ, ื“ื™ C++ ืจื•ืกืœืึทื ื“ ืคึผื™ื˜ืขืจ ืงืึธื ืคึฟืขืจืขื ืฅ ืื™ื– ื’ืขื”ืืœื˜ืŸ ืื™ืŸ ืกื˜ ืคืขื˜ืขืจื‘ื•ืจื’ - ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื’ืจื•ื™ืก-ื•ื•ืึธื’ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืงืึทื ืคืจืึทื ืกืึทื– ืื™ืŸ ืจื•ืกืœืึทื ื“, ืึธืจื’ืึทื ื™ื–ื™ืจื˜ ื“ื•ืจืš JUG Ru Group. ืคืืจื‘ืขื˜ืŸ ืกืคึผื™ืงืขืจื– ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืžื™ื˜ื’ืœื™ื“ืขืจ ืคื•ืŸ ื“ื™ C ++ ืกื˜ืึทื ื“ืึทืจื“ืก ืงืึทืžื™ื˜ื™, CppCon ืกืคึผื™ืงืขืจื–, ืึธื•ืจื™ืœื™ ื‘ื•ืš ืžื—ื‘ืจื™ื, ืื•ืŸ ืžืึทื™ื ื˜ืขืจืก ืคื•ืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ืึทื–ืึท ื•ื•ื™ LLVM, libc ++ ืื•ืŸ Boost. ื“ื™ ืงืึธื ืคึฟืขืจืขื ืฅ ืื™ื– ืึทื™ืžืขื“ ืฆื• ื™ืงืกืคึผื™ืจื™ืึทื ืกื˜ C ++ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื•ื•ืึธืก ื•ื•ื™ืœืŸ ืฆื• ื“ื™ืคึผืึทืŸ ื–ื™ื™ืขืจ ืขืงืกืคึผืขืจื˜ื™ื– ืื•ืŸ ื•ื•ืขืงืกืœ ื™ืงืกืคึผื™ืจื™ืึทื ืกื™ื– ืื™ืŸ ืœืขื‘ืŸ ืงืึธืžื•ื ื™ืงืึทืฆื™ืข. ืกื˜ื•ื“ืขื ื˜ืŸ, ื’ืจืึทื“ื–ืฉืึทื•ื•ืึทื˜ ืกื˜ื•ื“ืขื ื˜ืŸ ืื•ืŸ ืื•ื ื™ื•ื•ืขืจืกื™ื˜ืขื˜ ืœืขืจืขืจืก ื–ืขื ืขืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ืžื™ื˜ ื–ื™ื™ืขืจ ืฉื™ื™ืŸ ื“ื™ืกืงืึทื•ื ืฅ.

ื“ื™ ืžืึธืกืงื•ื•ืขืจ ืื•ื™ืกื’ืึทื‘ืข ืคึฟื•ืŸ ื“ืขืจ ืงืึธื ืคึฟืขืจืขื ืฅ ื•ื•ืขื˜ ื–ืฒึทืŸ ืคึฟืึทืจืึทืŸ ืฆื• ื‘ืึทื–ื•ื›ืŸ ืฉื•ื™ืŸ ืื™ืŸ ืืคืจื™ืœ ืงื•ืžืขื ื“ื™ืงืŸ ื™ืึธืจ, ืึธื‘ืขืจ ื“ืขืจื•ื•ืฒึทืœ ื•ื•ืขืœืŸ ืื•ื ื“ื–ืขืจืข ืชึผืœืžื™ื“ื™ื ื“ืขืจืฆื™ื™ืœืŸ ื•ื•ืึธืก ืคึฟืึทืจ ืื™ื ื˜ืขืจืขืกืึทื ื˜ืข ื–ืึทื›ืŸ ื–ื™ื™ ื”ืึธื‘ืŸ ื–ื™ืš ื’ืขืœืขืจื ื˜ ื‘ืฒึท ื“ืขืจ ืœืขืฆื˜ืขืจ ื’ืขืฉืขืขื ื™ืฉ. 

C ++ ืจื•ืกืœืึทื ื“: ื•ื•ื™ ืขืก ื’ืขื˜ืจืืคืŸ

ืคืึธื˜ืึธ ืคื•ืŸ ืงืึธื ืคึฟืขืจืขื ืฅ ืืœื‘ืื

ื•ื•ืขื’ืŸ ืื•ื ื“ื–

ืฆื•ื•ื™ื™ ืกื˜ื•ื“ืขื ื˜ืŸ ืคื•ืŸ ื“ืขืจ ื ืึทืฆื™ืึธื ืึทืœืขืจ ืคืึธืจืฉื•ื ื’ ืื•ื ื™ื•ื•ืขืจืกื™ื˜ืขื˜ ื”ืขื›ืขืจ ืฉื•ืœืข ืคื•ืŸ โ€‹โ€‹ืขืงืึธื ืึธืžื™ืง - ืกื˜ ืคืขื˜ืขืจื‘ื•ืจื’ ื’ืขืืจื‘ืขื˜ ืื•ื™ืฃ ื“ืขื ืคึผืึธืกื˜ืŸ:

  • ืœื™ื–ืึท ื•ื•ืึทืกื™ืœืขื ืงืึธ ืื™ื– ืึท 4th ื™ืึธืจ ื•ื ื“ืขืจื’ืจืึทื“ื•ืึทื˜ืข ืชึผืœืžื™ื“ ื’ืขืœืขืจื ื˜ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืึทืคึผืคึผืœื™ืขื“ ืžืึทื˜ื”ืขืžืึทื˜ื™ืงืก ืื•ืŸ ืงืึธืžืคึผื™ื•ื˜ืขืจ ื•ื•ื™ืกื ืฉืึทืคึฟื˜ ืคึผืจืึธื’ืจืึทื. ืื™ืš ื‘ื™ืŸ ื’ืขื•ื•ืขืŸ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ื“ื™ C ++ ืฉืคึผืจืึทืš ืื™ืŸ ืžื™ื™ืŸ ืขืจืฉื˜ืขืจ ื™ืึธืจ ืื™ืŸ ืื•ื ื™ื•ื•ืขืจืกื™ื˜ืขื˜, ืื™ืš ื“ืขืจื ืึธืš ืคืืจื“ื™ื ื˜ ื“ืขืจืคืึทืจื•ื ื’ ืžื™ื˜ ืื™ื ื“ื•ืจืš ื™ื ื˜ืขืจื ืฉื™ืคึผืก ืื™ืŸ ื“ื™ ืื™ื ื“ื•ืกื˜ืจื™ืข. ืžื™ื™ึทืŸ ืœื™ื™ึทื“ื ืฉืึทืคื˜ ืคึฟืึทืจ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคืจืึทื›ืŸ ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ ืื•ืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ืœืึธื–ืŸ ื–ื™ื™ืŸ ืฆื™ื™ื›ืŸ ืื•ื™ืฃ ื“ื™ ืกืขืœืขืงืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืจื™ืคึผืึธืจืฅ ืื•ื™ืฃ ื“ืขืจ ื–ื™ืฆื•ื ื’.
  • ื“ืึทื ื™ืึท ืกืžื™ืจื ืึธื•ื• ืื™ื– ืึท 1-ื™ืึธืจ ืชึผืœืžื™ื“ ืคื•ืŸ ื“ื™ ืžืึทืกื˜ืขืจื™ ืคึผืจืึธื’ืจืึทื "ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืื•ืŸ ื“ืึทื˜ืึท ืึทื ืึทืœื™ืกื™ืก". ืื™ืš ื‘ื™ืŸ ื ืึธืš ืื™ืŸ ืฉื•ืœืข, ืื™ืš ื’ืขืฉืจื™ื‘ืŸ ืึธืœื™ืžืคึผื™ืึทื“ ืคืจืื‘ืœืขืžืขืŸ ืื™ืŸ C++, ืื•ืŸ ื“ืขืžืึธืœื˜ ืขืก ืื™ื– ืขืคืขืก ื’ืขื˜ืจืืคืŸ ืึทื– ื“ื™ ืฉืคึผืจืึทืš ืงืขืกื™ื™ื“ืขืจ ื’ืขืงื•ืžืขืŸ ืึทืจื•ื™ืฃ ืื™ืŸ ื‘ื™ืœื“ื•ื ื’ืงืจื™ื™ื– ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ ืื•ืŸ ื™ื•ื•ืขื ื˜ืฉืึทื•ื•ืึทืœื™ ื’ืขื•ื•ืืจืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ืึทืจื‘ืขื˜ ืฉืคึผืจืึทืš. ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ ืื™ืŸ ื“ืขืจ ื–ื™ืฆื•ื ื’ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ืžื™ื™ืŸ ื•ื•ื™ืกืŸ ืื•ืŸ ืื•ื™ืš ืœืขืจื ืขืŸ ื•ื•ืขื’ืŸ ื ื™ื™ึทืข ืึทืคึผืขืจื˜ื•ื ืึทื˜ื™ื–.

ืื™ืŸ ื“ื™ ื ื•ื–ืœืขื˜ืขืจ, ื“ื™ ืคื™ื™ื™ืงื™ื™ึทื˜ ืคื™ืจืขืจืฉืึทืคื˜ ืึธืคื˜ ืฉืึทืจืขืก ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื‘ื™ืœื“ื•ื ื’ืงืจื™ื™ื– ื’ืขืฉืขืขื ื™ืฉืŸ ืฉื™ื™ึทื›ื•ืช ืฆื• ืื•ื ื“ื–ืขืจ ืกืคึผืขืฆื™ืึทืœื™ื˜ืขื˜. ืื™ืŸ ืกืขืคื˜ืขืžื‘ืขืจ ืžื™ืจ ื’ืขื–ืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ C ++ ืจื•ืกืœืึทื ื“ ืื•ืŸ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ื•ื•ื™ ืฆื•ื”ืขืจืขืจืก. ื“ืึธืก ืื™ื– ืื•ื ื“ื–ืขืจ ืขืจืฉื˜ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืคื•ืŸ ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ ืื™ืŸ ืึทื–ืึท ืงืึทื ืคืจืึทื ืกืึทื–.

ืงืึธื ืคึฟืขืจืขื ืฅ ืกื˜ืจื•ืงื˜ื•ืจ

  • ืจื™ืคึผืึธืจืฅ

ืื™ืŸ ืœื•ื™ืฃ ืคื•ืŸ ืฆื•ื•ื™ื™ ื˜ืขื’, ืขืงืกืคึผืขืจืฅ ืœื™ื™ืขื ืขืŸ 30 ืจื™ืคึผืึธืจืฅ, ืงืึทื•ื•ืขืจื™ื ื’ ืคื™ืœืข ื”ื™ื™ืก ื˜ืขืžืขืก: ื™ื ื“ื–ืฉื™ื ื™ืึทืก ื ื•ืฆืŸ ืคื•ืŸ ืฉืคึผืจืึทืš ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืฆื• ืกืึธืœื•ื•ืข ื’ืขื•ื•ืขื ื“ื˜ ืคึผืจืึธื‘ืœืขืžืก, ืึทืคึผืงืึทืžื™ื ื’ ืฉืคึผืจืึทืš ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื•ื ื’ืขืŸ ืื™ืŸ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืžื™ื˜ ื“ื™ ื ื™ื™ึทืข ื ืึธืจืžืึทืœ, ืงืึทืžืคึผืจืึทืžื™ื™ื–ื™ื– ืื™ืŸ C ++ ืคึผืœืึทืŸ ืื•ืŸ ืคึผืจื™ืงืึธืฉืึทื ื– ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื–ื™ื™ืขืจ ืงืึทื ืกืึทืงื•ื•ืขื ืกืึทื–, ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื˜ืฉื™ืงืึทื•ื•ืข ืคึผืจื•ื™ืขืงื˜ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืขื˜ืœืขื›ืข ื“ืขื˜ืึทื™ืœืก ืื•ื ื˜ืขืจ ื“ื™ ืงืึทืคึผื˜ืขืจ ืคื•ืŸ ื“ื™ ืฉืคึผืจืึทืš ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ. ื’ืœืฒื›ืฆืฒื˜ื™ืง ื–ืฒึทื ืขืŸ ืคึฟืึธืจื’ืขืงื•ืžืขืŸ ื“ืจืฒึท ืคึฟืึธืจืฉื˜ืขืœื•ื ื’ืขืŸ, ืžืขืจืกื˜ื ืก ืฆืฐืฒ ืืฑืฃ ืจื•ืกื™ืฉ ืื•ืŸ ืืฒื ืข ืืฑืฃ ืขื ื’ืœื™ืฉ.

  • ื“ื™ืกืงื•ืกื™ืข ื–ืึธื ืขืก

ื ื ืš ื“ืข ืจ ืจืขื“ืข , ื–ืขื ืข ืŸ ืืœ ืข ืื•ืžื’ืขืคืจืขื’ื˜ ืข ืคืจืื’ ืŸ ืื• ืŸ ืื•ืžืคืืจืขื ื“ื™ืงื˜ ืข ื“ื™ืกืงื•ืกื™ืขืก , ืืจื™ื‘ืขืจื’ืขืคื™ืจ ื˜ ื’ืขืฐืืจ ืŸ ืื•ื™ ืฃ ืกืคืขืฆื™ืข ืœ ื‘ืืฉื˜ื™ืžื˜ืข ืจ ื’ืขื‘ื™ื˜ ืŸ ืคื ืจ ืงืืžื•ื ื™ืงืืฆื™ืข ื ืžื™ ื˜ ื“ ื™ ืจืขื“ื ืขืจ , ืื•ื™ืกื’ืขืฉื˜ืื ืข ืŸ ืžื™ ื˜ ืžืืจืงึพื‘ืจืขื˜ืœืขืš . ื ื’ื•ื˜ืข ื•ื•ืขื’ ืฆื• ืคืืจืžื™ื™ื“ืŸ ื“ื™ ื‘ืจืขื›ืŸ ืฆื•ื•ื™ืฉืŸ ืจืขื“ืขืก ืžื™ื˜ ืึท ืึธื ื’ืขื ืขื ืฉืžื•ืขืก.

  • ื‘ืœื™ืฅ ื˜ืึทืœืงืก ืื•ืŸ ื™ื ืคืึธืจืžืึทืœ ื“ื™ืกืงื•ืกื™ืขืก

ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœื˜ ื’ืขื‘ืŸ ืึท ืงื•ืจืฅ ื‘ืึทืจื™ื›ื˜, ืื™ืจ ืงืขื ื˜ ื–ื™ืš ืื™ื™ื ืฉืจื™ื™ื‘ืŸ ืื•ื™ืฃ ื“ื™ ื•ื•ื”ื™ื˜ืขื‘ืึธืึทืจื“ ืคึฟืึทืจ ื“ื™ ืึธื•ื•ื ื˜ ื‘ืœื™ืฅ ืจืขื“ืŸ ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืคื™ื ืฃ ืžื™ื ื•ื˜ ืฆื™ื™ื˜ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืขืคึผืขืก ืื•ื™ืฃ ื“ืขืจ ืงืึธื ืคึฟืขืจืขื ืฅ ื˜ืขืžืข. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึท ืฉื ืขืœ ื”ืงื“ืžื” ืฆื• ืกืึทื ื™ื˜ื™ื–ืขืจืก ืคึฟืึทืจ C ++ (ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื ื™ื™ึท) ืึธื“ืขืจ ืึท ื“ืขืจืฆื™ื™ืœื•ื ื’ ื•ื•ืขื’ืŸ ืึท ื–ืฉื•ืง ืื™ืŸ ืกื™ื ื•ืก ื›ื•ื•ืึทืœื™ืข ื“ื•ืจ ื•ื•ืึธืก ืงืขื ืขืŸ ื ืึธืจ ื–ื™ื™ืŸ ื’ืขื”ืขืจื˜, ืึธื‘ืขืจ ื ื™ืฉื˜ ื’ืขื–ืขืŸ.

ืืŸ ืื ื“ืขืจ ืคึฟืึธืจืžืึทื˜ ืื™ื– ื“ื™ ื˜ืึทืคืœื™ืข ื“ื™ืกืงื•ืกื™ืข "ืžื™ื˜ ืึท ื”ืึทืจืฅ ืฆื• ื”ืึทืจืฅ ืงืึทืžื™ื˜ื™." ืื•ื™ืฃ ื“ืขืจ ื‘ื™ื ืข ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืžื™ื˜ื’ืœื™ื“ืขืจ ืคื•ืŸ ื“ื™ ืกื˜ืึทื ื“ืขืจื“ื™ื–ื™ื™ืฉืึทืŸ ืงืืžื™ื˜ืขื˜, ืื•ื™ืฃ ื“ื™ ืคึผืจืึทื“ื–ืฉืขืงื˜ืขืจ ืื™ื– ืึท ืงืึทืžื™ืŸ (ืึธืคื™ืฆื™ืขืœ - ืฆื• ืฉืึทืคึฟืŸ ืึท ืึธืคื ื”ืึทืจืฆื™ืง ืึทื˜ืžืึธืกืคืขืจ, ืึธื‘ืขืจ ื“ื™ ืกื™ื‘ื” "ื•ื•ื™ื™ึทืœ ืึทืœืฅ ืื™ื– ืื•ื™ืฃ ืคื™ื™ืขืจ" ืžื™ื™ื ื˜ ืคืึทื ื™ืขืจ), ืฉืืœื•ืช ื•ื•ืขื’ืŸ ื“ื™ ื ืึธืจืžืึทืœ ืื•ืŸ ื“ื™ ืึทืœื’ืขืžื™ื™ื ืข ื–ืขืื•ื ื’ ืคื•ืŸ C ++ , ืึธืŸ ื”ืขืึทื˜ืขื“ ื˜ืขื›ื ื™ืฉ ื“ื™ืกืงื•ืกื™ืขืก ืื•ืŸ ื”ืึธืœื™ื•ื•ืึทืจืก. ืข ืก ื”ื ื˜ ื–ื™ ืš ืืจื•ื™ืกื’ืขืฐื™ื–ืŸ , ื ื– ืื•ื™ ืš ืื™ ืŸ ื“ืข ืจ ืงืืžื™ื˜ืข ื˜ ืื ื˜ื”ืืœื˜ ืŸ ืœืขื‘ืขื“ื™ืงืข ืจ ืžืขื ื˜ืฉ ืŸ ืฐื ืก ื–ื ืœ ื ื™ืฉ ื˜ ื–ืฒ ืŸ ืื™ื ื’ืื ืฆ ืŸ ื–ื™ื›ืขืจ ืข ืคื• ืŸ ืขืคืข ื ืื“ืข ืจ ืžืข ืŸ ืฐืฒืก ืŸ ืขืคืข ื ื ื™ืฉื˜ .

ืคึฟืึทืจ ืคืึทื ืก ืคื•ืŸ ื”ืึธืœื™ื•ื•ืึทืจืก, ื“ื™ ื“ืจื™ื˜ ื’ืขืฉืขืขื ื™ืฉ ืคืืจื‘ืœื™ื‘ืŸ ืื•ื™ืฃ ื“ืขื ืคืึทืœ - ื“ื™ BOF ืกืขืกื™ืข "ื’ื™ื™ืŸ ื•ื•ืก C ++". ืžื™ืจ ื ืขืžืขืŸ ืึท Go ืœื™ื‘ื”ืึธื‘ืขืจ, ืึท C ++ ืœื™ื‘ื”ืึธื‘ืขืจ, ืื™ื™ื“ืขืจ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ืกืขืกื™ืข, ื–ื™ื™ ืฆื•ื–ืึทืžืขืŸ ืฆื•ื’ืจื™ื™ื˜ืŸ 100500 ืกืœื™ื™ื“ื– ืื•ื™ืฃ ืึท ื˜ืขืžืข (ื•ื•ื™ ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ ืคึผืึทืงื™ื“ื–ืฉื™ื– ืื™ืŸ C ++ ืึธื“ืขืจ ื“ื™ ืคืขืœืŸ ืคื•ืŸ ื“ื–ืฉืึทื ืขืจื™ืงืก ืื™ืŸ Go), ืื•ืŸ ื“ืขืจื ืึธืš ื–ื™ื™ ื”ืึธื‘ืŸ ืึท ืœืขื‘ืขื“ื™ืง ื“ื™ืกืงื•ืกื™ืข ืฆื•ื•ื™ืฉืŸ ื–ื™ืš ืื•ืŸ ืžื™ื˜ ื“ืขื ืขื•ืœื, ืื•ืŸ ื“ืขืจ ืขื•ืœื ืคืจื•ื‘ื™ืจื˜ ืฆื• ืคืืจืฉื˜ื™ื™ืŸ ืฆื•ื•ื™ื™ ืฉื˜ืื ื“ืคื•ื ืงื˜ืŸ ืื•ื™ืฃ ืื™ื™ื ืžืืœ. ืื•ื™ื‘ ืึท ื”ืึธืœื™ื•ื•ืึทืจ ืกื˜ืึทืจืฅ ืื•ื™ืก ืคื•ืŸ ืงืึธื ื˜ืขืงืกื˜, ื“ืขืจ ืžืึธื“ืขืจืึทื˜ืึธืจ ื™ื ืขืจื•ื•ื™ืŸ ืื•ืŸ ื‘ืื•ื•ื™ืœื™ืงื˜ ื“ื™ ืคึผืึทืจื˜ื™ืขืก. ื“ืขื ืคึฟืึธืจืžืึทื˜ ืื™ื– ืึทื“ื™ืงื˜ื™ื•ื•: ืขื˜ืœืขื›ืข ืฉืขื” ื ืึธืš ื“ื™ ืึธื ื”ื™ื™ื‘, ื‘ืœื•ื™ื– ื”ืึทืœื‘ ืคื•ืŸ ื“ื™ ืกืœื™ื™ื“ื– ื–ืขื ืขืŸ ื’ืขืขื ื“ื™ืงื˜. ื“ืขืจ ืกื•ืฃ ื”ืื˜ ื’ืขืžื•ื–ื˜ ืฉื˜ืืจืง ืคืืจืฉื ืขืœืขืจืŸ.

  • ืคึผืึทืจื˜ื ืขืจ ืฉื˜ื™ื™ื˜

ื“ื™ ืคึผืึทืจื˜ื ืขืจืก ืคึฟื•ืŸ ื“ืขืจ ืงืึธื ืคึฟืขืจืขื ืฅ ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืจืขืคึผืจื™ื–ืขื ื˜ื™ื“ ืื™ืŸ ื“ื™ ื–ืึทืœืŸ - ืื™ืŸ ื“ื™ ืกื˜ืึทื ื“ื– ื”ืึธื‘ืŸ ื–ื™ื™ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ื“ื™ ืื™ืฆื˜ื™ืงืข ืคึผืจืึธื™ืขืงื˜ืŸ, ื’ืขืคึฟื™ื ื˜ ื™ื ื˜ืขืจื ืฉื™ืคึผืก ืื•ืŸ ื‘ืึทืฉืขืคื˜ื™ืงื•ื ื’, ื“ื•ืจื›ื’ืขืคื™ืจื˜ ืงื•ื•ื™ื–ืขืก ืื•ืŸ ืงืœื™ื™ื ืข ืคืึทืจืžืขืกื˜ื•ื ื’ืขืŸ, ืื•ืŸ ืื•ื™ืš ืื•ื™ืกื’ืขืœืึธืคืŸ ืฉื™ื™ื ืข ืคึผืจื™ื™ื–ืŸ. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ึทื˜, ืขื˜ืœืขื›ืข ืงืึธืžืคึผืึทื ื™ืขืก ืืคื™ืœื• ื’ืขืคึฟื™ื ื˜ ืฆื• ื’ื™ื™ืŸ ื“ื•ืจืš ื“ื™ ืขืจืฉื˜ ืกื˜ืึทื’ืขืก ืคื•ืŸ ื™ื ื˜ืขืจื•ื•ื™ื•ื–, ื•ื•ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ื–ืขื ืขืŸ ื’ืขืงื•ืžืขืŸ ื ื™ื˜ ื‘ืœื•ื™ื– ืฆื• ื”ืขืจืŸ ืฆื• ืจื™ืคึผืึธืจืฅ.

ื˜ืขื›ื ื™ืฉ ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ื“ื™ ืจื™ืคึผืึธืจืฅ

ืžื™ ืจ ื”ืื‘ ืŸ ื–ื™ ืš ืฆื•ื’ืขื”ืขืจ ื˜ ื‘ืืจื™ื›ื˜ ืŸ ื‘ืฒื“ ืข ื˜ืข ื’ . ืฆื• ืžืึธืœ ืื™ื– ืฉื•ื•ืขืจ ื’ืขื•ื•ืขืŸ ืื•ื™ืกืฆื•ืงืœื™ื™ื‘ืŸ ืื™ื™ืŸ ื‘ืึทืจื™ื›ื˜ ืคึฟื•ืŸ ื“ื™ ืคึผืึทืจืึทืœืขืœืŸ - ืžื™ืจ ื”ืึธื‘ืŸ ืžืกื›ื™ื ื’ืขื•ื•ืขืŸ ื–ื™ืš ืฆื•ืฆื•ื˜ื™ื™ืœืŸ ืื•ืŸ ืื•ื™ืกื˜ื•ื™ืฉืŸ ื“ื™ ื•ื•ื™ืกืŸ ื•ื•ืึธืก ืžืขืŸ ื”ืึธื˜ ื’ืขื•ื•ืื•ื ืขืŸ ืื™ืŸ ื“ื™ ื‘ืจืขื›ืŸ. ืื•ืŸ ืืคื™ืœื• ืึทื–ื•ื™, ืขืก ืžื™ื™ื ื˜ ืึทื– ืคื™ืœ ืื™ื– ืœื™ื ืงืก ืื•ื™ืก. ื“ืึธ ืžื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื“ืขื ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืจื™ืคึผืึธืจืฅ ื•ื•ืึธืก ืžื™ืจ ื’ืขืคื•ื ืขืŸ ืจื•ื‘ึฟ ื˜ืฉื™ืงืึทื•ื•ืข

ื™ืงืกืขืคึผืฉืึทื ื– ืื™ืŸ C ++ ื“ื•ืจืš ื“ื™ ืคึผืจื™ื–ืžืข ืคื•ืŸ โ€‹โ€‹ืงืึทืžืคึผื™ื™ืœืขืจ ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก, ืจื•ื™ืžืขืจ ืจื•ืกื™ืึทืขื•ื•

C ++ ืจื•ืกืœืึทื ื“: ื•ื•ื™ ืขืก ื’ืขื˜ืจืืคืŸ
ืจื•ืง ืคื•ืŸ ืคึผืจืขื–ืึทื ื˜ื™ื™ืฉืึทื ื–

ื•ื•ื™ ื“ืขืจ ื˜ื™ื˜ืœ ืกืึทื’ื“ื–ืฉืขืกืฅ, ืจืึธืžืึทืŸ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืื•ื™ืกื ืขืžืขืŸ ื ื™ืฆืŸ LLVM ื•ื•ื™ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืคึฟืึทืจ ื™ืขื ืข ื•ื•ืึธืก ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ Clang ืื™ืŸ ื–ื™ื™ืขืจ ืึทืจื‘ืขื˜, ื“ืขืจ ื‘ืึทืจื™ื›ื˜ ืงืขืŸ ื ืึธืš ื’ืขื‘ืŸ ืึท ื’ืขื“ืึทื ืง ืคื•ืŸ ื•ื•ื™ ื“ื™ ืงืึธื“ ืงืขืŸ ื–ื™ื™ืŸ ืึธืคึผื˜ื™ืžื™ื–ืขื“. ื“ืึธืก ืื™ื– ืึทื–ื•ื™ ื•ื•ื™ื™ึทืœ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ ืงืึธืžืคึผื™ืœืขืจืก ืื•ืŸ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ื ืึธืจืžืึทืœ ืœื™ื™ื‘ืจืขืจื™ื– ื™ื‘ืขืจื’ืขื‘ืŸ ืžื™ื˜ ื™ืขื“ืขืจ ืื ื“ืขืจืข ืื•ืŸ ืคื™ืœืข ืžืฆืœื™ื— ืกืึทืœื•ืฉืึทื ื– ืงืขื ืขืŸ ืฆื•ื ื•ื™ืคืคืึทืœืŸ.

ืึทื–ื•ื™, ืฆื• ืฉืขืคึผืŸ ืึท ื•ื™ืกื ืขื, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ืึธืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื˜ื™ื ื’ื–: ืจื•ืคืŸ ื“ื™ ื”ืึทื ื“ืœื™ื ื’ ืงืึธื“ (ืื•ื™ื‘ ืขืก ืื™ื–) ืึธื“ืขืจ ืคืจื™ื™ ืจืขืกื•ืจืกืŸ ืื™ืŸ ื“ื™ ืงืจืึทื ื˜ ืžื“ืจื’ื” ืื•ืŸ ื•ืžื“ืจื™ื™ ื“ื™ ืึธื ืœื™ื™ื’ืŸ ื”ืขื›ืขืจ. ืึทืœืข ื“ืขื ืคื™ืจื˜ ืฆื• ื“ื™ ืคืึทืงื˜ ืึทื– ื“ืขืจ ืงืึทืžืคึผื™ื™ืœืขืจ ืžื•ืกื™ืฃ ื ืึธืš ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืคึฟืึทืจ ืจื•ืคื˜ ื•ื•ืึธืก ืคึผืึทื˜ืขื ื˜ืฉืึทืœื™ ื•ื•ืึทืจืคืŸ ืื•ื™ืกื ืขืžืขืŸ. ื“ืขืจื™ื‘ืขืจ, ืื•ื™ื‘ ื“ื™ ื•ื™ืกื ืขื ืื™ื– ื ื™ืฉื˜ ื˜ืึทืงืข ืื•ื™ืคืฉื˜ื™ื™ืŸ, ื“ื™ ืคึผืจืึธื’ืจืึทื ื•ื•ืขื˜ ื ืึธืš ื“ื•ืจื›ืคื™ืจืŸ ื•ืžื ื™ื™ื˜ื™ืง ืึทืงืฉืึทื ื–. ืื™ืŸ ืกื“ืจ ืฆื• ืขืคืขืก ืจืขื“ื•ืฆื™ืจืŸ ืึธื•ื•ื•ืขืจื›ืขื“, LLVM ื”ืื˜ ืขื˜ืœืขื›ืข ื›ื™ื•ืจื™ืกื˜ื™ืงืก ืคึฟืึทืจ ื“ื™ื˜ืขืจืžืึทื ื™ื ื’ ืกื™ื˜ื•ืึทื˜ื™ืึธื ืก ื•ื•ื• ื•ื™ืกื ืขื ื”ืึทื ื“ืœื™ื ื’ ืงืึธื“ ื“ืึทืจืฃ ื ื™ื˜ ื–ื™ื™ืŸ ืฆื•ื’ืขื’ืขื‘ืŸ ืึธื“ืขืจ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ "ืขืงืกื˜ืจืข" ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ื“ื•ืกื˜.

ื“ืขืจ ืจืขื“ื ืขืจ ืื•ื ื˜ืขืจื–ื•ื›ื˜ ืืจื•ื ื ื˜ื•ืฅ ืคื•ืŸ ื–ื™ื™ ืื•ืŸ ื•ื•ื™ื™ื–ืŸ ื‘ื™ื™ื“ืข ืกื™ื˜ื•ืืฆื™ืขืก ื•ื•ืื• ื–ื™ื™ ื”ืขืœืคืŸ ืคืืจืฉื ืขืœืขืจืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื“ื™ ืคืจืื’ืจืื, ืื•ืŸ ื“ื™ ื•ื•ืื• ื“ื™ ืžืขื˜ืึธื“ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึธื ื•ื•ืขื ื“ืœืขืš.

ืื–ื•ื™, ืจื•ื™ืžืขืจ ืจื•ืกื™ืึทืขื•ื• ืคื™ืจื˜ ืกื˜ื•ื“ืขื ื˜ืŸ ืฆื• ื“ื™ ืžืกืงื ื ืึทื– ืงืึธื“ ืžื™ื˜ ื•ื™ืกื ืขื ื”ืึทื ื“ืœื™ื ื’ ืงืขื ืขืŸ ื ื™ื˜ ืฉื˜ืขื ื“ื™ืง ื–ื™ื™ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืžื™ื˜ ื ื•ืœ ืึธื•ื•ื•ืขืจื›ืขื“, ืื•ืŸ ื’ื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืขืฆื”:

  • ื•ื•ืขืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืœื™ื™ื‘ืจืขืจื™ื–, ืขืก ืื™ื– ื•ื•ืขืจื˜ ืฆื• ืคืึทืจืœืึธื–ืŸ ืื•ื™ืกื ืขืžืขืŸ ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ;
  • ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ื ืึธืš ื ื•ื™ื˜ื™ืง ืื•ื™ืกื ืขืžืขืŸ, ื•ื•ืขืŸ ืžืขื’ืœืขืš, ืขืก ืื™ื– ื•ื•ืขืจื˜ ืฆื• ืœื™ื™ื’ืŸ ืงื™ื™ืŸ ื—ื•ืฅ (ืื•ืŸ ืงืึธื ืกื˜) ืžืึธื“ื™ืคื™ืขืจืก ืื•ืžืขื˜ื•ื ืึทื–ื•ื™ ืึทื– ื“ืขืจ ืงืึทืžืคึผื™ื™ืœืขืจ ืงืขื ืขืŸ ืึทืคึผื˜ืึทืžื™ื™ื– ื•ื•ื™ ืคื™ืœ ื•ื•ื™ ืžืขื’ืœืขืš.

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื“ืขืจ ืจืขื“ื ืขืจ ื‘ืืฉื˜ืขื˜ื™ืงื˜ ื“ื™ ืžื™ื™ื ื•ื ื’ ืึทื– ืื•ื™ืกื ืขืžืขืŸ ื–ืขื ืขืŸ ื‘ืขืกื˜ืขืจ ื’ืขื ื™ืฆื˜ ืฆื• ืึท ืžื™ื ื™ืžื•ื ืึธื“ืขืจ ืคืืจืœืื–ืŸ ื’ืึธืจ.

ื“ื™ ืžืขืœื“ื•ื ื’ ืกืœื™ื™ื“ื– ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืœื™ื ืง: ["C ++ ืื•ื™ืกื ืขืžืขืŸ ื“ื•ืจืš ื“ื™ ืึธื‘ื™ืขืงื˜ื™ื•ื• ืคื•ืŸ LLVM ืงืึทืžืคึผื™ื™ืœืขืจ ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก"]

ื’ืขื ืขืจืึทื˜ืึธืจืก, ืงืึธืจืึทื•ื˜ื™ื ืขืก ืื•ืŸ ืื ื“ืขืจืข ื–ื™ืกืงื™ื™ื˜ ืคื•ืŸ ืžืึทืจืš ืึทื ืจืึธื•ืœื“, ืขื“ื™ ืฉื‘ื™ื˜

C ++ ืจื•ืกืœืึทื ื“: ื•ื•ื™ ืขืก ื’ืขื˜ืจืืคืŸ
ืจื•ืง ืคื•ืŸ ืคึผืจืขื–ืึทื ื˜ื™ื™ืฉืึทื ื–

ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืคื™ืœืข ืจื™ืคึผืึธืจืฅ ืื™ืŸ ื“ืขื ื–ื™ืฆื•ื ื’ ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืฆื• ื™ื ืึธื•ื•ื•ื™ื™ืฉืึทื ื– ืื™ืŸ C ++ 20 ืื™ื– ื’ืขื•ื•ืขืŸ ืžืขืžืขืจืึทื‘ืึทืœ ื ื™ื˜ ื‘ืœื•ื™ื– ืคึฟืึทืจ ื–ื™ื™ืŸ ืคืึทืจื‘ื™ืง ืคึผืจืขื–ืขื ื˜ื™ืจื•ื ื’, ืึธื‘ืขืจ ืื•ื™ืš ืคึฟืึทืจ ื–ื™ื™ืŸ ืงืœืึธืจ ืœืขื’ื™ื˜ื™ืžืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื™ื’ื–ื™ืกื˜ื™ื ื’ ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ ื“ื™ ื–ืึทืžืœื•ื ื’ ืคึผืจืึทืกืขืกื™ื ื’ ืœืึธื’ื™ืง (ืคึฟืึทืจ ืฉืœื™ื™ืฃ, ืงืึทืœืœื‘ืึทืงืงืก).

ืขื“ื™ ืฉื‘ื™ื˜ ื›ื™ื™ืœื™ื™ืฅ ื“ื™ ืคืืœื’ืขื ื“ืข: ื“ื™ ืื™ืฆื˜ ื‘ื ื™ืžืฆื ืžืขื˜ื”ืึธื“ืก ื’ื™ื™ืŸ ื“ื•ืจืš ื“ื™ ื’ืื ืฆืข ื–ืึทืžืœื•ื ื’ ืื•ืŸ ื˜ืึธืŸ ื ื™ื˜ ืฆื•ืฉื˜ืขืœืŸ ืึทืงืกืขืก ืฆื• ืขื˜ืœืขื›ืข ื™ื ืขืจืœืขืš ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืฉื˜ืึทื˜ (ืึธื“ืขืจ ื–ื™ื™ ื˜ืึธืŸ ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืงืึทืœืœื‘ืึทืงืงืก, ืึธื‘ืขืจ ืžื™ื˜ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืคึผืจื™ืงืจืข ื–ื™ื™ึทื˜ ื™ืคืขืงืฅ, ืึทื–ืึท ื•ื•ื™ Callback Hell) . ืขืก ื•ื•ืึธืœื˜ ื•ื™ืกืงื•ืžืขืŸ ืึทื– ืขืก ื–ืขื ืขืŸ ื™ื˜ืขืจืึทื˜ืึธืจืก, ืึธื‘ืขืจ ืืคื™ืœื• ืžื™ื˜ ื–ื™ื™ ืึทืœืฅ ืื™ื– ื ื™ืฉื˜ ืึทื–ื•ื™ ื’ืœืึทื˜: ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืคึผืจืึธืกื˜ ืึทืจื™ื™ึทื ื’ืึทื ื’ ืื•ืŸ ืึทืจื•ื™ืกื’ืึทื ื’ ืคื•ื ืงื˜ืŸ (ืึธื ื”ื™ื™ื‘ โ†’ ืกื•ืฃ ืงืขื’ืŸ ืจื‘ื’ื™ืŸ โ†’ ืจืขื ื“ื™ื ื’ ืื•ืŸ ืึทื–ื•ื™ ืื•ื™ืฃ), ืขืก ืื™ื– ื ื™ืฉื˜ ืงืœืึธืจ ื•ื•ื™ ืœืึทื ื’ ืžื™ืจ ื•ื•ืขืœืŸ ื™ื˜ืขืจื™ื™ื˜? ืกื˜ืึทืจื˜ื™ื ื’ ืžื™ื˜ C ++20, ื“ื™ ืคึผืจืึธื‘ืœืขืžืก ื–ืขื ืขืŸ ืกืึทืœื•ื•ื“!

ืขืจืฉื˜ืขืจ ืึธืคึผืฆื™ืข: ืจื™ื™ื ื“ื–ืฉืึทื–. ื“ื•ืจืš ืจืึทืคึผื™ื ื’ ื™ื˜ืขืจื™ื™ื˜ืขืจื–, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ืคึผืจืึธืกื˜ ืฆื•ื‘ื™ื ื“ ืคึฟืึทืจ ื“ื™ ืึธื ื”ื™ื™ื‘ ืื•ืŸ ืกื•ืฃ ืคื•ืŸ ืึท ื™ื˜ืขืจืึทื˜ื™ืึธืŸ, ืื•ืŸ ืžื™ืจ ืื•ื™ืš ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืงืึทืžืคึผืึธื•ื–. ืึทืœืข ื“ืขื ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ ืฆื• ื‘ื•ื™ืขืŸ ืคื•ืœ-ืคืœืขื“ื–ืฉื“ ื“ืึทื˜ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืคึผื™ื™ืคึผืœื™ื™ื ื–. ืึธื‘ืขืจ ื ื™ื˜ ืึทืœืฅ ืื™ื– ืึทื–ื•ื™ ื’ืœืึทื˜: ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื›ืขื–ืฉื‘ืŸ ืœืึธื’ื™ืง ืื™ื– ืœื™ื’ืŸ ืื™ืŸ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื™ื˜ืขืจืึทื˜ืึธืจ, ื•ื•ืึธืก ืงืขื ืขืŸ ืงืึธืžืคึผืœื™ืฆื™ืจืŸ ื“ื™ ืงืึธื“ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืื•ืŸ ื“ื™ื‘ืึทื’.

C ++ ืจื•ืกืœืึทื ื“: ื•ื•ื™ ืขืก ื’ืขื˜ืจืืคืŸ
ืจื•ืง ืคื•ืŸ ืคึผืจืขื–ืึทื ื˜ื™ื™ืฉืึทื ื–

ื ื•, ืคึฟืึทืจ ื“ืขื ืคืึทืœ, C ++ 20 ืฆื•ื’ืขื’ืขื‘ืŸ ืงืึธืจืึธื•ื˜ื™ื ื– (ืคืึทื ื’ืงืฉืึทื ื– ื•ื•ืขืžืขื ืก ื ืึทื˜ื•ืจ ืื™ื– ืขื ืœืขืš ืฆื• ื’ืขื ืขืจืึทื˜ืึธืจืก ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ): ื“ื•ืจื›ืคื™ืจื•ื ื’ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื™ืคืขืจื“ ื“ื•ืจืš ืฆื•ืจื™ืงืงื•ืžืขืŸ ืขื˜ืœืขื›ืข ืงืจืึทื ื˜ ื•ื•ืขืจื˜ ื‘ืฉืขืช ืคึผืจืึทื–ืขืจื•ื•ื™ื ื’ ืึท ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืฉื˜ืึทื˜. ืื–ื•ื™, ืžื™ืจ ื“ืขืจื’ืจื™ื™ื›ืŸ ื ื™ื˜ ื‘ืœื•ื™ื– ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ืึทื˜ืŸ ื•ื•ื™ ืขืก ืื•ื™ืก, ืึธื‘ืขืจ ืื•ื™ืš ืขื ืงืึทืคึผืกืึทืœื™ื™ื˜ื™ื ื’ ืึทืœืข ื“ื™ ืœืึธื’ื™ืง ืื™ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืงืึธืจืึธื•ื˜ื™ื ืข.

ืื‘ืขืจ ืขืก ืื™ื– ืึท ืคืœื™ืขืŸ ืื™ืŸ ื“ื™ ื–ืืœื‘ืืœืœ: ืื™ืŸ ื“ืขืจ ืžืึธืžืขื ื˜ ื–ื™ื™ ื–ืขื ืขืŸ ื‘ืœื•ื™ื– ื˜ื™ื™ืœ ื’ืขืฉื˜ื™ืฆื˜ ื“ื•ืจืš ื™ื’ื–ื™ืกื˜ื™ื ื’ ืงืึทืžืคึผื™ื™ืœืขืจื–, ืื•ืŸ ื–ืขื ืขืŸ ืื•ื™ืš ื ื™ืฉื˜ ื™ืžืคึผืœืึทืžืขื ืึทื“ ื•ื•ื™ ืฆื™ื›ื˜ื™ืง ื•ื•ื™ ืžื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™: ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืขืก ืื™ื– ื ืึธืš ื ื™ืฉื˜ ื•ื•ืขืจื˜ ืฆื• ื ื•ืฆืŸ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืื•ืŸ ืฆื™ื™ึทื˜ื•ื•ื™ื™ึทืœื™ืง ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ืงืึธืจืึธื•ื˜ื™ื ืขืก. ืคึผืœื•ืก, ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืจื™ืกื˜ืจื™ืงืฉืึทื ื– ืื•ื™ืฃ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึธืจืึธื•ื˜ื™ื ื–, ืื•ืŸ constexpr ืคืึทื ื’ืงืฉืึทื ื–, ืงืึทื ืกื˜ืจืึทืงื˜ืขืจื– / ื“ืขืกื˜ืจื•ืงื˜ืึธืจืก ืื•ืŸ ื”ื•ื™ืคึผื˜ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ืขืจ ืจืฉื™ืžื”.

ืื–ื•ื™, ืงืึธืจืึธื•ื˜ื™ื ืขืก ืกืึธืœื•ื•ืข ืึท ื‘ืึทื˜ื™ื™ื˜ื™ืง ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ ื“ื™ ืคึผืึทืฉื˜ืขืก ืคื•ืŸ ื“ืึทื˜ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ืœืึธื’ื™ืง, ืึธื‘ืขืจ ื–ื™ื™ืขืจ ืงืจืึทื ื˜ ื™ืžืคึผืœืึทืžืึทื ืฅ ื“ืึทืจืคืŸ ืคึฟืึทืจื‘ืขืกืขืจื•ื ื’.

ืžืึทื˜ืขืจื™ืึทืœืก:

C ++ ื˜ืจื™ืงืก ืคื•ืŸ ื™ืึทื ื“ืขืงืก.ื˜ืึทืงืกื™, ืึทื ื˜ืึธืŸ ืคึผืึธืœื•ื›ื™ืŸ

ืื™ืŸ ืžื™ื™ืŸ ืคืึทื›ืžืึทืŸ ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ, ืžืืœ ืื™ืš ื”ืึธื‘ืŸ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืจื™ื™ืŸ ืึทื’ื–ื™ืœื™ืขืจื™ ื˜ื™ื ื’ื–: ืึท ืจืึทืคึผืขืจ ืฆื•ื•ื™ืฉืŸ ื“ื™ ื™ื ืขืจืœืขืš ืฆื•ื‘ื™ื ื“ ืื•ืŸ ื“ื™ ืึทืคึผื™ ืคื•ืŸ ืขื˜ืœืขื›ืข ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ืœืึธื’ื™ื ื’ ืึธื“ืขืจ ืคึผืึทืจืกื™ื ื’. ืื™ืŸ ื“ืขื ืคืึทืœ, ืขืก ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื ื™ื˜ ื ื•ื™ื˜ื™ืง ืคึฟืึทืจ ื ืึธืš ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ. ืึธื‘ืขืจ ื•ื•ืึธืก ืื•ื™ื‘ ื“ื™ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืžืขืจืกื˜ ืคืึธืœืงืก ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ื™ืฃ ื“ื™ RuNet? ืื™ืŸ ืึทื–ืึท ืึท ืกื™ื˜ื•ืึทืฆื™ืข, ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ืคึผืจืึธืฆืขืก ื˜ืขืจืึทื‘ื™ื˜ืขืก ืคึผืขืจ ืฉืขื” ืคื•ืŸ ืœืึธื’ืก ืึทืœื™ื™ืŸ! ื“ืขืžืึธืœื˜ ื™ืขื“ืขืจ ืžื™ืœื™ืกืขืงืึธื ื“ ืงืึทื•ื ืฅ ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ืื™ืจ ื”ืึธื‘ืŸ ืฆื• ื ื•ืฆืŸ ืคืึทืจืฉื™ื“ืŸ ื˜ืจื™ืงืก - ืึทื ื˜ืึธืŸ ืคึผืึธืœื•ื›ื™ืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ื–ื™ื™.

ื˜ืึธืžืขืจ ื“ื™ ืžืขืจืกื˜ ื˜ืฉื™ืงืึทื•ื•ืข ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ื– ื’ืขื•ื•ืขืŸ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ื˜ื™ื™ึทื˜ืœ-ืฆื•-ื™ืžืคึผืœืึทืžืึทื ื˜ื™ื™ืฉืึทืŸ (ืคึผื™ืžืคึผืœ) ืžื•ืกื˜ืขืจ. 

#include <third_party/json.hpp> //PROBLEMS! 
struct Value { 
    Value() = default; 
    Value(Value&& other) = default; 
    Value& operator=(Value&& other) = default; 
    ~Value() = default; 

    std::size_t Size() const { return data_.size(); } 

private: 
    third_party::Json data_; 
};

ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ, ืขืจืฉื˜ืขืจ ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื‘ืึทืคืจื™ื™ึทืขืŸ ืคื•ืŸ ื“ื™ ื›ืขื“ืขืจ ื˜ืขืงืขืก ืคื•ืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืœื™ื™ื‘ืจืขืจื™ื– - ื“ืึธืก ื•ื•ืขื˜ ืฆื•ื ื•ื™ืคืฉื˜ืขืœื  ื–ื™ืš ืคืึทืกื˜ืขืจ, ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ื‘ืึทืฉื™ืฆืŸ ื–ื™ืš ืคื•ืŸ ืžืขื’ืœืขืš ื ืึธืžืขืŸ ืงืึธื ืคืœื™ืงื˜ ืื•ืŸ ืื ื“ืขืจืข ืขื ืœืขืš ืขืจืจืึธืจืก. 

ืึธื•ืงื™ื™, ืžื™ืจ ืืจื™ื‘ืขืจื’ืขืคืืจืŸ # ื™ื ืงืœื•ื“ืข ืฆื• ื“ื™ .ืงืคึผืคึผ ื˜ืขืงืข: ืžื™ืจ ื“ืึทืจืคึฟืŸ ืึท ืคืึธืจื•ื™ืก-ื“ืขืงืœืึทืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืืœื ื’ืขื•ื•ื™ืงืœื˜ ืึทืคึผื™, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ std::unique_ptr. ืื™ืฆื˜ ืžื™ืจ ื”ืึธื‘ืŸ ื“ื™ื ืึทืžื™ืฉ ืึทืœืึทืงื™ื™ืฉืึทื ื– ืื•ืŸ ืื ื“ืขืจืข ืคึผืจื™ืงืจืข ื˜ื™ื ื’ื– ื•ื•ื™ ื“ืึทื˜ืŸ ืฆืขื•ื•ืึธืจืคืŸ ืื™ื‘ืขืจ ืึท ื‘ื™ื ื˜ืœ ืคื•ืŸ ื“ืึทื˜ืŸ ืื•ืŸ ืจื™ื“ื•ืกื˜ ื’ืขืจืึทื ื˜ื™ื–. std::aligned_storage ืงืขื ืขืŸ ื”ืขืœืคึฟืŸ ืžื™ื˜ ืึทืœืข ื“ืขื. 

struct Value { 
// ... 
private: 
    using JsonNative = third_party::Json; 
    const JsonNative* Ptr() const noexcept; 
    JsonNative* Ptr() noexcept; 

    constexpr std::size_t kImplSize = 32; 
    constexpr std::size_t kImplAlign = 8; 
    std::aligned_storage_t<kImplSize, kImplAlign> data_; 
};

ื“ืขืจ ื‘ืœื•ื™ื– ืคึผืจืึธื‘ืœืขื: ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื’ืจื™ื™ืก ืื•ืŸ ืึทืœื™ื™ื ืžืึทื ื˜ ืคึฟืึทืจ ื™ืขื“ืขืจ ืจืึทืคึผืขืจ - ืœืึธื–ืŸ ืื•ื ื“ื– ืžืึทื›ืŸ ืื•ื ื“ื–ืขืจ ืคึผื™ืžืคึผืœ ืžื•ืกื˜ืขืจ ืžื™ื˜ ืคึผืึทืจืึทืžืขื˜ืขืจืก , ื ื•ืฆืŸ ืขื˜ืœืขื›ืข ืึทืจื‘ื™ื˜ืจืึทืจื™ืฉ ื•ื•ืึทืœื•ืขืก ืื•ืŸ ืœื™ื™ื’ืŸ ืึท ื˜ืฉืขืง ืฆื• ื“ื™ ื“ืขืกื˜ืจื•ืงื˜ื•ืจ ืึทื– ืžื™ืจ ื”ืึธื‘ืŸ ืึทืœืฅ ืจืขื›ื˜: 

~FastPimpl() noexcept { 
    validate<sizeof(T), alignof(T)>(); 
    Ptr()->~T(); 
}

template <std::size_t ActualSize, std::size_t ActualAlignment>
static void validate() noexcept { 
    static_assert(
        Size == ActualSize, 
        "Size and sizeof(T) mismatch"
    ); 
    static_assert(
        Alignment == ActualAlignment, 
        "Alignment and alignof(T) mismatch"
    ); 
}

ื–ื™ื ื˜ ื˜ ืื™ื– ืฉื•ื™ืŸ ื“ื™ืคื™ื™ื ื“ ื•ื•ืขืŸ ืคึผืจืึทืกืขืกื™ื ื’ ื“ื™ ื“ืขืกื˜ืจื•ืงื˜ื•ืจ, ื“ืขืจ ืงืึธื“ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคึผืึทืจืกืขื“ ืจื™ื›ื˜ื™ืง ืื•ืŸ ืื™ืŸ ื“ืขืจ ื–ืึทืžืœื•ื ื’ ื‘ื™ื ืข ืขืก ื•ื•ืขื˜ ืจืขื–ื•ืœื˜ืึทื˜ ื“ื™ ืคืืจืœืื ื’ื˜ ื’ืจื™ื™ืก ืื•ืŸ ืึทืœื™ื™ื ืžืึทื ื˜ ื•ื•ืึทืœื•ืขืก ื•ื•ืึธืก ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ืืจื™ื™ืŸ ื•ื•ื™ ืขืจืจืึธืจืก. ืื–ื•ื™, ืื™ืŸ ื“ืขืจ ืคึผืจื™ื™ึทื– ืคื•ืŸ ืื™ื™ืŸ ื ืึธืš ื–ืึทืžืœื•ื ื’ ืœื•ื™ืคืŸ, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื‘ืึทืคืจื™ื™ึทืขืŸ ืคื•ืŸ ื“ื™ ื“ื™ื ืึทืžื™ืฉ ืึทืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ืืœื ื’ืขื•ื•ื™ืงืœื˜ ืงืœืืกืŸ, ื‘ืึทื”ืึทืœื˜ืŸ ื“ื™ ืึทืคึผื™ ืื™ืŸ ืึท .ืงืคึผืคึผ ื˜ืขืงืข ืžื™ื˜ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ, ืื•ืŸ ืื•ื™ืš ื‘ืึทืงื•ืžืขืŸ ืึท ืคึผืœืึทืŸ ื•ื•ืึธืก ืื™ื– ืžืขืจ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืงืึทื˜ืฉื™ื ื’ ื“ื•ืจืš ื“ื™ ืคึผืจืึทืกืขืกืขืจ.

ืœืึธื’ื™ื ื’ ืื•ืŸ ืคึผืึทืจืกื™ื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ื™ืžืคึผืจืขืกื™ื•ื• ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ื•ื•ืขื˜ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื“ืขืจืžืื ื˜ ืื™ืŸ ื“ืขื ืจืขืฆืขื ื–ื™ืข.

ื“ื™ ืžืขืœื“ื•ื ื’ ืกืœื™ื™ื“ื– ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืœื™ื ืง: ["C ++ ื˜ืจื™ืงืก ืคื•ืŸ ื˜ืึทืงืกื™"]

ืžืึธื“ืขืจืŸ ื˜ืขืงื ื™ืงืก ืคึฟืึทืจ ื‘ืขื›ืขืกืงืขื ื“ื™ื™ืŸ ืงืึธื“ ื˜ืจื•ืงืŸ, Bjรถrn Fahller

ืื™ืŸ ื“ืขื ืฉืžื•ืขืก, Bjรถrn Fahller ื•ื•ื™ื™ื–ื˜ ืขื˜ืœืขื›ืข ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ ืฆื• ืงืึทืžื‘ืึทื˜ ื“ื™ ืกื˜ื™ืœื™ืกื˜ื™ืง ืคืœืึธื– ืคื•ืŸ ืจื™ืคึผื™ื˜ื™ื“ ืฆื•ืฉื˜ืึทื ื“ ื˜ืฉืขืงืก:

assert(a == IDLE || a == CONNECTED || a == DISCONNECTED);

ื’ืขื–ื•ื ื˜ ื‘ืึทืงืึทื ื˜? ื“ื•ืจืš ื ื™ืฆืŸ ืขื˜ืœืขื›ืข ืฉื˜ืึทืจืง C ++ ื˜ืขืงื ื™ืงืก ื™ื ื˜ืจืึธื•ื“ื•ืกื˜ ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ืกื˜ืึทื ื“ืึทืจื“ืก, ืื™ืจ ืงืขื ืขืŸ ืขืœื™ื’ืึทื ื˜ืœื™ ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ื–ืขืœื‘ืข ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ืึธืŸ ืงื™ื™ืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืฉื˜ืจืึธืฃ. ืคืึทืจื’ืœื™ื™ึทื›ืŸ:   

assert(a == any_of(IDLE, CONNECTED, DISCONNECTED));

ืฆื• ืฉืขืคึผืŸ ืึท ืึทื ืคื™ืงืกื˜ ื ื•ืžืขืจ ืคื•ืŸ ื˜ืฉืขืงืก, ืื™ืจ ืžื™ื“ ื“ืึทืจืคึฟืŸ ืฆื• ื ื•ืฆืŸ ื•ื•ืึทืจื™ืึทื“ื™ืง ื˜ืขืžืคึผืœืึทื˜ืขืก ืื•ืŸ ืคืึทืจืœื™ื™ื’ืŸ ืื•ื™ืกื“ืจื•ืงืŸ. ืœืึธืžื™ืจ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ื™ืงื•ื•ืึทืœืึทื˜ื™ ืคื•ืŸ ืขื˜ืœืขื›ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืฆื• ื“ื™ ืขื ื•ื ืก ืฉื˜ืึทื˜_ื˜ื™ืคึผืข ืขืœืขืžืขื ื˜. ื“ืขืจ ืขืจืฉื˜ืขืจ ื–ืึทืš ื•ื•ืึธืก ืงื•ืžื˜ ืฆื• ืžื™ื™ื ื•ื ื’ ืื™ื– ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึท ื”ืขืœืคึผืขืจ ืคึฟื•ื ืงืฆื™ืข ืื™ื–_ืึทื ื™_ืคื•ืŸ:


enum state_type { IDLE, CONNECTED, DISCONNECTED };

template <typename ... Ts>
bool is_any_of(state_type s, const Ts& ... ts) { 
    return ((s == ts) || ...); 
}

ื“ืขื ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ื“ื™ืกืึทืคึผื•ื™ื ื™ื“. ื‘ื™ื– ืื™ืฆื˜ ื“ืขืจ ืงืึธื“ ืื™ื– ื ื™ืฉื˜ ืžืขืจ ืœื™ื™ื ืขื•ื•ื“ื™ืง:

assert(is_any_of(state, IDLE, DISCONNECTING, DISCONNECTED)); 

ื ื™ื˜-ื˜ื™ืคึผ ืžื•ืกื˜ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื•ื•ืขื˜ ื”ืขืœืคึฟืŸ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืึท ื‘ื™ืกืœ. ืžื™ื˜ ื–ื™ื™ืขืจ ื”ื™ืœืฃ, ืžื™ืจ ื•ื•ืขืœืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ื™ื ื•ืžืขืจืึทื‘ืึทืœ ืขืœืขืžืขื ื˜ืŸ ืคื•ืŸ ื“ื™ ืขื ื•ื ืฆื• ื“ืขืจ ืจืฉื™ืžื” ืคื•ืŸ ืžื•ืกื˜ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก: 

template <state_type ... states>
bool is_any_of(state_type t) { 
    return ((t == states) | ...); 
}
	
assert(is_any_of<IDLE, DISCONNECTING, DISCONNECTED>(state)); 

ื“ื•ืจืš ื ื™ืฆืŸ ืึทื•ื˜ืึธ ืื™ืŸ ืึท ื ื™ื˜-ื˜ื™ืคึผ ื˜ืขืžืคึผืœืึทื˜ืข ืคึผืึทืจืึทืžืขื˜ืขืจ (C ++17), ื“ืขืจ ืฆื•ื’ืึทื ื’ ืคืฉื•ื˜ ื“ื–ืฉืขื ืขืจืึทืœื™ื™ื–ื™ื– ืฆื• ืงืึทืžืคึผืขืจืึทืกืึทื ื– ื ื™ื˜ ื‘ืœื•ื™ื– ืžื™ื˜ ืฉื˜ืึทื˜_ื˜ื™ืคึผืข ืขืœืขืžืขื ื˜ืŸ, ืึธื‘ืขืจ ืื•ื™ืš ืžื™ื˜ ืคึผืจื™ืžื™ื˜ื™ื•ื• ื˜ื™ื™ืคึผืก ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื•ื•ื™ ื ื™ื˜-ื˜ื™ืคึผ ื˜ืขืžืคึผืœืึทื˜ืข ืคึผืึทืจืึทืžืขื˜ืขืจืก:


template <auto ... alternatives, typename T>
bool is_any_of(const T& t) {
    return ((t == alternatives) | ...);
}

ื“ื•ืจืš ื“ื™ ืกืึทืงืกืขืกื™ื•ื• ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ, ื“ื™ ื’ืขื‘ืขื˜ืŸ ื’ืœืึทื˜ ืกื™ื ื˜ืึทืงืก ืคึฟืึทืจ ื˜ืฉืขืงืก ืื™ื– ืึทื˜ืฉื™ื•ื•ื“:


template <class ... Ts>
struct any_of : private std::tuple<Ts ...> { 
// ะฟะพะปะตะฝะธะผัั ะธ ัƒะฝะฐัะปะตะดัƒะตะผ ะบะพะฝัั‚ั€ัƒะบั‚ะพั€ั‹ ะพั‚ tuple 
        using std::tuple<Ts ...>::tuple;
        template <typename T>
        bool operator ==(const T& t) const {
                return std::apply(
                        [&t](const auto& ... ts) {
                                return ((ts == t) || ...);
                        },
                        static_cast<const std::tuple<Ts ...>&>(*this));
        }
};

template <class ... Ts>
any_of(Ts ...) -> any_of<Ts ... >;
 
assert(any_of(IDLE, DISCONNECTING, DISCONNECTED) == state);

ืื™ืŸ ื“ืขื ื‘ื™ื™ืฉืคึผื™ืœ, ื“ื™ ื“ืขื“ื•ืงื˜ื™ืึธืŸ ืคื™ืจืขืจ ืกืขืจื•ื•ืขืก ืฆื• ืคึฟืึธืจืฉืœืึธื’ืŸ ื“ื™ ื’ืขื‘ืขื˜ืŸ ืกื˜ืจื•ืงื˜ื•ืจ ืžื•ืกื˜ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืฆื• ื“ื™ ืงืึทืžืคึผื™ื™ืœืขืจ, ื•ื•ืึธืก ื•ื•ื™ื™ืกื˜ ื“ื™ ื˜ื™ื™ืคึผืก ืคื•ืŸ ื“ื™ ืงืึธื ืกื˜ืจื•ืงื˜ืึธืจ ืึทืจื’ื•ืžืขื ื˜ืŸ. 

ื•ื•ื™ื™ึทื˜ืขืจ - ืžืขืจ ื˜ืฉื™ืงืึทื•ื•ืข. Bjorn ืœืขืจื ื˜ ื•ื•ื™ ืฆื• ื’ืขื ืขืจืึทืœื™ื–ื™ืจืŸ ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืงืึธื“ ืคึฟืึทืจ ืคืึทืจื’ืœื™ื™ึทืš ืึธืคึผืขืจื™ื™ื˜ืขืจื– ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ==, ืื•ืŸ ื“ืขืจื ืึธืš ืคึฟืึทืจ ืึทืจื‘ื™ื˜ืจืึทืจื™ืฉ ืึทืคึผืขืจื™ื™ืฉืึทื ื–. ืฆื•ื–ืืžืขืŸ ื“ื™ ื•ื•ืขื’, ืึทื–ืึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ื™ ืงื™ื™ืŸ_ื•ื ื™ืงื•ื•ืข_ืึทื“ืจืขืก ืึทื˜ืจื™ื‘ื™ื•ื˜ (C ++20) ืื•ืŸ ืžื•ืกื˜ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืื™ืŸ ืœืึทืžื‘ื“ืึท ืคืึทื ื’ืงืฉืึทื ื– (C ++20) ื–ืขื ืขืŸ ื“ืขืจืงืœืขืจื˜ ืžื™ื˜ ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื ื•ืฆืŸ. (ื™ื, ืื™ืฆื˜ ื“ื™ ืœืึทืžื‘ื“ืึท ืกื™ื ื˜ืึทืงืก ืื™ื– ืืคื™ืœื• ื’ืจื™ื ื’ืขืจ ืฆื• ื’ืขื“ืขื ืงืขืŸ - ื“ืึธืก ื–ืขื ืขืŸ ืคื™ืจ ืงืึธื ืกืขืงื•ื˜ื™ื•ื•ืข ืคึผืขืจื– ืคื•ืŸ ืงืœืึทืžืขืจืŸ ืคื•ืŸ ืึทืœืข ืžื™ื ื™ื.) ื“ื™ ืœืขืฆื˜ ืœื™ื™ื–ื•ื ื’ ื ื™ืฆืŸ ืคืึทื ื’ืงืฉืึทื ื– ื•ื•ื™ ืงืึธื ืกื˜ืจื•ืงื˜ืึธืจ ื“ืขื˜ืึทื™ืœืก ื˜ืึทืงืข ื•ื•ืึทืจืžืก ืžื™ื™ืŸ ื ืฉืžื”, ื ื™ื˜ ืฆื• ื“ืขืจืžืึธื ืขืŸ ื“ื™ ืื•ื™ืกื“ืจื•ืง ื˜ื•ืคึผืœืข ืื™ืŸ ื“ื™ ื‘ืขืกื˜ืขืจ ื˜ืจืื“ื™ืฆื™ืขืก ืคื•ืŸ ืœืึทืžื‘ื“ืึท ืงืึทืœืงื•ืœื•ืก.

ืื™ืŸ ื“ื™ ืกื•ืฃ, ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ืคื•ื™ืœื™ืฉ ืขืก:

  • ื’ืขื“ืขื ืงื˜ ืึทื– ืœืึทืžื‘ื“ืึทืก ื–ืขื ืขืŸ ืงืึทื ืกื˜ืขืงืกืคึผืจ ืคึฟืึทืจ ืคืจื™ื™; 
  • ืœืึธืžื™ืจ ืœื™ื™ื’ืŸ ืฉืœื™ื™ืžืขืกื“ื™ืง ืคืึธืจื•ื•ืขืจื“ื™ื ื’ ืื•ืŸ ืงื•ืง ืื™ืŸ ื–ื™ื™ืŸ ืžื™ืขืก ืกื™ื ื˜ืึทืงืก ืื™ืŸ ื‘ืึทืฆื™ื•ื ื’ ืฆื• ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจ ืคึผืึทืง ืื™ืŸ ื“ื™ ืœืึทืžื‘ื“ืึท ืงืœืึธื•ื–ืฉืขืจ;
  • ื–ืืœ ืก ื’ืขื‘ืŸ ื“ื™ ืงืึทืžืคึผื™ื™ืœืขืจ ืžืขืจ ืึทืคึผืขืจื˜ื•ื ืึทื˜ื™ื– ืคึฟืึทืจ ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก ืžื™ื˜ ืงืึทื ื“ื™ืฉืึทื ืึทืœ ื ื™ื˜ ื—ื•ืฅ; 
  • ืœืึธืžื™ืจ ื ืขืžืขืŸ ืงืขื™ืจ ืคื•ืŸ ืžืขืจ ืคืึทืจืฉื˜ื™ื™ื™ืง ื˜ืขื•ืช ืจืขื–ื•ืœื˜ืึทื˜ ืื™ืŸ ื˜ืขืžืคึผืœืึทื˜ืขืก ื“ืึทื ืง ืฆื• ื™ืงืกืคึผืœื™ืกืึทื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ืœืึทืžื‘ื“ืึทืก. ื“ืึธืก ื•ื•ืขื˜ ืฆื•ื•ื™ื ื’ืขืŸ ื“ืขื ืงืึทืžืคึผื™ื™ืœืขืจ ืฆื• ื˜ืึธืŸ ืžืขืจ ื˜ืฉืขืงืก ืื™ื™ื“ืขืจ ื“ื™ ืžื•ืกื˜ืขืจ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ืคืืงื˜ื™ืฉ ื’ืขืจื•ืคืŸ - ืื™ืŸ ื“ื™ ื˜ื™ืคึผ ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’ ื‘ื™ื ืข. 

ืคึฟืึทืจ ื“ืขื˜ืึทื™ืœืก, ื‘ื™ื˜ืข ืึธืคึผืฉื™ืงืŸ ืฆื• ื“ื™ ืœืขืงืฆื™ืข ืžืึทื˜ืขืจื™ืึทืœืก: 

ืื•ื ื“ื–ืขืจ ื™ืžืคึผืจืขืกืกื™ืึธื ืก

ืื•ื ื“ื–ืขืจ ืขืจืฉื˜ืขืจ ืึธื ื˜ื™ื™ืœ ืื™ืŸ C ++ ืจื•ืกืœืึทื ื“ ืื™ื– ื’ืขื•ื•ืขืŸ ืžืขืžืขืจืึทื‘ืึทืœ ืคึฟืึทืจ ื–ื™ื™ึทืŸ ื™ื ื˜ืขื ืกื™ื˜ื™. ืื™ืš ื’ืึทื˜ ื“ืขืจ ืจื•ืฉื ืคื•ืŸ C ++ ืจื•ืกืœืึทื ื“ ื•ื•ื™ ืึท ืึธืคื ื”ืึทืจืฆื™ืง ื’ืขืฉืขืขื ื™ืฉ, ื•ื•ื• ื“ื™ ืฉื•ืจื” ืฆื•ื•ื™ืฉืŸ ื˜ืจื™ื™ื ื™ื ื’ ืื•ืŸ ืœืขื‘ืŸ ืงืึธืžื•ื ื™ืงืึทืฆื™ืข ืื™ื– ื›ึผืžืขื˜ ื™ืžืคึผืขืจืกืขืคึผื˜ื™ื‘ืึทืœ. ืึทืœืฅ, ืคื•ืŸ ื“ื™ ืฉื˜ื™ืžื•ื ื’ ืคื•ืŸ ื“ื™ ืกืคึผื™ืงืขืจื– ืฆื• ื“ื™ ืงืึทืžืคึผืึทื˜ื™ืฉืึทื ื– ืคื•ืŸ ื“ื™ ื’ืขืฉืขืขื ื™ืฉ ืคึผืึทืจื˜ื ืขืจืก, ืื™ื– ืงืึทื ื“ื•ืกื™ื•ื• ืฆื• ื”ืขืึทื˜ืขื“ ื“ื™ืกืงื•ืกื™ืขืก. ื“ืขืจ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ืขืจ ื–ื™ืฆื•ื ื’, ืงืึทื ืกื™ืกื˜ื™ื ื’ ืคื•ืŸ ืจื™ืคึผืึธืจืฅ, ืงืึธื•ื•ืขืจืก ืึท ืคืขืจืœื™ ื‘ืจื™ื™ื˜ ืงื™ื™ื˜ ืคื•ืŸ ื˜ืขืžืขืก ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ C ++ ื™ื ืึธื•ื•ื•ื™ื™ืฉืึทื ื–, ืคืึทืœ ืฉื˜ื•ื“ื™ื•ื ืคื•ืŸ ื’ืจื•ื™ืก ืคึผืจืึทื“ื–ืฉืขืงืก ืื•ืŸ ืื™ื“ืขื™ืฉืข ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจืึทืœ ืงืึทื ืกื™ื“ืขืจื™ื™ืฉืึทื ื–. ืึธื‘ืขืจ ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ื•ืžื™ื•ื™ืฉืขืจื“ื™ืง ืฆื• ืื™ื’ื ืึธืจื™ืจืŸ ื“ื™ ื’ืขื–ืขืœืฉืึทืคื˜ืœืขืš ืงืึธืžืคึผืึธื ืขื ื˜ ืคื•ืŸ ื“ืขืจ ื’ืขืฉืขืขื ื™ืฉ, ื•ื•ืึธืก ื”ืขืœืคึผืก ื‘ืึทืงื•ืžืขืŸ ืฉืคึผืจืึทืš ื‘ืึทืจื™ืขืจื– ืื™ืŸ ื‘ืึทืฆื™ื•ื ื’ ื ื™ื˜ ื‘ืœื•ื™ื– ืฆื• C ++.

ืžื™ืจ ื“ืึทื ืงืขืŸ ื“ื™ ืงืึธื ืคึฟืขืจืขื ืฅ ืึธืจื’ืึทื ื™ื™ื–ืขืจื– ืคึฟืึทืจ ื“ื™ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืฆื• ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ ืื™ืŸ ืึทื–ืึท ืึท ื’ืขืฉืขืขื ื™ืฉ!
ืื™ืจ ืงืขืŸ ื”ืึธื‘ืŸ ื’ืขื–ืขืŸ ื“ื™ ืึธืจื’ืึทื ื™ื™ื–ืขืจื– 'ืคึผืึธืกื˜ืŸ ื•ื•ืขื’ืŸ ื“ื™ ืคืึทืจื’ืึทื ื’ืขื ื”ื™ื™ื˜, ืคืึธืจืฉื˜ืขืœืŸ ืื•ืŸ ืฆื•ืงื•ื ืคึฟื˜ ืคื•ืŸ C ++ ืจื•ืกืœืึทื ื“ ืื•ื™ืฃ ื“ื™ JUG Ru ื‘ืœืึธื’.

ื“ืึทื ืงืขืŸ ืคึฟืึทืจ ืœื™ื™ืขื ืขืŸ, ืื•ืŸ ืžื™ืจ ื”ืึธืคืŸ ืึทื– ืื•ื ื“ื–ืขืจ ืจื™ื˜ื™ื™ืœื™ื ื’ ืคื•ืŸ ื’ืขืฉืขืขื ื™ืฉืŸ ืื™ื– ื ื•ืฆื™ืง!

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’