рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд CLOS рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЖрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдЙрд╕рдиреЗ CLOS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реЛрдЧрд╛, рдХреЙрдорди рд▓рд┐рд╕реНрдк рднрд╛рд╖рд╛ рдХреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдореВрд▓рднреВрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдерд╛рдХрдерд┐рдд "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдп" рдпрд╛, рд▓реЛрдЧреЛрдВ рдореЗрдВ, "рдорд▓реНрдЯреАрдорд┐рдереЛрдбреНрд╕" "ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдУрд╡рд░рд▓реЛрдб рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рддреНрдп рд╣реИред
рдпрд╣ рдХрд╣рдирд╛ рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХрдИ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП, "рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕" рдХреЗ рд╕реНрд╡рдпрдВ / рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред

рдмреЗрд╢рдХ, рдХрдИ рдкреНрд░реЗрд╖рдг рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╕рд╛рд░ рди рдХреЗрд╡рд▓ рд╣реИ, рдФрд░ рдЗрддрдирд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдореЗрдВред

рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдордЭрд╛рдКрдВрдЧрд╛ - рд╕рд░рд▓ рдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ред

рдпрджрд┐ рд╣рдо OOP рдХреЗ рдПрдХ "рд╢рд╛рд╕реНрддреНрд░реАрдп" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рднрд╛рд╖рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП C #, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:
interface IExpression { int Evaluate(); } class Negation : IExpression { IExpression expr; public Negation(IExpression e) { expr = e; } public int Evaluate() { return -expr.Evaluate(); } } class Addition : IExpression { IExpression left, right; public Addition(IExpression l, IExpression r) { left = l; right = r; } public int Evaluate() { return left.Evaluate() + right.Evaluate(); } } class Number : IExpression { int value; public Number(int v) { value = v; } public int Evaluate() { return value; } } 


рд▓рд┐рд╕реНрдк рдкрд░ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛:
 (defstruct (negation (:constructor negation (expr)) (:conc-name nil)) expr) (defstruct (addition (:constructor addition (left right)) (:conc-name nil)) left right) (defgeneric evaluate (expr) (:method ((expr negation)) (- (evaluate (expr expr)))) (:method ((expr addition)) (+ (evaluate (left expr)) (evaluate (right expr)))) (:method ((expr number)) expr)) ;; (evaluate (addition 5 (negation -5))) ;; ==> 10 


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

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

рд╣рд╛рдВ, CLOS рдкрд░ рдХреНрд▓рд╛рд╕рд┐рдХ OOP рдХрд╛ рд╕реАрдзрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рднрдпрд╛рдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рдХрд╛рд░рдг рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред CLOS рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдорд╛рди рдореВрд▓ рд░реВрдк рд╕реЗ рд╢рд╛рд╕реНрддреНрд░реАрдп OOP рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (рд╕рдВрджреЗрд╢ рдкрд╛рд╕ рдХрд░рдирд╛) рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрддрд╛ рд╣реИред

рд╕реАрдПрд▓рдУрдПрд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдФрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ CLOS рдореЗрдВ рдХреЛрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╣реАрдВ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ - рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд╛рд░реНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рддрд░реАрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИ: "рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд┐рд▓рд╛рди рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ?"

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

рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдЕрдкрдиреЗ рд▓рд╛рдЗрд╡рдЬрд░реНрдирд▓ рдореЗрдВ рдореЗрдердб рдХреЙрдореНрдмрд┐рдирд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ , рдЬреЛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ, рдПрдХ рдирд┐рд░реНрдорд┐рдд рдХреЙрдореНрдмреАрдиреЗрдЯрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкреНрд░рд╛рдЧрдВрдг рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдУрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ "рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕" рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
 (defgeneric construct (object &key) (:method-combination progn :most-specific-last)) (defun new (class &rest args &key &allow-other-keys) (let ((object (make-instance class))) (apply #'construct object args) object)) (defclass superclass () (some-slot)) (defclass subclass (superclass) ()) (defmethod construct progn ((object superclass) &key value) (setf (slot-value object 'some-slot) value) (write-line "Superclass constructed")) (defmethod construct progn ((object subclass) &key) (write-line "Subclass constructed") (format t "Slot value: ~s~%" (slot-value object 'some-slot))) ;; (new 'subclass :value 123) ;; ==> Superclass constructed ;; Subclass constructed ;; Slot value: 123 


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, CLOS рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдиреЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ OOP рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрднреА рднреА рдЗрд╕рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмреЗрд╣рдж рдзреАрд░реЗ рдФрд░ рдЕрдирд┐рдЪреНрдЫрд╛ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕реЗ рдФрд░ рднреА рдмрджрддрд░ рдмрдирд╛ рджреЗрддреА рд╣реИред

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


All Articles