рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдХреЛрдб рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ

рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХрд╡рд╛рдж рдХрд╛ рдЕрднрд┐рд╢рд╛рдк



рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд╛рд╕ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ - рдореБрдЭреЗ рдпреЗ рд╕реЗрдЧреНрд▓реЙрдЯреА рдкрд╕рдВрдж рд╣реИ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордиреЗ рдЖрдИ - рдореБрдЭреЗ C ++ рдХреЛрдб рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред "рдирд┐рдпрддрд╛рддреНрдордХ" рд╢рдмреНрдж рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдорд╛рди рдХреЛрдб рдХреЛ рдЙрд╕реА рд╕рдордп рдХреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рджреНрд╡рд╛рд░рд╛, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдФрд░ рдЙрдмрдВрдЯреВ рдХреЗ рддрд╣рдд рдПрдХ рд╣реА рдХреЛрдб рд╕рдордп рдХреА рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЪрд▓реЗрдЧрд╛ред

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

рдкреНрд░реЗрд░рдгрд╛


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

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

рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд╛рдпрдЯреЗрдХреЛрдб


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

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

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


рдХреНрд▓реИрдВрдЧ C ++ рдХреЛрдб рдХреЛ LLVM IR рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ LLVM рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрд▓реИрдВрдЧ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рд╕реАрдорд╛рдВрдд рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрд╛рдЗрдирд░реА рдХреЛрдб рд▓рд┐рдЦ рдирд╣реАрдВ рд╕рдХрддреЗред LLVM IR, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯрд┐рдВрдЧ рдЖрдИрдЖрд░ рдХреЛрдб рдПрдХ рд╕рд░рд▓ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕рдорд╛рдзрд╛рди рд╣реИред

рдирд┐рд░реНрдгрдп


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

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

рдЕрдм рд╣рдо рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ? рдпрд╣ рдХреЛрдб рд╡рд░реНрдг рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХрд╛ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ:

// Make the soldiers who aren't patrolling attack the enemy for (int i = NUM_SOLDIERS / 2; i < NUM_SOLDIERS; ++i) { auto &soldier = state.soldiers[i]; if (soldier.hp == 0) // If this soldier is dead, skip it continue; for (auto enemy_soldier : state.enemy_soldiers) { if (enemy_soldier.hp != 0) { // Ensure your prospective target has // not already been slain soldier.soldier_target = enemy_soldier.id; break; } } } 

Github рд▓рд┐рдВрдХ: https://gist.github.com/JHurricane96/8c9c3a45ec5e969de4d9fecb47ebef69#file-player_code-cpp

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

 //-------------------------------- BB 1 ---------------------------------- for (int i = NUM_SOLDIERS / 2; i < NUM_SOLDIERS; ++i) { //-------------------------------- BB 2 ---------------------------------- auto &soldier = state.soldiers[i]; if (soldier.hp == 0) //-------------------------------- BB 3 ---------------------------------- continue; //-------------------------------- BB 4 ---------------------------------- for (auto enemy_soldier : state.enemy_soldiers) { //-------------------------------- BB 5 ---------------------------------- if (enemy_soldier.hp != 0) { //-------------------------------- BB 6 ---------------------------------- soldier.soldier_target = enemy_soldier.id; break; //-------------------------------- BB 7 ---------------------------------- } } } 

рдЬреАрдердм рд▓рд┐рдВрдХ
рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реА рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдмреНрд▓реЙрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЕрдм рдЖрдЗрдП LLVM IR рдореЗрдВ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рджреЗрдЦреЗрдВ:

 ; <label>:140: ; preds = %181, %139 %141 = load i32, i32* %19, align 4 %142 = sext i32 %141 to i64 %143 = icmp slt i64 %142, 20 br i1 %143, label %144, label %184 ; <label>:144: ; preds = %140 %145 = getelementptr inbounds %"struct.player_state::State", %"struct.player_state::State"* %2, i32 0, i32 1 %146 = load i32, i32* %19, align 4 %147 = sext i32 %146 to i64 %148 = call dereferenceable(72) %"struct.player_state::Soldier"* @_ZNSt5arrayIN12player_state7SoldierELm20EEixEm( %"struct.std::array.10"* %145, i64 %147) #3 store %"struct.player_state::Soldier"* %148, %"struct.player_state::Soldier"** %20, align 8 %149 = load %"struct.player_state::Soldier"*, %"struct.player_state::Soldier"** %20, align 8 %150 = getelementptr inbounds %"struct.player_state::Soldier", %"struct.player_state::Soldier"* %149, i32 0, i32 2 %151 = load i64, i64* %150, align 8 %152 = icmp eq i64 %151, 0 br i1 %152, label %153, label %154 ; <label>:153: ; preds = %144 br label %181 

рдЬреАрдердм рд▓рд┐рдВрдХ

рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдКрдкрд░ рдХрд╛ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ LLVM IR рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд C ++ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдХрд╛ рдкрд╣рд▓рд╛ рддреАрди рдЦрдВрдб рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдЖрдзрд╛рд░ рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ)ред

LLVM рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ "рдкрд╛рд╕" рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ - рдХреЛрдб рдЬреЛ LLVM IR рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред LLVM API рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдмреЗрд╕ рдмреНрд▓реЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдХреЗ LLVM IR рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ LLVM IR рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

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

  1. рд╣рдо рдлрд╝рдВрдХреНрд╢рди IncrementCount рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рдкреВрд░реНрдгрд╛рдВрдХ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рджрд╕реНрдп рдХреЛрдб рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
  2. рд╣рдо рд╕рднреА рдмреЗрд╕ рдмреНрд▓реЙрдХреНрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЖрдзрд╛рд░ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП, рдЪрд░рдг 3 рдФрд░ 4 рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВред
  3. рд╣рдо рдЗрд╕ рдЖрдзрд╛рд░ рдЗрдХрд╛рдИ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ - n рдкрд╛рддреЗ рд╣реИрдВред
  4. рд╣рдо рдЖрдзрд╛рд░ рдПрди рдХреЗ рдЕрдВрддрд┐рдо рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдкрд╣рд▓реЗ IncrementCount рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЙрд▓ рдХреЛ рддрд░реНрдХ n рдХреЗ рд╕рд╛рде рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  5. IncrementCount рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдерд┐рд░ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджреЗрд╢ рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдХрд╣реАрдВ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рд╣рдорд╛рд░реЗ рд╕рд╛рдзрди рдЖрдИрдЖрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

 ; <label>:140: ; preds = %181, %139 %141 = load i32, i32* %19, align 4 %142 = sext i32 %141 to i64 %143 = icmp slt i64 %142, 20 call void @_Z14IncrementCountm(i32 4) br i1 %143, label %144, label %184 ; <label>:144: ; preds = %140 %145 = getelementptr inbounds %"struct.player_state::State", %"struct.player_state::State"* %2, i32 0, i32 1 %146 = load i32, i32* %19, align 4 %147 = sext i32 %146 to i64 %148 = call dereferenceable(72) %"struct.player_state::Soldier"* @_ZNSt5arrayIN12player_state7SoldierELm20EEixEm( %"struct.std::array.10"* %145, i64 %147) #3 store %"struct.player_state::Soldier"* %148, %"struct.player_state::Soldier"** %20, align 8 %149 = load %"struct.player_state::Soldier"*, %"struct.player_state::Soldier"** %20, align 8 %150 = getelementptr inbounds %"struct.player_state::Soldier", %"struct.player_state::Soldier"* %149, i32 0, i32 2 %151 = load i64, i64* %150, align 8 %152 = icmp eq i64 %151, 0 call void @_Z14IncrementCountm(i32 10) br i1 %152, label %153, label %154 ; <label>:153: ; preds = %144 call void @_Z14IncrementCountm(i32 1) br label %181 

рдЬреАрдердм рд▓рд┐рдВрдХ

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдмреЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ IncrementCount рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред IncrementCount рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд┐рд░ рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рдХрджрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдирд┐рдпрддрд╛рддреНрдордХ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрджрд┐ рд╣рдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╕рдорд╛рди рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╛рди рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдЖрдк рдпрд╣рд╛рдБ рдкрд╛рд╕ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

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


All Articles