рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ ├Ьред рдкрд░рд┐рдЪрдп, рдмрдирд╛рдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛, рд▓рдХреНрд╖реНрдп

рдкрд░рд┐рдЪрдп


2016 рд╕реЗ (рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде) рдореИрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдирд╛рдо тАЬisтАЭ рд╣реИред рдХреНрдпреЛрдВ ├Ь рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ-рдЕрдХреНрд╖рд░ рдХрд╛ рдирд╛рдо рдЪрд╛рд╣рд┐рдП рдерд╛, рдФрд░ AZ рдХреЗ рд╕реЗрдЯ рд╕реЗ рд╕рднреА рдкрддреНрд░ рдкрд╣рд▓реЗ рд╣реА рд▓реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЬрдирддрд╛ рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдиреЗ рдХрд╛ рдХрд╛рдо рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рджреЗрдирд╛ред рд▓реЗрдЦ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╛рд╖рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рднрд╛рд╖рд╛ рдХрд╛ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг, рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдореЗрдВ рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдореИрдВрдиреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдореМрдЬреВрджрд╛ рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреА рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЬрд╛рдиреА-рдорд╛рдиреА рднрд╛рд╖рд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА, рдФрд░ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрди рд╕рднреА рдореЗрдВ "рдШрд╛рддрдХ" рджреЛрд╖ рд╣реИрдВред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБ:

  • рд╕реА - рдмрд╣реБрдд рдХрдо рд╕реНрддрд░ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд
  • рд╕реА ++ - рдХрдИ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рджреЛрд╖реЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛, рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЗ, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рдХрдореА
  • рдбреА - рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░
  • рдЬрд╛рд╡рд╛ рдПрдХ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рд╣реИ, рд╕рднреА рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд▓рдЧрд╛рд╡ред рдЗрд╕рдХрд╛ рдмрд╣реБрдд рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ JVM- рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
  • C # - рджреЛрд╖ рдЬрд╛рд╡рд╛ рдХреА рддрд░рд╣ рд╣реИрдВ
  • рдЬрдВрдЧ - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░реЛрдХрдирд╛, (рд╡рд┐рд╖рдпрд╡рд╕реНрддреБ) рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЦрддрд░рд╛ рдЬрдм рд╕рдм рдХреБрдЫ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рд╡рд┐рд░рд╛рд╕рдд рдХреА рдХрдореА
  • рдЧреЛ - рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреА рдХрдореА
  • рд╕реНрд╡рд┐рдлреНрдЯ - рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреА рдЕрдкреВрд░реНрдгрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛, рдЗрд╕рд╕реЗ рд░рд╣рд┐рдд, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рднреА рджреЛрд╖реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА


Iled рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХрд▓рд┐рдд, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИред рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐: рд╢реБрд▓реНрдХ рдХрд╛рд░реНрдп, рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдХрдХреНрд╖рд╛рдПрдВ, рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ - рдореМрд▓рд┐рдХ, рд╕рдВрд░рдЪрдирд╛рддреНрдордХ (рд╕рдВрд░рдЪрдирд╛рдПрдВ, рд╡рд░реНрдЧ), рдирд┐рд░рдВрддрд░ рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ, рдЯреНрдпреВрдкрд▓реНрд╕, рдЧрдгрдирд╛, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрддред рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА рд╣реИрдВред рднрд╛рд╖рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ, рдкреНрд░рдХрд╛рд░реЛрдВ, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВред рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рд╣реИ (рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде)ред

рднрд╛рд╖рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд╛рд╢рдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рд╡рд┐рдирд╛рд╢рдХрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореЗрдореЛрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпрд╛ рд╣реИ


рд▓рд╛рдЧреВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдзрд╛рд░рд┐рдд рд╕рдВрдХрд▓рдХред рд╕рдВрдХрд▓рдХ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб, рдмрд╛рдЗрдирд░реА рдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ llvm рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП to-рд╣реЗрдбрд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред

рд▓рдХреНрд╖реНрдп рдФрд░ рдЙрджреНрджреЗрд╢реНрдп


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

рднрд╛рд╖рд╛ рдореЗрдВ рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдг рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЧрд▓рдд рдХреЛрдб рдХреЗ рд▓реЗрдЦрди рдХреЛ рдЙрддреНрддреЗрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдордЭ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ let's рдореЗрдВ рдХреМрди рд╕реЗ рдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред

рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА


C ++ рдХреЗ рд╡рд┐рдкрд░реАрдд, ├Ь рдореЗрдВ рдХреЛрдИ рдмрд┐рдВрджреБ рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИрдВ, рд▓рд┐рдВрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рд▓рд┐рдВрдХ, рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рддрд░реНрдХ, рд╕рдВрджрд░реНрдн рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, mut / imut рд╕рдВрд╢реЛрдзрдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЪрд░, рд╕рдВрджрд░реНрдн, рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ, рдлрд╝реАрд▓реНрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред

рдЗрд╕ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕ рдмрд╛рдд рдХреА рдЕрдзрд┐рдХ рд╕рдордЭ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдореЗрдВред рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд▓рд┐рдВрдХ рдпрд╛ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЯрд╛рдЗрдкреЛрдл рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрджреЗрд╣ (рд╕реА ++ рд╕реЗ рдбрд┐рдХреНрд▓реЗрдкрдЯ рдХрд╛ рдПрдирд╛рд▓реЙрдЧ), рдирд┐рд░рдВрддрд░ / рдЧреИрд░-рдирд┐рд░рдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ред

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

initializers


рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЗ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореМрд▓рд┐рдХ (рдФрд░ рдХреБрдЫ рдЕрдиреНрдп) рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЖрд░рдВрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

var i32 x= 22, y(12345);

:

struct Vec{ f32 x; f32 y; }
...
var Vec v{ .x= -56.1f, .y= 42.0f };
var Vec v_uninit; //  

, :

struct Vec
{
	f32 x; f32 y;
	fn constructor()
	( x= 0.0f, y= 0.0f )
	{}
}
...
var Vec v; //  

, .

, :

struct Vec
{
	f32 x= 0.0f;
	f32 y= 0.0f;
}

, [] , :

var [ i32, 4 ] a[ 1, 1, 3, 4 ];
var tup[ i32, f32 ] t[ 8, 0.5f ];
var [ f32, 16 ] a_uninit; // ,     .
var[ i32, 3 ] aa[ 0, 1 ]; // ,  

C++, , . , , тАФ .

. , , тАФ . this, - /, :

struct Vec
{
	f32 x; f32 y;
	fn constructor()
	( x= y, y= 0.0f ) // ,  ┬лy┬╗   
	{}

	fn constructor( f32 val )
	( x= val, y= x ) // . ┬лx┬╗         ┬лy┬╗
	{}
}


. , , . .

:

var i32 mut x= 0;
var i32 &mut ref0= x;
++x; // ,        
var i32 &imut ref1= x; // ,    , . .    

:

var i32 mut x= 0;
var i32 &imut ref0= x;
var i32 &mut ref1= x; // ,    ,     

:

var i32 mut x= 0;
var i32 &mut ref0= x;
var i32 &mut ref1= ref0; //  , . .       ,     

:

fn Mutate( i32 &mut x, i32 &mut y );
...
var i32 mut x= 0;
Mutate( x, x ); // ,          

. C++

std::vector<int> vec;
vec.push_back(1);
int& ref= vec.front();
vec.push_back(2); // ,  ref        

├Ь :

var ust::vector</i32/> mut vec;
vec.push_back(1);
var i32 &imut ref= vec.front();
vec.push_back(2); // ,      vec,      


( ). тАФ polymorph, interface, abstract . . , .

:

  • . , , .

    :

    class A interface
    {
    	fn virtual pure Foo(this);
    }
  • . . . , this, , . . . abstract call, , , C++.

    :

    class A abstract
    {
    	fn virtual pure Foo(this);
    	fn virtual Bar(this){}
    	i32 x= 0;
    }
  • . . . - , .

    :

    class A interface
    {
    	fn virtual pure Foo(this);
    }
    class B : A
    {
    	fn virtual override Foo(this){}
    }
  • . , , .

. .

fn virtual pure Foo(this); //    .      ,        ,   .

fn virtual Foo(this){} //     .   ,      .

fn virtual override Foo(ths){} //   ,    .         ,   .

fn virtual final Foo(this){} //   ,     .         ,   .  -    ,   .


2019тАФ , , ├Ь . . , , , , .

:

fn Foo( i32 mut x ) : i32
{
	while(x  < 100 )
	{
		x+= 10;
		continue;
		x+= 20; // ,  
	}
	return x;
	++x; // ,  
}

:

fn Foo( i32 x ) : i32
{
	if( x < 10 ) { return 0; }
	else if( x > 100 ) { return 1; }
	// ,     
}

else , return .

, - , halt ( ). , , , return.


. , (. ). () .

:

struct CallableObject
{
	i32 &mut x;
	op()( mut this )
	{
		++x;
	}
}
...
var i32 mut x= 0;
var CallableObject mut obj{ .x= x };
auto thread= ust::thread_create( move(obj) );
++x; // ,   ┬лx┬╗,        ┬лthread┬╗
++ obj.x; //  

- , , - , .

(mutable C++), . . . , - , .

, ? тАФ shared_ptr_mt . , , lock_mut() lock_imut(), . ┬л , ┬╗.

:

struct Incrementer
{
	ust::shared_ptr_mt_mut</ i32 /> ptr;
	op()( mut this )
	{
		auto mut lock= ptr.lock_mut(); //   ┬лlock┬╗  
		++lock.get_ref();
	}
}
...
var ust::shared_ptr_mt_mut</ i32 /> ptr(0);
var size_type mut i(0);
var ust::vector</ ust::thread</Incrementer/> /> mut threads;
while( i < size_type(64) )
{
	var Incrementer incrementer{ .ptr= ptr };
	threads.push_back( ust::thread_create(incrementer) );
	++i;
}
threads.clear(); //      .
halt if( ptr.lock_imut().get_ref() != 64 ); // ,   ,  

, , . . ┬лshared┬╗. , , , - , ┬лshared┬╗.


. , , constexpr . , .

, ├Ь, - , C.


C++, (=, +=, *= . .) , , . ++ тАУ.

:

if( x = 0 ) {}
x++; //     ++
x += x += x; // ,  +=  
x+= x++ + ++x; //      

. void, .

, , . :

auto a = select( condition ? x : y );

select .


. . . .

? , - :

  • . - , , .
  • . . - NullPointerException - , - . , , . . .
  • . , , , . - - , . , .
  • . , , .

, , ?

, . . ┬л┬╗ , , std::optional/std::variant C++ Option/Result Rust.

, -, , halt. ( ├Ь ) , , , .


, - . , import, , . C++, , .

. , *.cpp *.hpp C++.


, , , .

, , . , , , . , - , .


тЖТ

тЖТ , , .

тЖТ .

, . . , .

Source: https://habr.com/ru/post/hi465553/


All Articles