Clang APIред рд╢реБрд░реБрдЖрдд

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

1. рдХреНрд▓реИрдВрдЧ рдпрд╛ рдХреНрд▓реИрдВрдЧ-рд╕реА?


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

1.1 рдХреНрд▓реИрдВрдЧ-рд╕реА рдПрдкреАрдЖрдИ

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

рд▓реЗрдХрд┐рди, рд╕реВрдЪреАрдмрджреНрдз рд▓рд╛рднреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдХреНрд▓реИрдВрдЧ-рд╕реА рдПрдкреАрдЖрдИ рдореЗрдВ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:
  1. "рдПрдХ рдмреЛрддрд▓ рдореЗрдВ рдЬрд╣рд╛рдЬ" рдкреИрдЯрд░реНрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдЬрд╛рдЗрдиред рдЗрд╕ API рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдЗрдпрд╛рдБ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрд▓реИрдВрдЧ API рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореВрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реИрдкрд░ рд╣реИрдВред
  2. (рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк) рдореИрдиреБрдЕрд▓ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрдиред C ++ - рдХреЛрдб рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░реИрдкрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ RAII рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  3. рдмрд╣реБрдд "рд╕рдВрдХреАрд░реНрдг" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реА-рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╣ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред
  4. (рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк) рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдЦрд░рд╛рдм рд╕реЗрдЯред рдХреНрд▓реИрдВрдЧ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХрдИ рдЙрдкрдХрд░рдг рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдиреАрдЪреЗ рдЫреАрди рд▓рд┐рдП рдЧрдП рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

1.2 рдХреНрд▓реЗрдВрдЧ рдПрдкреАрдЖрдИ

рдПрдкреАрдЖрдИ рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрд░ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдпрд╣ API рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ C ++ рд╣реИ, рдФрд░ рдпрд╣ рдХреНрд▓реИрдВрдЧ рдХрд░реНрдиреЗрд▓ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рд╡рд┐рд╕реНрддреГрдд рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

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

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

2. рдЖрд░рдВрдн рдХрд░рдирд╛, рдпрд╛ рд╕реНрд░реЛрдд рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛


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

2.1 рдХреНрд▓реИрдВрдЧ-рд╕реА рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ

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

#include <iostream> #include <clang-c/Index.h> int main (int argc, char** argv) { CXIndex index = clang_createIndex ( false, // excludeDeclarationFromPCH true // displayDiagnostics ); CXTranslationUnit unit = clang_parseTranslationUnit ( index, // CIdx "main.cpp", // source_filename argv + 1 , // command_line_args argc - 1 , // num_command_line_args 0, // unsave_files 0, // num_unsaved_files CXTranslationUnit_None // options ); if (unit != 0 ) std::cout << "Translation unit successfully created" << std::endl; else std::cout << "Translation unit was not created" << std::endl; clang_disposeTranslationUnit(unit); clang_disposeIndex(index); } 


рдкрд╣рд▓реА рд╡рд┐рдзрд┐ ( clang_createIndex ) рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдЗрдпреЛрдВ ( CXTranslationUnit ) рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ ( рдмрд╣рд┐рд╖реНрдХреГрдд ) FromPCH рдкрд░рд┐рдгрд╛рдореА рдПрдПрд╕рдЯреА рдХреЗ рдХреНрд░реЙрд▓ рдХреЗ рджреМрд░рд╛рди рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд╣реЗрдбрд░ рд╕реЗ рдкрдврд╝реЗ рдЧрдП рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред 1 рдХреЗ рдорд╛рди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдРрд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рдПрдПрд╕рдЯреА рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ ( displayDiagnostics ) рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ ( clang_parseTranslationUnit ) рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реА рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:

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

рдлреНрд▓реИрдЧ рдХреЛ '|' рдСрдкрд░реЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рджреЛ рддрд░реАрдХреЗ ( clang_disposeTranslationUnit рдФрд░ clang_disposeIndex ) рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВрдбрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдИ рдФрд░ рд╕рдВрджрд░реНрдн рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдирдореВрдирд╛ рдХреЛрдб рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ libclang рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред

2.1 рдХреНрд▓реИрдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ

рдХреНрд▓реИрдВрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдорд╛рди (рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ) рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 #include <vector> #include <iostream> #include <clang/Basic/Diagnostic.h> #include <clang/Frontend/DiagnosticOptions.h> #include <clang/Frontend/CompilerInstance.h> #include <clang/Frontend/CompilerInvocation.h> #include <clang/Frontend/Utils.h> #include <clang/Frontend/ASTUnit.h> int main(int argc, char ** argv) { using namespace clang ; using namespace llvm ; // Initialize compiler options list std::vector< const char *> args; for (int n = 1; n < argc; ++ n) args.push_back(argv[n]); args.push_back("main_clang.cpp" ); const char** opts = &args.front(); int opts_num = args.size(); // Create and setup diagnostic consumer DiagnosticOptions diagOpts; IntrusiveRefCntPtr< DiagnosticsEngine> diags(CompilerInstance::createDiagnostics( diagOpts, // Opts opts_num, // Argc opts, // Argv 0, // Client true, // ShouldOwnClient false // ShouldCloneClient )); // Create compiler invocation IntrusiveRefCntPtr< CompilerInvocation> compInvoke = clang::createInvocationFromCommandLine( makeArrayRef(opts, opts + opts_num), // Args diags // Diags ); if (!compInvoke) { std::cout << "Can't create compiler invocation for given args" ; return -1; } // Parse file clang::ASTUnit *tu = ASTUnit ::LoadFromCompilerInvocation( compInvoke.getPtr(), // CI diags, // Diags false, // OnlyLocalDecls true, // CaptureDiagnostics false, // PrecompilePreamble TU_Complete, // TUKind false // CacheCodeCompletionResults ); if (tu == 0 ) std::cout << "Translation unit was not created" ; else std::cout << "Translation unit successfully created" ; return 0; } 


рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдХреНрд╖рд░ рд╣реИрдВ, рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдирдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: clangLex, clangBasic, clangAST, clangSerialization, clangEdit, clangAnalysis, clangFrontend, clangSriver, clangDriver, clangParse, LLVMCore, LLVMCore , LLVMCore ред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ advapi32 рдФрд░ shell32 рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛ред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЪрд╛рд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  1. рдХрдВрдкрд╛рдЗрд▓рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЧрдардиред рдПрдкреАрдЖрдИ рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬрд┐рд╕ рдкрде рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рднреА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, argv рдФрд░ argc рдХреЛ рд╕реАрдзреЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  2. рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЗрдВрдЬрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ред рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╕рднреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ, рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рдирд┐рджрд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬреЛ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд░реЛрдд рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
  3. рд╕рдВрдХрд▓рдХ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБред
  4. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд░реЛрдд рдкрд╛рда рдкрд╛рд░реНрд╕рд┐рдВрдЧред


рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдирд╛

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

рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЗрдВрдЬрди рдмрдирд╛рдирд╛

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

рдПрдХ рд╕рдВрдХрд▓рдХ рдордВрдЧрд▓рд╛рдЪрд░рдг рдмрдирд╛рдирд╛

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

рд╕реНрд░реЛрдд рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛

рдпрд╣ рдХреНрд▓реИрдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: ASTUnitред рдРрд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рд╕рдВрднрд╡ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрдВрд╡реЛрдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдкрд╛рд░рд╕рд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд╛рд░реНрд╕рд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЦреБрдж рд╣реА рдбрд┐рд▓реАрдЯ рдХрд░ рджреЗрдЧрд╛!), рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЗрдВрдЬрди рдЗрдВрд╕реНрдЯреЗрдВрд╕ (рдЗрд╕рдХрд╛ рдкрд╛рд░реНрд╕рд░ рдЕрдкрдиреЗ рдЖрдк рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛), рдФрд░ рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:


3. рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдЫреЛрдЯреА рдЪрд╛рд▓


рдореЗрд░реЗ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ (рдпрд╣ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣рд╛ рдерд╛) рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореБрдЭреЗ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдмрд╣реБрдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХреНрдпреЛрдВ рд╣реБрдИред рдЕрдВрдд рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ред рддреЛ, рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


рдЗрд╕ рдкрд░, рдХреНрд▓реИрдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛ рдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ clang -c API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: clang.llvm.org/doxygen/group__CINDEX.html
рд╡рд╣рд╛рдВ рдЖрдк рдЦреБрдж рдХреЛ рдХреНрд▓реЗрдЧ рдПрдкреАрдЖрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдкреВрд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рд▓реЗрдЦрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреНрд▓реИрдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ, рдЙрдирдХреЗ рд╕реЗрдЯ рдЖрджрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЗрд╕ рдпрд╛ рдЙрд╕ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдЖрдк clang рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рдЧрдП AST рд╕реЗ рдПрдХ рдШреЛрд╖рдгрд╛ рд╡реГрдХреНрд╖ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles