рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдХреБрдЫ рд╣реИ, рдпрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХрдо рд╕реЗ рдХрдо рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред


рдЗрди рдЕрджреНрднреБрдд рдЬрдирд╡рд░реА рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рд╣рдо рд╕рднреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ?!? рд╡реНрдпрд░реНрде рдореЗрдВ ... рдпрд╣рд╛рдВ рд╕рдВрдХрд▓рдХ рдЧрд┐рд░ рдЧрдпрд╛, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рд╢рд╛рд▓ рд╣реИ - рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдРрд╕реА рдЪреАрдЬ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдФрд░ рдлрд┐рд░ рдордЬрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдлреЗрдВрдХ рджреЗрдВ? рдУрд╣, рдпрд╣ рдЧрд┐рд░рддрд╛ рдирд╣реАрдВ рд╣реИ - рдареАрдХ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╣реЛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? - рдЕрднреА рднреА рджреБрд░реНрдШрдЯрдирд╛рдУрдВ, рдФрд░ рдпрд╣, рдФрд░ рдпрд╣, рдФрд░ ... рдУрд╣, рдореИрдВрдиреЗ рдкреБрд░рд╛рдиреЗ рд╕реНрд░реЛрддреЛрдВ рдкрд░ рд╕рдВрдХрд▓рдХ рд╢реБрд░реВ рдХрд┐рдпрд╛ред


рдЙрд╕реА рд╕рдордп, рдмрдЧреЛрдВ рдХреА рдЦреЛрдЬ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЬреАрд╡рди рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ: рдЧрд┐рдЯ рдмрд┐рд╕реИрдХреНрдЯ, llvm-Bugpoint, рдХреНрд░реЗрдбрд┐рдЯ рдХрд░реЗрдВ, ... рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдмрддрд╛рдКрдВрдЧрд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ, рдФрд░ рдХреБрдЫ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгред


рдпреВрдирд┐рд╡рд░реНрд╕рд▓, рдХрд╣рддреЗ рд╣реИрдВ ... рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╕ рдмрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрдиреБрднрд╡реА рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд╛рд▓рдХ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред рдФрд░ рдЬрдм рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реНрдХреЛрдк рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ, рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╛рдЦреВрди рд▓рдЧрддреА рд╣реИрдВред рдорд╛рдЗрдХреНрд░реЛрд╕реНрдХреЛрдк рдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ - рдкреАрдПрдордбреА ред


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


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди рдХреНрдпрд╛ рд╣реИ? рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреА рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ


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

рдЖрдВрддрд░рд┐рдХ рдЙрдкрдХрд░рдг


рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлрд┐рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдореИрдВрдиреЗ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдбрд┐рдмрдЧрд┐рдВрдЧ рддрдВрддреНрд░" рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╕ рдЧрд┐рд╕реЗрдХреНрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ , рддреЛ рдореИрдВ рдХрд╛рдлреА рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбрд┐рдЯ рдпрд╛ рдХреБрдЫ рд╕рдорд╛рди рдЖрдпрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛)ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ llvm-bugpoint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рдпрд╣ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ: рдЖрдк рдЕрдкрдиреЗ LLVM рдкрд╛рд╕ рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ - рдРрд╕рд╛ рд╕рдВрдХреНрд░рдордг - рдХреБрдЫ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИред рддреЛ, рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ LLVM рдмрд┐рдЯрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде .bc рдлрд╝рд╛рдЗрд▓ рдкрд░ opt рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдлрд┐рд░, рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл llvm-bugpoint рд╕рд╛рде opt рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдПрдХ рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ "рдХрдВрдХрд╛рд▓" рдорд┐рд▓рд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдзрд╛рд░ рдмреНрд▓реЙрдХ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рджрд▓ рд╢рд╛рдорд┐рд▓ рдереЗ; рд╕рдм рдХреБрдЫ рд▓реЗрдХрд┐рди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡реИрд╕реЗ, рд╕рдорд╕реНрдпрд╛ рдХреЗ рдореЗрд░реЗ рдмрдпрд╛рди рдореЗрдВ, рдореИрдиреБрдЕрд▓ рд╕рд░рд▓реАрдХрд░рдг рдХреЗ рдПрдХ рджрд░реНрдЬрди рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рдкрд░ рдЙрддрд░ рдЖрдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╢рд╛рдЦрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдмрд╛рдХреА рд╕рдм рд╕рд┐рд░реНрдл рджреГрд╢реНрдп рдереЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рдЪрд╛рд░ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред


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


  • рд╕рдорд░реНрдерд┐рдд рдЖрдХреНрд░рдордгрдХрд╛рд░реА
  • рдХрдо рд╕реЗ рдХрдо рд░рдгрдиреАрддрд┐

рдЕрдЪрд▓


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


  • рдХреБрдЫ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд▓рд┐рдирдХреНрд╕ рдкрд░ "рд╕рд┐рдЧреНрдирд▓ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛")
  • рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЯреА рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛ред рдпрд╣рд╛рдВ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рд▓реЛрдб рдХреЗ рдХрд╛рд░рдг рдЕрд╕реНрдерд┐рд░рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк CPU рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдЙрдВрдЯрд░ рдХрд╛рдо рдореЗрдВ рдЖрддреЗ рд╣реИрдВред
  • рд╕рдВрдХрд▓рдХ рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди (рдирд╣реАрдВ) рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • ...

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


рдиреНрдпреВрдирддрдо рд░рдгрдиреАрддрд┐


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛-рдирд┐рд░реНрднрд░ рд╣реИред рдХрд╣реАрдВ-рдХрд╣реАрдВ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЪрд░ рдХреЛ рднреА рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрд╣реАрдВ - рдХрд╣реАрдВ рд╕рдорд╛рди рд╕рдореАрдХрд░рдгреЛрдВ рдФрд░ рдЕрдЬреНрдЮрд╛рдд рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рднреА рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕рд╛рд░ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдХреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд▓рд╛рдИ рдХреА рдПрдХ рдЪрдВрдЪрд▓рддрд╛ рдХреЗ рд╕рд╛рде, XPath-rules рдЗрдВрдЬрди рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ ... рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ ... ... рдУрд╣, XPath рд╕рдВрд╕реНрдХрд░рдг 1.0 рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рд╣реИред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдПрдХ рдЫреЛрдЯреА рд╕реА рддрдХрдиреАрдХреА рд╕рдорд╕реНрдпрд╛ - рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрдкрдХрд░рдг рдореЗрдВ рд╕рд░реНрджрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдиреНрдпреВрдирддрдо рд░рдгрдиреАрддрд┐ рдПрдкреАрдЖрдИ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝реЛрдВ рдХреА рдЬрдбрд╝ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ), рдЬреЛ рдСрдкрд░реЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд▓реЗрдХрд┐рди рдЗрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢" рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЗрдирд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдХрд░ рд╕реНрдЯреИрдХ рдХреЛ рд╕реНрдкрд┐рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрд╕реНрдХрд░рдг рдЕрдЧрд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИ - рд╢рд╛рдпрдж, ZATO CONVENIENT !! 111 , рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдХреНрдпрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА рд╕рдВрдХрд▓рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред


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


рд╕рд┐рджреНрдзрд╛рдВрдд: рд╕рд╛рд░рд╛рдВрд╢


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


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

рдЕрднреНрдпрд╛рд╕


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдПрдХ рдиреНрдпреВрдирддрдо рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:


 git clone https://github.com/pmd/pmd-scm.git cd pmd-scm ./mvnw clean verify unzip pmd-scm-dist/target/pmd-scm-bin-1.0.0-SNAPSHOT.zip 

рдЕрдм рдЖрдкрдХреЛ рдХреБрдЫ рд╕реНрд░реЛрдд рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП GreedyStrategy.java рдХреЛ рд▓реЗрддреЗ рд╣реИрдВред


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


 $ ./bin/run.sh scm --language java \ --input-file ../pmd-scm/src/main/java/net/sourceforge/pmd/scm/strategies/GreedyStrategy.java \ --output-file GreedyStrategy-min.java \ --strategy xpath \ --xpath-expression '//BlockStatement[count(../BlockStatement) > 1]' Original file(s): 6155 bytes, 1099 nodes. After initial white-space cleanup: size 4548 bytes (73%), 1099 nodes (100%) After pass #1: size 1984 bytes (32%), 1099 nodes (100%) After final white-space cleanup: size 1984 bytes (32%), 325 nodes (29%) After blank line clean up: size 1767 bytes (28%), 325 nodes (29%) 

 package net.sourceforge.pmd.scm.strategies; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import net.sourceforge.pmd.lang.ast.Node; public class GreedyStrategy extends AbstractMinimizationStrategy { public static class Configuration extends AbstractConfiguration { @Override public MinimizationStrategy createStrategy() { return new GreedyStrategy(this); } } public static final MinimizationStrategyConfigurationFactory FACTORY = new AbstractFactory("greedy") { @Override public MinimizationStrategyConfiguration createConfiguration() { return new Configuration(); } }; private GreedyStrategy(Configuration configuration) { super(configuration); } private final Map<Node, HashSet<Node>> directlyDependingNodes = new HashMap<>(); private final Map<Node, Set<Node>> transitivelyDependingNodes = new HashMap<>(); private void fetchDirectDependentsFromSubtree(Node node) { // process depending nodes } private Set<Node> indirectlyDependentNodesFor(Node currentNode) { } private void collectNodesToRemove(Set<Node> result, Node node) { } private int previousPosition = 0; private int positionCountdown; private void findNodeToRemove(Node currentNode) throws Exception { } private void processSingleRoot(Node currentRoot) throws Exception { // cannot remove root for (int i = 0; i < currentRoot.jjtGetNumChildren(); ++i) { findNodeToRemove(currentRoot.jjtGetChild(i)); } } @Override public void performSinglePass(List<Node> roots) throws Exception { } } 

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


рдЖрдЗрдП рдЕрдм рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рджреЗрдЦреЗрдВ: рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдВрдХрд▓рдХ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


рдореВрд▓ / TestResource.java:


 class TestResource { int func() { System.err.println("Hello World!"); return 123; } void unused() { // unused } } 

рдореВрд▓ / рдореБрдЦреНрдп.рдЬрд╛рд╡рд╛:


 class Main { public static void main(String[] args) { String str = new TestResource().func(); return 123; } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:


 $ javac orig/TestResource.java orig/Main.java orig/Main.java:3: error: incompatible types: int cannot be converted to String String str = new TestResource().func(); ^ orig/Main.java:5: error: incompatible types: unexpected return value return 123; ^ 2 errors 

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


 error: incompatible types: int cannot be converted to String 

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рднрд╛рдЧреЛ


 $ bin/run.sh scm --language java \ --input-file orig/TestResource.java orig/Main.java \ --output-file TestResource.java Main.java \ --invariant message \ --printed-message "error: incompatible types: int cannot be converted to String"\ --command-line "javac TestResource.java Main.java" \ --strategy greedy Original file(s): 290 bytes, 77 nodes. After initial white-space cleanup: size 258 bytes (88%), 77 nodes (100%) After pass #1: size 255 bytes (87%), 64 nodes (83%) After pass #2: size 244 bytes (84%), 57 nodes (74%) After pass #3: size 205 bytes (70%), 51 nodes (66%) After pass #4: size 192 bytes (66%), 46 nodes (59%) After pass #5: size 181 bytes (62%), 39 nodes (50%) After pass #6: size 179 bytes (61%), 39 nodes (50%) After final white-space cleanup: size 149 bytes (51%), 39 nodes (50%) After blank line clean up: size 147 bytes (50%), 39 nodes (50%) 

рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ


TestResource.java:


 class TestResource { int func() { } } 

Main.java:


 class Main { public static void main() { String str = new TestResource().func(); } } 

 $ javac TestResource.java Main.java TestResource.java:3: error: missing return statement } ^ Main.java:3: error: incompatible types: int cannot be converted to String String str = new TestResource().func(); ^ 2 errors 

рдЖрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ!


рдкрд░рд┐рдгрд╛рдо


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

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


All Articles