
рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреНрдпрд╛ рд╣реИ? рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдЧреБрдг рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдЬрд╡рд╛рдм рджреЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣рд╛рдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ: рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреАрдПрд▓ рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдм рдХреЗ рдмрд╛рдж, рд╣рд╛рдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдПрдХ рдЙрдкрдХрд░рдг рдХреЛ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдХрд╛рд░рдг рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреАрдПрд▓ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде) рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдХреНрд▓реЛрдЬрд░ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдЬреЛ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдерд╛ рдЬреЛ рд╣рдордиреЗ
рд╕рд░рд▓ рд▓рд┐рдЦреЗ рдереЗред рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг, рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдПрдВред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЙрдирдХреА рд╕рдордЭ, рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХрдо рдХрд░реЗрдВред
рд▓реМрдВрдЧ рдХреА рдЪрдЯреНрдЯрд╛рдиреЗрдВ?
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреВрдВрдЧрд╛ - рдХреЛрдИ рднреА рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХреА рд╢реАрддрд▓рддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ "рдПрдХреНрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдпрд╣ 5 рд▓рд╛рдЗрдиреЛрдВ рдФрд░ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдХреЗрд╡рд▓ 4" рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рднрд╛рд╖рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдШреГрдгрд┐рдд рдорд╛рдирджрдВрдб рд╣реИ! рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ 2 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ
qsort
рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ 5 рд╕реЗ рдЬрд┐рддрдирд╛ рддрдирд╛рд╡ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдореИрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛!
рдЕрдм рдЖрдк рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рд╕рд╛рде рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╡реЗ рд╣рд░ рдЬрдЧрд╣ рд╣реИрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд▓рдЧрднрдЧ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ 8 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реЗ рд╣рд░ рдЬрдЧрд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ)ред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧреНрд░рд╣ (рд╕рдорд╛рдВрддрд░ рд╕рд╣рд┐рдд), рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдЪреАрдиреА - рдпрд╣ рдЕрдм рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рдЪ рдореЗрдВ, рдореИрдВ рд╕рд┐рд░реНрдл
рдРрд╕реЗ рд▓реЗрдЦреЛрдВ рдХреЛ рдорд╛рдирддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛рдУрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдРрд╕реА рддреБрд▓рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ! рдпрд╣ рдПрдХ рд╡рд╛рдИрдкреА рдХреА рдЧрддрд┐ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!" рдЬрдм рддрдХ, рд╣рдо
HQ9 + рдХреА рдЧрддрд┐ рдХреЛ
рдорд╛рдкрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╡рд░рдг рдмрдбрд╝реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдврд╝рддреА рд╣реИ, рд╣рдо рдХрдо рдФрд░ рдХрдо рдЪрд┐рдВрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХреЛрд╖реНрдардХ рдпрд╛ рдЗрдВрдбреЗрдВрдЯ, рдЗрдиреНрдлрд┐рдХреНрд╕ рдпрд╛ рдЙрдкрд╕рд░реНрдЧ рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд░рдгреА рдХреА рд░рд╛рд╢рд┐ рдХреЛ рдЦреЛрдЬрдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИ - рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВред
рдЬрдЯрд┐рд▓рддрд╛
рд╣рдо рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рддреЗ рд╣реИрдВ рд╡реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕реНрдерд┐рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВ рдмрджрд▓реАрдВ рддреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрджреНрднреБрдд рд╣реИ рдЕрдЧрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдордЭ рд▓реЗрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдХрд╛рд╢, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдЦрддреНрдо рдХрд░рдирд╛, рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛, рд╕реБрдзрд╛рд░рдирд╛, рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛, рдмрджрд▓рдирд╛, рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдкреНрд░рд┐рдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде, рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗрд╡рд▓ рдмрдврд╝рддреА рд╣реИред рд▓рдЧрд╛рддрд╛рд░, рд▓рдЧрд╛рддрд╛рд░ред рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдЬрд▓реНрджреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ "рдмреИрд╕рд╛рдЦреА" рдирд╣реАрдВред рд╕реМрдВрджрд░реНрдпред рд╕рдордп рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдЗрддрдиреА рд░реЛрд╢рди рдФрд░ рд╣рдВрд╕рдореБрдЦ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЛрдб рдХрд╛ рдорд╛рдореВрд▓реА рд╕рдВрдкрд╛рджрди рднреА рд╕рдВрднрд╡рддрдГ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╣рд┐рдорд╕реНрдЦрд▓рди рдЬреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреА
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдордп рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рдЪрдореБрдЪ рд╣рдорд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрд╡рднрд╛рд╡ рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕рдордп рдореЗрдВ рд╕реАрдорд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдврд╝рддрд╛ рд╣реИ, рд╡реИрд╕реЗ-рд╡реИрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдиреЗрдХреНрд╢рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рдореБрдЦреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╕рдордп, рдЯреАрдо рдмрдврд╝ рд░рд╣реА рд╣реИ, рдЯреАрдо рдмрджрд▓ рд░рд╣реА рд╣реИ - рдирдП рд▓реЛрдЧ рдЕрдм рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдФрд░ рднреА рднреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдзреАрд░реЗ-рдзреАрд░реЗ, рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ? рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рдХрд╡рд░реЗрдЬ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ? рдЯреЗрд╕реНрдЯ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд░рд╕реНрд╕реА рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдирд╣реАрдВ рд╣реБрдП - рдХреБрдЫ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдЗрд▓рд╛рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рд░ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдЦреНрдд рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдкреИрдЯрд░реНрди рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ? рдирд╣реАрдВ, рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд╛рдиреАрдп рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл рдпрд╣ рд╕рдордЭрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдШрдЯрдХ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдВрдХ рд╣реИрдВред рд╢рд╛рдпрдж рдирд┐рд░рдВрддрд░ рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ? рдпрд╣ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ; рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рдмрдврд╝рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╣реА рдЙрдкрдХрд░рдг рд╣реИред рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣рдореЗрдВ рд╕рд░рд▓ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рд╕рд░рд▓ рдФрд░ рдЖрд╕рд╛рди
рд▓реЗрдХрд┐рди "рд╕рд░рд▓" рдХрд╛ рдорддрд▓рдм "рдЖрд╕рд╛рди" рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░, рд░рд┐рдЪ рд╣рд┐рдХреА (рдХреНрд▓реЛрдЬрд░ рдХреЗ рд▓реЗрдЦрдХ) рдиреЗ рдкреНрд░рд╕рд┐рджреНрдз рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ
рд╕рд┐рдВрдкрд▓ рдореЗрдб рдИрдЬрд╝реА рднреА рдмрдирд╛рдпрд╛ред
рд╕реНрд▓рд╛рдЗрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИрдмрд░ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИред рд╕рд░рд▓рддрд╛ рдПрдХ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ (рдЬрдЯрд┐рд▓рддрд╛) рдХреА рдХрдореА, рдЗрдВрдЯрд░рд╡реНрдпреВрд╡рд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐, рднреНрд░рдо, рдХрдиреЗрдХреНрд╢рди рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, "рдЖрд╕рд╛рди" рдмрд╣реБрдд рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд╣реИред рдХреНрдпрд╛ рдмрд╛рдЗрдХ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ? рд╢рддрд░рдВрдЬ рдХрд╛ рдЦреЗрд▓ рдЬреАрддреЗрдВ? рдЬрд░реНрдорди рдмреЛрд▓реЛ рдореИрдВ рдЬрд░реНрдорди рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ "рдЗрд╕ рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред" рдпрд╣
рдореЗрд░реЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓
рд╣реИ , рдФрд░ рдлрд┐рд░ рднреА рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред
рд╣рдо рд╕рднреА рдХреЛ рдлрдВрдХреНрд╢рди рдХреЙрд▓
f(x, y)
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдУрдУрдкреА рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдо рдмрд╛рдд рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлреЗрдлрдбрд╝реЗ рдЬрд░реВрд░реА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд╣рдо рдмрд╕ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрднреНрдпрд╕реНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
(defn select "Returns a set of the elements for which pred is true" {:added "1.0"} [pred xset] (reduce (fn [sk] (if (pred k) s (disj sk))) xset xset))
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ ...
рдЕрдЬреАрдм рд╣реИ ! рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЗрд╕рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛, рддрд╛рдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рд╕рд╛рджрдЧреА (рдпрд╛ рдЬрдЯрд┐рд▓рддрд╛) рдирд┐рд░рдВрддрд░ рд╣реИред рдпрджрд┐ рд╣рдо рдЙрдкрдХрд░рдг рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдВрддрд░рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡реИрд╕реЗ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧреАред рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдпрд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдЙрдкрдХрд░рдг рдЕрднреА, рддреБрд░рдВрдд, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХреЗ рд╕реНрд░реЛрдд рдХреНрдпрд╛ рд╣реИрдВ? рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИред рдЖрдк рдЙрдирдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рднрд╛рд╖рд╛
рдХреЛ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж
рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП ред
рдХреНрд▓реЛрдЬрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рд╣реИ, рдпрд╣ рд╣рдореЗрдВ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП
рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ "рд╣рдореНрдо" рд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдХреЛрдИ рдЗрдирдкреБрдЯ рд╣реИ рддреЛ рдХреЛрдИ рд╡реАрдХреЗрдВрдб рд╣реИред рд╣рдо рдХрд┐рддрдиреА рдмрд╛рд░ рднреА рдлрдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЙрд╕рдХрд╛ рд░рд┐рдЬрд▓реНрдЯ рд╡рд╣реА рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдпрд╛ рд╕рд╣реА рдмрд╛рд╣рд░реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ (рдЕрдиреБрдХрд░рдг) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЖрдк рд╕рдЪрдореБрдЪ рдЙрдирдХреЗ рд╕рд╛рде "рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рд▓рд╛рдЗрд╡ рдбреЗрдЯрд╛ рдкрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиред рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╢реБрджреНрдз рдХрд╛рд░реНрдп рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдмрд╣реБрдд рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реЛрдВред
рдмреЗрд╢рдХ, рдХреНрд▓рдЬреЛрд░ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ, рдЙрдирдХреА рд░рдЪрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
((juxt dec inc) 1) ; => [0 2] ((comp str *) 1 2 3) ; => "6" (map (partial * 10) [1 2 3]) ; => [10 20 30] (map (comp inc inc) [1 2 3]) ; => [3 4 5]
рдХреНрд▓реЛрдЬрд░ рдПрдХ рд╢реБрджреНрдз рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
println
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реИ, рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдмрд╣реБрдд рд╕рд╛рд░ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ, SQL рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ - рдпреЗ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╕реЗ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдЕрд░реНрдерд╣реАрди рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ (рд╕реНрд╡рдЪреНрдЫ рдФрд░ рдЧрдВрджреЗ) рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред
рд▓реЗрдХрд┐рди рдЙрдирдХреЗ (рдЧрдВрджреЗ рдХрд╛рд░реНрдп) рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдХреЗрд╡рд▓ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдХреНрд▓реЛрдЬрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред
Immutabelnost
рдХреНрд▓реЛрдЬрд░ рдореЗрдВ
рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рд╡реЗрдХреНрдЯрд░ рддрддреНрд╡ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ
рдирдпрд╛ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддрддреНрд╡ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓реЛрдЬрд░ рд╕рднреА рдорд╛рдирдХ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдЯрд┐рд▓рддрд╛ (рд╕рдордп рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ) рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИред рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдУ (1) рдХреЗ рдмрдЬрд╛рдп, рд▓рдЧрднрдЧ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдУ (рд▓реЙрдЧ
32 (рдПрди)) рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд▓рд╛рдЦреЛрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП, lg
32 (N) 5 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛
рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╕рдВрд░рдЪрдирд╛ "рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдирдпрд╛ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд╛рд▓реВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ
рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИред рдмреЗрд╢рдХ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
(def a [1 2 3 4 5 6 7 8]) ; a -> [1 2 3 4 5 6 7 8] (def b (assoc a 3 999)) ;b -> [1 2 3 999 5 6 7 8]
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдХреНрд▓реЙрдЬреБрд░ рдПрдХрд▓ рдЬреБрдбрд╝реА рд╣реБрдИ рд╕реВрдЪрд┐рдпреЛрдВ, рд╡реИрдХреНрдЯрд░, рд╣реИрд╢ рдЯреЗрдмрд▓, рд▓рд╛рд▓-рдХрд╛рд▓реЗ рдкреЗрдбрд╝реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рддрдд рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ (рдЖрдк рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдпрд╛ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдФрд░ рд╕рдм рдХреБрдЫ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рдХрд╛рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
(defrecord Color [red green blue]) (def a (Color. 0.5 0.6 0.7)
рдпрд╣рд╛рдВ рд╣рдо 3-рдлреАрд▓реНрдб рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ 5 рдлрд╝реАрд▓реНрдбреНрд╕ (2 "рдЕрддрд┐рд░рд┐рдХреНрдд") рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдЧрд╛ред рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╢реВрдиреНрдп рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП 3 рдлрд╝реАрд▓реНрдбред рдФрд░ рдПрдХ рдФрд░ рдХреНрд╖реЗрддреНрд░ - рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЦреЗрддреЛрдВ рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд▓реЛрдЬрд░ рдЕрднреА рднреА рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
(defrecord Color [red green blue]) (def b (assoc a :alpha 0.1)) ; b => {:alpha 0.1, :red 0.5 :green 0.6, :blue 0.7}
рдФрд░ рд╣рд╛рдВ, рдХреНрд▓реЙрдЬреНрдпреЛрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:
; [1 2 3] ; - {:x 1, :y 2} ; #{"a" "b" "c"}
рд░рд╛рдЬреНрдп
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИрдВ, рд╡реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдЧрдВрджреЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ (рд╕реЙрдХреЗрдЯ, рдбреЗрдЯрд╛рдмреЗрд╕, рд╡реЗрдм-рд╕рд░реНрд╡рд░) рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдХреА рдПрдХ
рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреЛ рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
4 рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдирдХ рд▓рд┐рдВрдХ рд╣реИрдВ:
var
- рдереНрд░реЗрдб-рд▓реЛрдХрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрдиреЗрдХреНрд╢рди, рд╡рд░реНрддрдорд╛рди HTTP рдЕрдиреБрд░реЛрдз, рдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдкрд╕рдВрдж;atom
- рдкрд░рдорд╛рдгреБ рд╕реЗрд▓ , рдЖрдкрдХреЛ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рд╕рдордиреНрд╡рд┐рдд рдирд╣реАрдВ ;agent
- рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд▓реНрдХрд╛ рдПрдирд╛рд▓реЙрдЧ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдорд╛рдпрдиреЗ рдореЗрдВ, рд╡реЗ рдПрдВрдЯреАрдкреЛрдб рд╣реИрдВ, рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ), рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ;ref
- рдЯреНрд░рд╛рдВрд╕рдПрдХреНрд╢рдирд▓ рдореЗрдореЛрд░реА рдХреА рдХреЛрд╢рд┐рдХрд╛рдПрдВ, рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рдордиреНрд╡рд┐рдд рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░
var
(рдХрд╛рд░реНрдпреЛрдВ рд╕рд╣рд┐рдд) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ "рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ" рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
(def ^:dynamic *a* 1) (println a)
рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕рдВрдХрд▓рдХ рдХреЛ рдмрддрд╛рдпрд╛ рдХрд┐ рдЪрд░
a
рдЧрддрд┐рд╢реАрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреНред
рдереНрд░реЗрдбрд▓реЛрдХ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрддред
ThreadLocal
рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА
var
рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рднреА
var
рд╕реЗрд▓ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдЕрдХреНрд╕рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЖрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
; , .. (defn some-function-with-side-effect [x] ...) ; (defn another-function [x] ...) (deftest just-a-test ... (binding [some-function-with-side-effect (fn [x] ...)] ; mock- (another-function 123)) ...)
deref
рд╕рднреА рд▓рд┐рдВрдХ
deref
(рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ) рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред
var
рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
;
рдПрдХ рд╕реЗрд▓ рдПрдХ рдорд╛рди (рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреБрдж рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рд╣реИред
deref
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд┐рдпрд╛
deref
(рд╣рд╛рдБ, рдпрд╣ рд╕рд┐рд░реНрдл рдЪреАрдиреА рд╣реИ)ред рдпрд╣рд╛рдВ
atom
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
(let [x (atom 0)] (println @x)
swap!
рд╕рдорд╛рд░реЛрд╣
swap!
рдПрдХ рдкрд░рдорд╛рдгреБ рдФрд░ рдПрдХ "рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди" рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдкрд░рдорд╛рдгреБ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХрд╛рдо рдЖрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкрд░рдорд╛рдгреБ рдореЗрдВ рдПрдХ рд▓рд╛рдЦ рддрддреНрд╡реЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди "рдореНрдпреВрдЯрд┐рдВрдЧ" рдлрд╝рдВрдХреНрд╢рди рдХреЛ
рдХреИрд╕ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╕рд╛рдорд╛рдиреНрдп, рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ)ред рдпрд╛ рд╣рдо рд╣реИрд╢ рдЯреЗрдмрд▓ рдкрд░ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
(def user (atom {:login "theuser" :email "theuser@example.com"})) (swap! account assoc :phone "12345")
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдл тАЛтАЛрд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ (рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП):
(swap! x (fn [x] (insert-new-record-to-db x) (inc x)))
рдПрдЬреЗрдВрдЯреЛрдВ
рдПрдЬреЗрдВрдЯ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрд▓ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдХрддрд╛рд░ рдЗрд╕рдХреЗ рд╕рд╛рде "рд╕рдВрд▓рдЧреНрди" рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рд╕рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдирдпрд╛ рдорд╛рди рдмрди рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдкреВрд▓ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
(def a (agent 0))
рдПрдЬреЗрдВрдЯ рдЕрдкрдиреЗ рдореВрд▓реНрдп рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдЬреЗрдВрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдЬреЗрдВрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ; рднреЗрдЬрддреЗ рд╕рдордп, рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдПрдХ рдПрдЬреЗрдВрдЯ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред
(def a (agent 0)) (def b (agent 0)) (send a (fn [x] (send b inc)
рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ
рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд╛рджреГрд╢реНрдп
рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ ред рд╡реЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореМрд▓рд┐рдХ рдЕрдВрддрд░ рд╣реИрдВред рдПрдЬреЗрдВрдЯреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдХрд┐рд╕реА рднреА рд╕рдордп рдЖрдк
deref
рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдЬреЗрдВрдЯ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо "рдЧрд▓рддреА рд╕реЗ" рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗред рдПрдЬреЗрдВрдЯ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ - рдЗрд╕рдХрд╛ рд░рд╛рдЬреНрдп
рдХреЗрд╡рд▓ send
рдФрд░
send-off
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ
рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рдХреЗрд╡рд▓ рдереНрд░реЗрдб рдкреВрд▓ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
рджреВрд╕рд░рд╛ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдЬреЗрдВрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВред рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рдПрдЬреЗрдВрдЯ рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рд╣реИрдВ, рдЙрдирдХрд╛ рдЕрдкрдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред рд╣рдо рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдЬреЗрдВрдЯ рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрднрд┐рдиреЗрддрд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЫреЛрдЯреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдВрд╕реВ рдпрд╛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрди рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХрдореА рдЖрддреА рд╣реИред рдпрд╣ рдХрднреА-рдХрднреА рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХрдИ рдиреЛрдбреНрд╕ рдкрд░ рдПрдХ рдПрд░рд▓рд╛рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рддреЗ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдмрд╛рд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдХрднреА-рдХрднреА рд╡рд┐рдкрд░реАрдд рднреАред рдЗрд╕рд▓рд┐рдП, рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмреАрдЪ рдЧрдбрд╝рдмрдбрд╝реА
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХреИрд╢, рд╕рддреНрд░, рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдЖрджрд┐ред
рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╡рд╣ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реИ (рд╡рд╣ рдмрд╛рдХреА рдХреЛ рдЧрд▓рдд рдорд╛рдирддрд╛ рд╣реИ)ред рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдХреНрд░рдо рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдирдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдиреБрдмрдВрдз рд╣реИред рдПрдХ рдПрдЬреЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ред рдпрд╣ рдЬреЛрд░ рджреЗрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдЬреЗрдВрдЯ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ
рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА
рдирд╣реАрдВ рд╣реИрдВред рдпреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдХрд╛ рджрд╛рдпрд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдЬреЗрдВрдЯ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдШрдЯрдирд╛рдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдПрдЬреЗрдВрдЯ рд╕реЗ рдПрдЬреЗрдВрдЯ рддрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдХреЗрд▓реЗ рдПрдЬреЗрдВрдЯреЛрдВ рдХреА рдорджрдж рд╕реЗ, рд╣рдо
рд╕рдордиреНрд╡рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдПрд╕рдЯреАрдПрдо
рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рдирд▓ рдореЗрдореЛрд░реА рдХреНрд▓реЛрдЬрд░ рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
MVCC рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рддреБрд░рдВрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг:
(def account1 (ref 100) (def account2 (ref 0)) (dosync (alter account1 - 30) (alter account2 + 30))
рд╣рдо рдПрдХ рдореВрд▓реНрдп рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдФрд░ рдШрдЯрд╛рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ (рдЕрдкрд╡рд╛рдж), рддреЛ
рдкреВрд░рд╛ рд▓реЗрдирджреЗрди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
(println @account1) ; => 70 (println @account2) ; => 30 (dosync (alter account1 * 0) (alter account2 / 0)) ; => ArithmeticException ; (println @account1) ; => 70 (println @account2) ; => 30
рд╕рд╛рдорд╛рдиреНрдп ACID рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдерд╛рдпрд┐рддреНрд╡ рдХреЗ рдмрд┐рдирд╛ред рд▓реЗрди-рджреЗрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп, рд╕рднреА рд▓рд┐рдВрдХ рдлреНрд░реАрдЬ рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдореВрд▓реНрдп рдкреВрд░реЗ рд▓реЗрдирджреЗрди рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐, рдХрд┐рд╕реА рд▓рд┐рдВрдХ рдХреЛ рдкрдврд╝рддреЗ / рд▓рд┐рдЦрддреЗ рд╕рдордп, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдирд╛ рдореВрд▓реНрдп рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ (рдПрдХ рдФрд░ рд▓реЗрди-рджреЗрди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ рд╣реИ), рддреЛ рд╡рд░реНрддрдорд╛рди рд▓реЗрдирджреЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд▓реЗрди-рджреЗрди (рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ, рдкрд░рдорд╛рдгреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо) рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣рд╛рдВ рдПрдЬреЗрдВрдЯ рдХрд╛рдо рдЖрддреЗ рд╣реИрдВред
(def a (ref 0)) (def b (ref 0)) (def out-agent (agent nil)) (dosync (println "transaction") (alter a inc)
рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрджреЗрд╢ рдЙрд╕ рдХреНрд╖рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд▓рд┐рдВрдХ рдХреЛ
a
рдФрд░
b
рдмрджрд▓рдиреЗ рд╕реЗ рд▓реЗрдирджреЗрди рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, "рд▓реЗрдирджреЗрди" рд╢рдмреНрдж рдХреЛ рдХрдИ рдмрд╛рд░ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдЬреЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рджред
рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдирджреЗрди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓реЛрдЭрд░ рдореЗрдВ рд▓рд┐рдВрдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд░рдЦрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдХреЛрдИ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ (рдПрдХ рд▓реЗрдирджреЗрди рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдкрдврд╝рддрд╛ рд╣реИ), рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣реАрдд рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ (5 рдорд╛рди рддрдХ) рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓рд┐рдВрдХ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╣рд╛рдиреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕реНрдореГрддрд┐ рдХреА рдЦрдкрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╕реНрддрд╛ рд╣реИред
рдПрд╕рдЯреАрдПрдо рд▓реЗрдирджреЗрди рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡реЗ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рд╣рдо рдореМрдЬреВрджрд╛ рд▓рд┐рдВрдХ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдирдП рд▓рд┐рдВрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рдВрдХ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдзрд╛рд░рдг рддрд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд▓реЙрдХ / рдЕрдирд▓реЙрдХ рдСрд░реНрдбрд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЧрддрд┐рд░реЛрдз рдкреИрджрд╛ рди рд╣реЛред
рд╕рдорд╡рд░реНрддреА рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде, рд░реАрдбрд░ рд▓реЗрдирджреЗрди рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдХреБрдЫ
ReadWriteLock рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрди-рджреЗрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦрдХ рдкрд╛рдардХреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ! рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рд▓реЗрди-рджреЗрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд▓рд┐рдВрдХ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдмрд┐рдирд╛ рдмреНрд▓реЙрдХ рдХрд┐рдП рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдЬреЗрдВрдЯ рдФрд░ рдПрд╕рдЯреАрдПрдо рд▓рд┐рдВрдХ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░рдХ рд╣реИрдВред рдкреВрд░реНрд╡ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдордиреНрд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдЖрдкрдХреЛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рд╕рдВрдпреБрдХреНрдд рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ "рд╢рд╛рд╕реНрддреНрд░реАрдп" рдЯреВрд▓ (рдореНрдпреВрдЯреЗрдХреНрд╕, рд╕реЗрдорд╛рдлреЛрд░реНрд╕, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╕рд░рд▓ (рдХрдо рднреНрд░рдорд┐рдд) рдмрдирд╛рддрд╛ рд╣реИред
metaprogramming
рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдм рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЙрдкрдХрд░рдг рд╣реИрдВред рдпреЗ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрд╕реНрдкреЗрдХреНрдЯрдЬ, рдЧреНрд░реВрд╡реА рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЯреА рд░реВрдкрд╛рдВрддрд░рдг, рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдбреЗрдХреЛрд░реЗрдЯрд░ рдФрд░ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реИрдВред
рд▓рд┐рд╕реНрдк рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓реЛрдЬрд░, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреА рдорджрдж рд╕реЗ, рд╣рдо рднрд╛рд╖рд╛ рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо (рд╡рд┐рд╕реНрддрд╛рд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдХреНрд░реЛ рдПрдХ "рд╕рд╛рдзрд╛рд░рдг" рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрднреА рддрдХ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдореИрдХреНрд░реЛ рдЗрдирдкреБрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдХреНрд░реЛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирдпрд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХрд▓рд┐рдд рд╣реИред (defmacro unless [pred ab] `(if (not ~pred) ~a ~b)) (unless (> 1 10) (println "1 > 10. ok") (println "1 < 10. wat"))
рд╣рдордиреЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛ (рдЙрд▓рдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг if
) рдмрдирд╛рдИ ред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ!рдореИрдХреНрд░реЛрдЬрд╝ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХрдИ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ or
: (defmacro or ([] nil) ([x] x) ([x & next] `(let [or# ~x] (if or# or# (or ~@next)))))
рдпрд╣рд╛рдВ рддрдХ рдХрд┐ defn
рд╕рд┐рд░реНрдл рдПрдХ рдореИрдХреНрд░реЛ, рдореЗрдВ рдЦреБрд▓рд╛рд╕рд╛ def
рдФрд░ fn
ред рд╡реИрд╕реЗ, рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (let [[ab] [1 2]] (+ ab)) ; - ... (let* [vec__123 [1 2] a (clojure.core/nth vec__123 0 nil) b (clojure.core/nth vec__123 1 nil)] (+ ab))
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рдпрд╛рд╕-рдХреЗ-рд╕рдВрд╕рд╛рдзрди рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВ ред рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ рдЬрд╛рд╡рд╛ рдХреЗ 7 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ред рдХреНрд▓реЛрдЬрд░ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рд┐рдЦреЗрдВ: (defmacro with-open [[vr] & body] `(let [~r ~v] (try ~@body (finally (.close ~v)))))
рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрдорд╛рдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреА рдЦреБрдж рдХреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓реЙрдЬреНрдпреЛрд░ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреИрдЯрд░реНрди рдПрдХ рдЕрд▓рдЧ рдкреНрд▓рдЧ-рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рдореАрдЪреАрди рд╣реИред рд╕реНрдерд┐рддрд┐ рдореЛрдирдб рд╕рдорд░реНрдерди , рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ , рдЙрдиреНрдирдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рднреА рд╣реИ !рдХреЛрдИ рднреА DSL рдмрдирд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрд▓реЛрдЬрд░ рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реИрдВред рдпрд╣ рдФрд░HTML рдХреА рдкреАрдврд╝реА рд╣реИ, рдФрд░ HTTP рдЕрдиреБрд░реЛрдз рдорд╛рд░реНрдЧ , рдФрд░ рд╕рд╛рде рдХрд╛рдо рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛ , рдФрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдорд╛рдиреНрдпрддрд╛ рдбреЗрдЯрд╛ ... рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдХреЛ рдкрддрд╛ рд╣реИ рдЬрдм рд░реЛрдХрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ)редрдХреНрд▓реЛрдЬрд░ (рд╕рднреА рд▓рд┐рд╕реНрдк рдХреА рддрд░рд╣ рднрд╛рд╖рд╛рдУрдВ) рдХреА рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдпрд╣ рд╣реЛрдореЛ- рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИрдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдПрд╕рдЯреА-рдЯреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕реНрддрд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╣ рдкреЗрдбрд╝ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкреЗрдбрд╝ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдирд╣реАрдВ рд╣реИ, рдпреЗ рд╕рд╛рдзрд╛рд░рдг рд╕реВрдЪреА, рд╡реИрдХреНрдЯрд░ рдФрд░ рдкреНрд░рддреАрдХ рд╣реИрдВред рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдпрдорд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рдеред (defn do2 [x] (list 'do xx)) (do2 '(println 1)) ; => '(do (println 1) (println 1)) ; ; => (list 'do (list 'println 1) (list 'println 1))
рдЙрдирдХреА рд╕рд╛рд░реА рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЬрдм рддрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореЙрдбрд░реЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдореИрдХреНрд░реЛ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ (dosomething [ab] c)
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдирд╛рдо рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИ dosomething
, рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЗрдЦреЗрдВ (рдЬрд╣рд╛рдВ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реНрдереВрд▓ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдирд┐рд░рдВрддрд░ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдиреНрдирдд IDEs рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдиреНрдирдд рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдЬрдЧрд╣ рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рдХреЛ "рддреИрдирд╛рдд" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреНрдпрд╛ рдореЛрдбрд╝ рджреЗрдЧрд╛редрдмрд╣реБрд░реВрдкрддрд╛
рдкреЛрд▓реАрдореЙрд░реНрдлрд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЛрдЬрд░ рдореЗрдВ 2 рддрдВрддреНрд░ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рднрд╛рд╖рд╛ рдиреЗ рдХреЗрд╡рд▓ рдорд▓реНрдЯреАрдорд┐рдереЛрдбреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ - рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЕрддреНрдпрдзрд┐рдХред рд╕рдВрд╕реНрдХрд░рдг 1.2 (рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 1.5.1 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рднрд╛рд╖рд╛ - рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИредрдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред (defprotocol IShowable (show [this]))
рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо 2 рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ - рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реА, рд╕рд╛рде рд╣реА рдлрд╝рдВрдХреНрд╢рди show
ред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдХреНрд▓реЛрдЬрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред (defrecord Color [red green blue] IShowable (show [this] (str "<R" (:red this) " G" (:green this) " B" (:blue this))))
рдЖрдк рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд░рдХрд╛рд░ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (extend-protocol IShowable String (show [this] (str "string " this)) clojure.lang.IPersistentVector (show [this] (str "vector " this)) Object (show [this] "WAT")) (show "123")
рдЖрдк рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд░реЛрдд рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рди рд╣реЛред рдмрд╛рдЗрдЯрдХреЛрдб рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд╛рд▓ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЬрд╛рджреБрдИ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдирд╣реАрдВ рд╣реИрдВред рдХреНрд▓реЙрдЬреБрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ ->
, рдЬрдм рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡реИрд╢реНрд╡рд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдШреЛрд╖рдгрд╛ рдиреАрдЪреЗ рдЖрддреА рд╣реИредрд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛрд╣рд░реА рд╕рдордп-рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП ред рдЗрд╕ (рдФрд░ рди рдХреЗрд╡рд▓) рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдорд▓реНрдЯреАрдорд┐рдереЛрдб рдХрд╛рдо рдореЗрдВ рдЖрддреЗ рд╣реИрдВредред рдорд▓реНрдЯреАрдорд┐рдереЛрдб рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдЗрдб рдлрдВрдХреНрд╢рди-рдбрд┐рд╕реНрдкреИрдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЗрд╖рдгрдХрд░реНрддрд╛ рдорд▓реНрдЯреАрдорд┐рдереЛрдб рдХреЗ рд╕рдорд╛рди рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЦреЛрдЬ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╕реНрдкреИрдЪрд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░, рдХреАрд╡рд░реНрдб рдпрд╛ рд╡реЗрдХреНрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИред (defmulti convert (fn [obj target-type] [(class obj) target-type])) (defmethod convert [String Integer] [x _] (Integer/parseInt x)) (defmethod convert [String Long] [x _] (Long/parseLong x)) (defmethod convert [Object String] [x _] (.toString x)) (defmethod convert [java.util.List String] [x _] (str "V" (vec x))) (convert "123" Integer) ; -> 123 (convert "123" Long) ; -> 123 (convert 123 String) ; -> "123" (convert [1 2 3] String) ; -> "V[1 2 3]"
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рд╕рд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХреА, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдмреЗрд╢рдХ, рдХреНрд▓реЛрдЬрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХрдбрд╝рд╛рдИ рд╕реЗ рддрдп рдХреА рдЧрдИ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдХреАрд╡рд░реНрдб рд╕реЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рддрджрд░реНрде рд╢реНрд░реЗрдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред ; "-" (derive ::rect ::shape) (derive ::square ::rect) (derive ::circle ::shape) (derive ::triangle ::shape) (defmulti perimeter :type) ; , :type ~ (fn [x] (:type x)) (defmethod perimeter ::rect [x] (* 2 (+ (:hx) (:wx)))) (defmethod perimeter ::triangle [x] (reduce + ((juxt :a :b :c) x))) (defmethod perimeter ::circle [x] (* 2 Math/PI (:rx))) (perimeter {:type ::rect, :h 10, :w 3}) ; -> 26 (perimeter {:type ::square, :h 10, :w 10}) ; -> 40 (perimeter {:type ::triangle, :a 3, :b 4, :c 5}) ; -> 12 (perimeter {:type ::shape}) ; -> throws IllegalArgumentException
рдЖрдк рдХрдИ рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдмрд╛рд░ (рд╡реЗрдХреНрдЯрд░) рдХрдИ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдкреНрд░реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдХреАрд╡рд░реНрдб рдФрд░ рдЬрд╛рд╡рд╛ рдкреНрд░рдХрд╛рд░ рднреА рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ! (derive java.util.Map ::collection) (derive java.util.Collection ::collection) (derive ::tag .java.lang.Iterable) ; -> ClassCastException
рд╣рдо рдПрдХ рдХреАрд╡рд░реНрдб рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ "рд╡рд╛рд░рд┐рд╕" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ)ред рдпрд╣ рдЙрди рд╡рд░реНрдЧ рд╕рдореВрд╣реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВредрдорд▓реНрдЯреАрдорд┐рдереЛрдб рдкреНрд░рдгрд╛рд▓реА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╣рдж рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдФрд░ рдЧреИрд░-рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорд▓реНрдЯреАрдорд┐рдереЛрдб рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди
рднрд╛рд╖рд╛ рдХрд╛ рдорддрд▓рдм рдмрд┐рдирд╛ рдЖрдзрд╛рд░рднреВрдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕рдореБрджрд╛рдп рдХреЗ рдмрд┐рдирд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рд░реВрдкрд░реЗрдЦрд╛рдУрдВ, рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдХреНрд▓реЛрдЬрд░ рдХреА рдПрдХ рддрд╛рдХрдд рдЬреЗрд╡реАрдПрдо рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдЬрд╛рд╡рд╛ (рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ) рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдмрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ (рд╣рдо рдЙрдирдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдЗрди рд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдХреНрд▓реАрдЬреБрд░реЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИ (рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣реА рд╣реИ)ред рдЧреНрд░рд╣рдг рдФрд░ рдЖрдИрдбреАрдИрдП рдХреЗрд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ ред рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓реЗрдирд┐рдВрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рд╣реИ ред рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░рд╣-рддрд░рд╣ рдХреЗ рдврд╛рдБрдЪреЗ рд╣реИрдВ WEB рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рд░реНрд╡рд░ред рдЗрдореНрдпреВрдиреЗрдЯрд┐рд╡ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( JBoss AS7 рдХреЗ рд▓рд┐рдП рдЖрд╡рд░рдг )ред рдЗрдореНрдпреБрдЯреЗрдВрдЯ рд░рд┐рдВрдЧ (рдХреНрд▓реЛрдЬрд░ рдХреЗ рд▓рд┐рдП HTTP рд╕реНрдЯреИрдХ), рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢, рд╡рд┐рддрд░рд┐рдд рдХреИрд╢рд┐рдВрдЧ, рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдп, рд╡рд┐рддрд░рд┐рдд рд▓реЗрдирджреЗрди, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред Immutant рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реИредрдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .Net CLR рдХреЗ рддрд╣рдд рдПрдХ рдкреЛрд░реНрдЯ ред рд▓реЗрдХрд┐рди рд╕рдЪ рдХрд╣рд╛ рдЬрд╛рдП, рддреЛ рдХреНрд▓реЛрдЬреБрд░реЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдВрджрд░рдЧрд╛рд╣ред рдмреЗрд╢рдХ, рдХреЛрдИ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдЯреВрд▓ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЯреНрд░рд╛рдВрд╕реЗрдХреНрд╢рдирд▓ рдореЗрдореЛрд░реА рдФрд░ рдПрдЬреЗрдВрдЯред рд▓реЗрдХрд┐рди рд╕рднреА рдЕрдиреНрдп рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдореИрдХреНрд░реЛрдЬрд╝, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдорд▓реНрдЯреАрдорд┐рдереЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ рдХреНрд▓реЛрдЬреБрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреАрдЪ рдПрдХреАрдХрд░рдг рдХреНрд▓реЛрдЬрд░ рдФрд░ рдЬрд╛рд╡рд╛ (рдФрд░ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдФрд░ рднреА рдмреЗрд╣рддрд░) рдХреЗ рдмреАрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рд░рд▓ рд╣реИредрдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпред рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдмрд╣реБрдореБрдЦреАред рд╕рд░рд▓ред рд╣рд╛рдВ, рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рджреЗрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдмрд╣реБрдд рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЖрджрдд рдХреА рдмрд╛рдд рд╣реИ, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕реБрдВрджрд░рддрд╛ рдЙрд╕рдХреА рдЬреИрд╡рд┐рдХрддрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рд╣реА рдкреВрд░реЗ рдореЗрдВ рдирд╛рдЬреБрдХ рд╕рдВрдпреЛрдЬрди рдореЗрдВредрдХреНрд▓реЛрдЬрд░ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдВрдЧреЗред