рд░реВрдмреА: рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдзреЛрдЦрд╛ рджреЗрддреА рд╣реИ

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

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

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

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

рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрднреА-рдХрднреА рд░реВрдмреА рдФрд░ рд░реЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

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

рд░реВрдмреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЙрдЪреНрдЪ рд╡реЗрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рдХрд╣рд╛рдиреА рдЕрднреА рднреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл, рдХрд┐ рд░реВрдмреА рдкрд░ рдмрд╣реБрдд рдХрдо рдХрд╛рдо рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдкреАрдПрдЪрдкреА рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдФрд░ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рд╡реЗрддрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВред PHP рдореЗрдВ рдФрд╕рдд рд╡реЗрддрди рд╕реНрддрд░ рдХреНрд▓рд╛рд╕рд┐рдХ "рдПрдХ рдЕрд╕реНрдкрддрд╛рд▓ рдореЗрдВ рдФрд╕рдд рд╡реЗрддрди рддрд╛рдкрдорд╛рди рд╣реИред" рдпрджрд┐ рд╣рдо Yii / Symfony / Zend рдФрд░ Rails рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ Django рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ), рддреЛ рдЪрд┐рддреНрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддреН: рд╡реЗрддрди рдФрд░ рдмрд╛рдЬрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рджреЛрдиреЛрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдЪреНрдЫреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдЪреНрдЫрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рдЬрдм рдЖрдк рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ - рдЕрдХреНрд╕рд░ рдордВрдЪ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЗ рдФрд░ рдЖрдкрдХреА рдЯреАрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдЧреНрд░рд╛рд╣рдХ / рдмреЙрд╕ред

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

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд░реЗрд▓ рдкрд░ рд▓реЗрдЦ рдХреЗ рдлреЛрдХрд╕ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдФрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдордВрдЪ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ - рд░реВрдмреА рд░реЗрд▓ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

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

рд░реВрдмреА рднрд╛рд╖рд╛: рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕


рдЧрд╣рд░реЗ рд▓рд╛рд▓ рд░рдВрдЧ рдХрд╛



рд╢реБрд░реБрдЖрдд
# {Os_name} рдкрд░ рд░реВрдмреА рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ?

рд▓рд┐рдВрдХ рдЦреБрдж:
  • рдЬреАрдд ред DevKit рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВ, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ
  • рд░реЗрд▓ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд░реВрдмреА + DevKit, Git, Rails, Bundler рдФрд░ SQLite рдХреЛ рддреБрд░рдВрдд Windows рдпрд╛ MacOS рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ ред рд░реВрдмреА, рд╣рд╛рд▓рд╛рдВрдХрд┐, 1.9.3 рд╣реИ, рдФрд░ 2.0 рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдЕрднреА рднреА рдЕрд▓реНрдлрд╛ рдореЗрдВ рд╣реИред ( рдЬрдмрд░ рджреНрд╡рд╛рд░рд╛ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ)
  • * рдирд┐рдХреНрд╕ - рдЕрдкрдиреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдЦреЛрдЬреЗрдВ

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

рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рдд рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдорд╛рд╣реМрд▓ рд╣реИред рдореИрдВ JetBrains рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ RubyMine рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрддреНрдкрд╛рдж рдХреБрдЫ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдлреНрдд Aptana рд╕реНрдЯреВрдбрд┐рдпреЛ ред рдпрджрд┐ рдкреНрд░рдХрд╛рд╢ рдкрд╛рда рд╕рдВрдкрд╛рджрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реИ, рддреЛ рд░реВрдмреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрдИ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рд░реВрдмреА рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реАрдзреЗ, рдЖрдк tryruby.org рдкрд░ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ
рд╕рдВрдЦреНрдпрд╛, рддрд╛рд░ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢реВрдиреНрдп рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╡реЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЖрдк nil ?, рдХреНрд▓рд╛рд╕, рдореЗрдердбреНрд╕ рдФрд░ response_to? рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
'Hello world'.class # String nil.class # NilClass String.class # Class String.ancestors # [String, Comparable, Object, Kernel, BasicObject];    nil.nil? # true Object.new.methods #     Object;        -    nil.respond_to?('nil?') # true 
рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдпрд╣ рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

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

рд╡рд┐рдзрд┐ рдХреЙрд▓ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреЛрд╖реНрдардХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
 nil.respond_to?('nil?') # true nil.respond_to? 'nil?' # true #  : if nil.respond_to? 'nil?' puts 'ok' end #  if 10.between? 1, 5 puts 'ok' end #        ,    if 10.between?(1, 50) && 20.between?(1, 50) puts 'ok' end 

рдФрд░ рднреА рдкреНрд░рддреАрдХ рд╣реИрдВ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЪрд░рд┐рддреНрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рддрд╛рд░ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рд╣реИрд╢ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 a = :nil? #  b = 'nil?' #  nil.respond_to? a # true nil.respond_to? b # true #  a == b # false a.to_s == b && a == b.to_sym # true;        

рдереЛрдбрд╝рд╛ рдФрд░ рдкрд╛рдЙрдбрд░ рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ:
 a = {:key1 => 'value1', :key2 => 'value2'} #   ( ) a = {key1: 'value1', key2: 'value2'} #   - ,    (Ruby >= 1.9.3) 
рдЬрдм рд╕реЗ рд╡рд┐рд╖рдп рдЖрдпрд╛ рд╣реИ:
 a = ['value1', 'value2'] #   s = 'String' s = "Double-quoted #{s}" # "Double-quoted String" - , ,  

рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдХреЗ рд╕рд╛рде рдбрд╕реНрдЯрд┐рдВрдЧ рдереАрдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ:
 %w[value1 value2] # ["value1", "value2"] -   ,    %i[value1 value2] # [:value1, :value2] -  , (Ruby >= 2.0) s = %q(String) s = %Q(Double-quoted #{s}) %x('ls') #   `ls` #    %r(.*) == /.*/ # true;      

рд╡реИрд╕реЗ, рд░реВрдмреА рдХреЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдкрд░рд┐рдЪрд┐рдд рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рд╣реИ - рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ
 a = 10; puts a #    10 if nil.respond_to? 'nil?'; puts 'ok'; end #    -    
рд▓реЗрдХрд┐рди рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
 puts 'ok' if nil.respond_to? 'nil?' 


рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рдФрд░ рдбреЙрдХреНрд╕
рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рд░реВрдмреА рдореЗрдВ рдФрд░ рдмреАрд╕ рдорд┐рдирдЯ рдореЗрдВ рд░реВрдмреА рдкрдврд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдореБрдЦреНрдп рджреЛрд╕реНрдд рдФрд░ рд╕рд╣рд╛рдпрдХ рдорд╛рдгрд┐рдХ-doc.org ред
рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рддреБрд░рдВрдд рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рд╕рднреА рдореЗрдВ - рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ_ рдФрд░ to_ рд╣реИрдВ)ред
рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдпрд╣рд╛рдБ - рдкрд╣рд▓реА рдмрд╛рдд рдореИрдЪ, рдЙрдк)
рд╕рд░рдгреА (рдорд╛рдирдЪрд┐рддреНрд░, рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ, рд╢рд╛рдорд┐рд▓ рд╣реИрдВ?)
рд╣реИрд╢ (has_key?; Has_value ?, рдорд░реНрдЬ рдХрд░реЗрдВ)
рд░реВрдмреА рдХреЛ рдПрдХ рд╕рд╛рде рдЬреАрддрдирд╛ рд╕рд░рд▓ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ ред рдкрд╣рд▓рд╛ рдЧрд┐рд░рд╛рдУ рджреВрд╕рд░рд╛ рдЧрд┐рд░рд╛рдУ рддреАрд╕рд░рд╛ рдЧрд┐рд░рд╛рдУ
рдпрджрд┐ рдЖрдк рднреЛрдЬ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рд░реВрдмреА рдкрд░ рдЬрд╛рджреВ рдХреЗ рдЪрдпрди рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЬрдирддрд╛ ред

рдХрдХреНрд╖рд╛рдПрдВ, рдореЙрдбреНрдпреВрд▓ рдФрд░ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ
рд░реВрдмреА рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░реВрдмреА рдХреА рд╢рдХреНрддрд┐ рдФрд░ рдЖрдХрд░реНрд╖рдг рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
 class Foo def bar 10 #     -     end def baz(a) bar + 20 end end puts Foo.new.baz(10) # 30 

рдореЙрдбреНрдпреВрд▓ - рдпрд╣ рдПрдХ рдЕрд╢реБрджреНрдзрддрд╛ рдФрд░ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЪрд╛рдирдХ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрдХреНрд╖рд╛рдУрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 module B #    class Foo #  def initialize(k) @k = k end #      def bar; @k + 20 end end end puts B.Foo.new(3).bar # 23 puts B::Foo.new(3).bar # 23;   ,    module C #   def bar; @k + 25 end end class Foo include C; def initialize(k) @k = k end end puts Foo.new(3).bar # 28 


рд░реВрдмреА рдореЗрдВ, рдХрдХреНрд╖рд╛рдПрдВ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдкреИрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ: рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк "рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ" - рдЗрд╕рд▓рд┐рдП рдЬрдм рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдХреНрдпреЛрдВ, рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ рдЦреБрдж рдХреЛред
 class Foo def bar; 20 end end class Foo #  def baz; bar + 2 end end puts Foo.new.baz # 22 #   - :      Foo.class_eval do def bazz; bar + 3 end end puts Foo.new.bazz # 23 #        -     class Boo < Foo def boo; bar + 2 end end puts Boo.new.boo # 22 #   -    ,     a = Foo.new a.instance_eval do #   def booo; bar + 3 end end puts a.booo # 23 puts Foo.new.booo rescue puts 'error' # error; ,    puts a.respond_to? :booo # true puts Foo.new.respond_to? :booo # false #  -       def a.booboo bar + 4 end puts a.booboo # 24 
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП Inst_eval рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдмреЗрд╢рдХ, рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
 class Foo def self.bar; 10 end #    end puts Foo.bar # 10 Foo.instance_eval do def baz; bar + 1 end end puts Foo.baz # 11 
рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╛рдж рд░рдЦреЗрдВ - рдЕрдкрдиреЗ рдкреИрд░реЛрдВ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦреЗрдВред
 class Foo def self.add_bar #   ,    self.class_eval do def bar; 'bar' end end end end puts Foo.new.respond_to? :bar # false class Boo < Foo #  add_bar #  end puts Boo.new.bar # bar #      ,      Foo.instance_eval do def add_baz self.class_eval do def baz; 'baz' end end end end class Baz < Foo add_baz end puts Baz.new.baz # baz 

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рд░реВрдмреА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?
 class Foo def bar #  @bar #   end def bar=(val) #  @bar = val #    end end 

рдХреНрдпрд╛ рдЖрдк рдПрдХ рджрд░реНрдЬрди рдпрд╛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд░реВрдмреА рдореЗрдВ рдмрд╣реБрдд рдХреЛрдб рд╣реИ - рдШрд╛рддрдХ рдкрд╛рдк: DRY ред рддреЛ, рдЖрдк рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 class Foo attr_accessor :bar, :baz #     attr_reader :boo #   attr_writer :booo #   end 


рдЕрдЧрд▓рд╛ рддреИрдпрд╛рд░ рд╣реИ? рддрдм:
рдкреЗрд╢ рд╣реИ рд░реВрдмреА рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕
рдореЗрдЯреНрд░реЛрдкреЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди - рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЫреЛрдЯреЗ - рдзрдорд╛рдХреЗ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ! , eval
рд╣рдо рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ

рд╡рд┐рдзрд┐ рддрд░реНрдХ
рд░реВрдмреА 2.0 рдирд╛рдо рд╡рд┐рдзрд┐ рддрд░реНрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
 # bar  # barr     0 # baz -       true def foo(bar, barr = 0, baz: true) baz && bar + barr end p foo 1 # 1 p foo 1, 2 # 3 p foo 1, baz: false # false 

рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 def foo2(bar, *args) args end p foo2 1, 2, :baz => false # [2, {:baz=>false}] def foo3(bar, *args) options = args.extract_otions! #     args p bar p args p options end foo3 1, 2, 3, :baz => false # 1 # [2, 3] # {:baz=>false} 

рд░реВрдмреА 2.1 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдХрд░, рдЕрдм рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдирд╛рдо рддрд░реНрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
 def foo4(bar, baz:); bar end foo4 1 #  foo4 1, baz: 2 # 1 


рдХреНрд▓реЛрдЬрд░ рдФрд░ рдмреНрд▓реЙрдХ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреНрд▓реЙрдХ, рдХреНрд▓реЛрдЬрд░, рдФрд░ рдкреНрд░реЛрдХ рдХреНрд▓рд╛рд╕ рдХреБрдЫ рднрдпрд╛рд╡рд╣рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВ - рдЗрддрдирд╛ рдХреНрдпреЛрдВ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рдкреНрд░реЛрдХ рд╣реИред
рд╡рд┐рд╡рд░рдг - рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ, рдФрд░ рдЕрдм - рдЖрдкрдХреЛ рдХрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмреНрд▓реЙрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ред рдПрдХ рдмреНрд▓реЙрдХ рд╕рд┐рд░реНрдл рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬрд╣рд╛рдВ, рдФрд░ рдПрдХ рд╡рд╕реНрддреБ рднреА рдирд╣реАрдВ рд╣реИ, рдмрд╕ рд░реВрдмреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХрд┐рд╕реА рдХреЛрдб рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдзрд┐ рдореЗрдВ, рдпрд╣ рдкреНрд░реЛрдХ рд╡рд░реНрдЧ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ:
 Foo.instance_eval do #    instance_eval     def baz; bar + 1 end end 

рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╣ рднреА рд╣реИ рдХрд┐ "рд░реВрдмреА рдореЗрдВ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП":
 [1,2,3].each do |val| p val # , p(val) -  shortcut  puts(val.inspect) end #  1 2 3 #  ,    [1,2,3].each { |val| p val } #  1 2 3 [1,2,3].each_with_index { |val, i| puts val.to_s + ' ' + i.to_s } #   

рдпрджрд┐ рд╣рдо рдмреНрд▓реЙрдХ рдХреЛ рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
 def foo puts yield #   puts yield + yield #  ,    end foo { 2 } # 2 4 def bar(&block) # ,    puts yield block #   end bar { 3 } # 3 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рдмреНрд▓реЙрдХ рд╣рдореЗрд╢рд╛ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдХрдИ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ Proc.new, рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдмрдирд╛рдирд╛ред

рдкреНрд░реЛрдХ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╣рдореЗрд╢рд╛ рдмреНрд▓реЙрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд▓реЙрдХ рд╕реНрд╡рдпрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ: рд╣рдо рдЗрд╕реЗ рдЙрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдкреНрд░реЛрдХ рдмрди рдЬрд╛рдПрдЧрд╛, рд╣рдо рдЗрд╕реЗ рдкреНрд░реЛрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдмреНрд▓реЙрдХ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗред
 proc = Proc.new { |a| a - 1 } #   p proc.call(10) #9 p proc.class # Proc l = lambda { |a| a + 1 } #   p l.call(10) #11 p l.class # Proc new_l = ->(a) { a + 2 } #   (Ruby >= 2.0) p new_l.call(10) #12 


рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдкреНрд░реЛрдХ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдВрддрд░ рд╣реИрдВ, рд╣рдордиреЗ рд▓реЗрдЦ рдкрдврд╝рд╛ ред
рдпрд╣рд╛рдБ, рд░реВрдмреА рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдФрд░ рдмреНрд▓реЙрдХреНрд╕ рдкрд╛рд░реНрд╕ рдФрд░ рд▓рдореНрдмреЗ рд╣реИрдВ
рдмрдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Habr├й рдкрд░, рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╢реИрд▓реА
рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд░рд┐рд╡рд╛рдЬ рдХреИрд╕рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреАрдерд╣рдм рдкрд░ рдПрдХ рдкреВрд░реА рдЧрд╛рдЗрдб рд╣реИ
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  • 2 рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди
  • рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд▓реЛрдЕрд░рдХреЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо: def method_name
  • рдкреВрдВрдЬреАрдХреГрдд рд╡рд░реНрдЧ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо: рд╡рд░реНрдЧ ClassName
  • рдпрджрд┐ рд╡рд┐рдзрд┐ рд╕рд╣реА / рдЧрд▓рдд рд╣реИ, рддреЛ рдирд╛рдо рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд╣реА, рд╢реВрдиреНрдп?)
  • рдпрджрд┐ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдирдпрд╛ рд▓реМрдЯрд╛ рджреЗрддреА рд╣реИ, рдкрд╣рд▓рд╛ 'рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ!' (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рдХреА рдУрд░ рдФрд░ рдиреАрдЪреЗ рдХреА рдУрд░! рдПрдХ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ - рдкрд╣рд▓рд╛ рдПрдХ рдирдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рд▓рд╛рдЗрди рдХреЛ рдЦреБрдж рд╣реА рдмрджрд▓ рджреЗрдЧрд╛)
  • рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрджрд┐ ((рдорд╛рди) рдпрд╣ рдЙрд░реНрдл тАЛтАЛрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬрдм рддрдХ рдХрд┐ (рдореВрд▓реНрдп)
  • рдПрдХ рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рдмреНрд▓реЙрдХ рдХреЛрд╖реНрдардХ {...} рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдмреНрд▓реЙрдХ рдбреВ ... рдПрдВрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ


RubyGems - рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ
рд░реВрдмреА рдХреА рджреБрдирд┐рдпрд╛ рд╢рд╛рдпрдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧреА рдЕрдЧрд░ рд░реВрдмреАрдЬреАрдореНрд╕ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдЙрдирдХреЗ рд╕рд╛рде, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреВрд░рдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддреА рд╣реИ:
  • рд░реВрдмреАрдЬрдо.рдУрдЖрд░рдЬреА рдХреЗ рд╕рд╛рде (рдпрд╛ рдорд╛рдгрд┐рдХ-toolbox.com рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, json_pure - рд╢реБрджреНрдз рд░реВрдмреА рдореЗрдВ JSON рдкрд╛рд░реНрд╕рд░ (рд╕реА рдХреЗ рдмрд┐рдирд╛)
  • рд░рддреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ json_pure рдХрдВрд╕реЛрд▓ рджрд░реНрдЬ рдХрд░реЗрдВ
  • рдФрд░ рд╣рдорд╛рд░реА рдЖрд░рдмреА рдлрд╛рдЗрд▓ рдореЗрдВ:
     require 'json/pure' #         ,   github 


рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдПрдХ рдмрдВрдбрд▓ рд╣реИ :
  • рдордгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдмрдВрдбрд▓
  • рдмрд╛рдВрдзрдиреЗрд╡рд╛рд▓рд╛
  • рдЬреЗрдордлрд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:
     source 'https://rubygems.org' gem 'json_pure' 
  • рдмрдВрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  • рдФрд░ рдЕрдкрдиреА рдЖрд░рдмреА рдлрд╛рдЗрд▓ рдореЗрдВ
     require 'rubygems' require 'bundler/setup' 

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

рд░рддреНрди рдЦреБрдж рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд░реЗрд▓ рдкрд░ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

RubyGems - рд╡рд┐рд╕реНрддрд╛рд░
рдмреБрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛
рдкреЗрд╢ рд╣реИ рдордгрд┐ред рднрд╛рдЧ рдПрдХ рднрд╛рдЧ рджреЛ
рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд░рддреНрди рд▓рд┐рдЦрдирд╛
RubyGems рдХреЗ рд▓рд┐рдП рдПрдХ рдордгрд┐ рдмрдирд╛рдирд╛
рд░рддреНрди рдмрдирд╛рдирд╛ - рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ

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

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

рд╕реА рд░реВрдмреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп
рд░реВрдмреА рдФрд░ рд╕реАред рднрд╛рдЧ 1 , рднрд╛рдЧ 2 , рднрд╛рдЧ 3 ред

рдзрд╛рд░рд╛рдУрдВ
рдПрдХ рд╕рд░рд▓ рд╕реНрдЯреНрд░реАрдо рдЙрджрд╛рд╣рд░рдг:
 thread = Thread.new do #    a = 0 1000000.times { a+= 1 } #      puts a #   end puts 'thread started' #       thread.join #     

рдХреЛрдб рдХрдВрд╕реЛрд▓ "рдереНрд░реЗрдб 100000 рд╢реБрд░реВ" рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛ред

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

 fiber = Fiber.new do #    Fiber.yield "fiber 1" #     'fiber 2' #   end puts fiber.resume #   puts 'context' puts fiber.resume #    

рдХреЛрдб "рдлрд╛рдЗрдмрд░ 1 рд╕рдВрджрд░реНрдн рдлрд╛рдЗрдмрд░ 2" рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред

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

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

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


рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреАрдЖрдИрдПрд▓ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
 a = 0 threads = [] 10.times do #  10  threads << Thread.new do #      100000.times { a+= 1 } # 100 000 end end threads.each(&:join) #     puts a #   

рдХреЛрдб рдПрдордЖрд░рдЖрдИ рдореЗрдВ 1,000,000 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛, рдФрд░ рдирд░рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ (100,000 рд╕реЗ 1,000,000) рд░реБрдмреА рдФрд░ рд░реВрдмрд┐рдирд┐рдпрд╕ рдореЗрдВред

рд░реВрдмреА рдореЗрдВ рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЬрд╝реВ рд╕рдВрд╕реНрдХрд░рдг
MRI (Matz рдХреА рд░реВрдмреА рджреБрднрд╛рд╖рд┐рдпрд╛) рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдпреБрдХреАрд╣рд┐рд░реЛ рдорд╛рддреНрд╕реБрдореЛрддреЛ рдХреА рдореБрдЦреНрдп рд░реВрдмреА рд╢рд╛рдЦрд╛ рд╣реИ, рдпрд╛ рдмрд╕, Matzред рд╕реАред рдореЗрдВ рд▓рд╛рдЧреВ рдЬрдм рд╡реЗ рдмрд╕ "рд░реВрдмреА" рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрд╕реНрдХрд░рдг 1.9 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдХрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ YARV (рдлрд┐рд░ рднреА рдПрдХ рдФрд░ рд░реВрдмреА рд╡реАрдПрдо) рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ред рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рддрдерд╛рдХрдерд┐рдд GIL (рдЧреНрд▓реЛрдмрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд▓реЙрдХ) рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Habr├й ( рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рд╛рде ) рдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ ред рд░реВрдмреА 2.0 рдпреВрдкреАрдбреА рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЕрдм рд╣реИ: рд░реВрдмреА 2.1 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд░реВрдмреА 2.1 рд╕реЗ рд╣рдо рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

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

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

MacRuby - рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдХреЗ рд░реВрдмрд┐рдХреЛрдЖ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред IOS рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, MacRuby - RubyMotion рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рд╣реИред

IronRuby рдПрдХ .NET рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЬреАрд╡рди рднрд░, рдХрднреА-рдХрднреА рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд┐рдХрд╛рд╕ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдУрдкрд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдмреА рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдХреБрдЫ рднреА рдмрдХрд╛рдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рди рдХрд░реЗрдВ, рдпрд╣ Node.js рдХреЗ рд▓рд┐рдП jRuby рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл рд░реВрдмреА рдореЗрдВ рдЖрдкрдХреЗ jQuery рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╛ рдХреЛрдб рдХреЛрдб рдХреЗ рддрд╣рдд Node.js. рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдереАрдо рдкрд░ рдПрдХ рдмрджрд▓рд╛рд╡ред

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

рдЖрдк MagLev рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг, рдпрд╣ рдХреНрд▓рд╛рдЙрдб рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджрд┐рд▓рдЪрд╕реНрдк рдорд░реНрдмреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рддреНрдЬрд╝ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд░реВрдмреА рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЖрд╢рд╛рдЬрдирдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо Arduino рдкрд░ рд░реВрдмреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдорд░реНрдмреА-рдЖрд░реНрдбрд┐рдиреЛ рдпрд╣ MobiRuby рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЦреИрд░, рдПрдХ рд╕реНрдиреИрдХ рдХреЗ рд▓рд┐рдП, KidsRuby , рдкреБрд░рд╛рдиреЗ рд▓реЛрдЧреЛ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред


рдпреБрдкреАрдбреА:
learnxinyminutes.com/docs/ruby рд░реВрдмреА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

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


All Articles