рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ Haxe 4.0 рдХреЛ рд░рд┐рд▓реАрдЬ

рдЙрдкрд▓рдмреНрдз рдЫ рдЯреВрд▓рдХрд┐рдЯ рд░рд┐рд▓реАрдЬ Haxe 4.0, рдЬрд╕рд▓реЗ рдмрд▓рд┐рдпреЛ рдЯрд╛рдЗрдкрд┐рдЩ, рдХреНрд░рд╕-рдХрдореНрдкрд╛рдЗрд▓рд░ рд░ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рд╕рд╛рде рдЙрд╣реА рдирд╛рдордХреЛ рдмрд╣реБ-рдкреНрд░рддрд┐рдорд╛рди рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ C++, HashLink/C, JavaScript, C#, Java, PHP, Python рд░ Lua рдорд╛ рдЕрдиреБрд╡рд╛рдж рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ, рд╕рд╛рдереИ JVM, HashLink/JIT, Flash рд░ Neko bytecode рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖рд┐рдд рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рдиреЗрдЯрд┐рдн рдХреНрд╖рдорддрд╛рд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪрдХреЛ рд╕рд╛рде рд╕рдВрдХрд▓рди рдЧрд░реНрджрдЫред рдХрдореНрдкрд╛рдЗрд▓рд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд GPLv2 рдЗрдЬрд╛рдЬрддрдкрддреНрд░ рдЕрдиреНрддрд░реНрдЧрдд, рд░ Haxe рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдпреЛ рдиреЗрдХреЛ MIT рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрддред

рднрд╛рд╖рд╛ рдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрдиреНрдореБрдЦ рдмрд▓рд┐рдпреЛ рдЯрд╛рдЗрдкрд┐рдЩ рд╕рдВрдЧред рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ, рд╕рд╛рдорд╛рдиреНрдп рд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рд╕рдорд░реНрдерд┐рдд рдЫрдиреНред
Haxe рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ ECMAScript рдХреЛ рдирдЬрд┐рдХ рдЫ рд░ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрджрдЫ рдпрд╕рдХреЛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЬрд╕реНрддреИ рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдЩ, рдЕрдЯреЛрдЯрд╛рдЗрдк рдЕрдиреБрдорд╛рди, рдврд╛рдБрдЪрд╛ рдорд┐рд▓рд╛рди, рдЬреЗрдиреЗрд░рд┐рдХ, рд▓реВрдкрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐-рдЖрдзрд╛рд░рд┐рдд, AST рдореНрдпрд╛рдХреНрд░реЛ, GADT (рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдмреАрдЬрдЧрдгрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ), рдЕрдореВрд░реНрдд рдкреНрд░рдХрд╛рд░рд╣рд░реВ, рдмреЗрдирд╛рдореА рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ, рд╕рд░рд▓реАрдХреГрдд рдПрд░реЗ рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВ, рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ, рдлрд┐рд▓реНрдбрдорд╛ рдореЗрдЯрд╛рдбрд╛рдЯрд╛рдбрд╛рдЯрд╛ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдиреЗред , рд╡рд░реНрдЧ рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рд╕реНрдЯреНрд░рд┐рдЩ рдЗрдиреНрдЯрд░рдкреЛрд▓реЗрд╕рди ('My name is $name'), рдкреНрд░рдХрд╛рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ ("new MainтА╣StringтА║('foo')"), рд░ рдЕрдЭреИ рдзреЗрд░реИ.

рдХрдХреНрд╖рд╛ рдкрд░реАрдХреНрд╖рдг {
рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░реНрдп рдореБрдЦреНрдп() {
var рдорд╛рдирд┐рд╕рд╣рд░реВ = [
"рдПрд▓рд┐рдЬрд╛рдмреЗрде" => "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ",
"рдЬреЛрдПрд▓" => "рдбрд┐рдЬрд╛рдЗрди"
];

(people.keys рдорд╛ рдирд╛рдо ()) {
var рдХрд╛рдо = рдорд╛рдирд┐рд╕рд╣рд░реВ [рдирд╛рдо];
рдЯреНрд░реЗрд╕('$рдирд╛рдорд▓реЗ $рдЬрдм рдЬреАрд╡рд┐рдХреЛрдкрд╛рд░реНрдЬрди рдЧрд░реНрдЫ!');
}
}
}

рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░рд╣рд░реВ рд╕рдВрд╕реНрдХрд░рдг рек.реж:

  • "String->Int->Bool" рдХреЛ рд╕рдЯреНрдЯрд╛ "(рдирд╛рдо:рд╕реНрдЯреНрд░рд┐рдЩ, рдЙрдореЗрд░:Int)->Bool" рд╡рд╛ "(String, Int)->Bool" рдкреНрд░рдХрд╛рд░реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ред
  • рдПрд░реЛ рдкреНрд░рдХрд╛рд░реНрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ "(a, b) -> a + b" рдХреЛ рд╕рдЯреНрдЯрд╛ "function(a, b) рд░рд┐рдЯрд░реНрди a + b" рд╣реЛред
  • рд╢реВрдиреНрдп рдорд╛рдирд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ (рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛, рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд╖реЗрддреНрд░рд╣рд░реВ, рд╡рд░реНрдЧрд╣рд░реВ рд╡рд╛ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдкрдорд╛ рд╕рдХреНрд╖рдо)ред
  • "рдЕрдиреНрддрд┐рдо" рдХреБрдЮреНрдЬреА рд╢рдмреНрдж рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реНрдерд╛рдиреАрдп рдЪрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред "рдЕрдиреНрддрд┐рдо" рд▓рд╛рдИ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдиреНрд╕рджреНрд╡рд╛рд░рд╛ рдУрднрд░рд░рд╛рдЗрдб рд╣реБрдирдмрд╛рдЯ рд░реЛрдХреНрди рд░ рдЗрдирд╣реЗрд░рд┐рдЯ рдЧрд░реНрди рдирд╕рдХрд┐рдиреЗ рд╡рд░реНрдЧ/рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
  • рд╕рдорд░реНрдерди рдиреЗрдХреЛ рдмрд╛рд╣реЗрдХ рд╕рдмреИ рд╕рдВрдХрд▓рди рд▓рдХреНрд╖реНрдпрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ "рд╕реНрдЯреНрд░рд┐рдЩ" рдХреЛ рд▓рд╛рдЧрд┐ рдпреБрдирд┐рдХреЛрдб рдорд╛рдирдХред
  • рдмрд┐рд▓реНрдЯ-рдЗрди рджреЛрднрд╛рд╖реЗ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рдкреБрди: рд▓реЗрдЦрд┐рдПрдХреЛ, рдЬреБрди рдЕрдм рдирд╛рдо рдЕрдиреНрддрд░реНрдЧрдд рдЖрдЙрдБрдЫ рдЗрднрд▓ред рдирдпрд╛рдБ рдЕрдиреБрд╡рд╛рджрдХрд▓рд╛рдИ рдзрдиреНрдпрд╡рд╛рдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░ рдореНрдпрд╛рдХреНрд░реЛрд╣рд░реВ рдзреЗрд░реИ рдЫрд┐рдЯреЛ рдЪрд▓реНрдЫрдиреНред рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдбрд┐рдмрдЧрд┐рдЩ рдореЛрдб рд╕рдорд░реНрдерд┐рдд рдЫред
  • рд╕рдВрдХрд▓рдирдХрд╛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА (рд▓рдХреНрд╖реНрдп) рд╣реНрдпрд╛рд╕рд▓рд┐рдЩреНрдХ - Haxe рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд░рдирдЯрд╛рдЗрдо, JIT рд╡рд╛ C рдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рдЗрдЯрдХреЛрдбрдорд╛ рд╕рдВрдХрд▓рдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдиреЗ, C рд╕рдБрдЧ рд╕рдЬрд┐рд▓реЛ рдПрдХреАрдХрд░рдг, рд╕рд╛рдереИ рдирд┐рдореНрди-рд╕реНрддрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рд░ рд╕реВрдЪрдХрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдЫред
  • рдирдпрд╛рдБ JVM рд▓рдХреНрд╖реНрдп - рдЬрд╛рднрд╛рдорд╛ рд▓рдХреНрд╖рд┐рдд рдЧрд░реНрджрд╛ "-D jvm" рдЭрдгреНрдбрд╛ рдердкреЗрд░ рдЬрд╛рднрд╛ рдХреЛрдб рд╕рдВрдХрд▓рди рдЪрд░рдг рдЫреЛрдбреЗрд░ jvm рдмрд╛рдЗрдЯрдХреЛрдб рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
  • рдХрд╛рд░реНрдпрд╣рд░реВ рд╡рд╛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдиреЗ рдмрд┐рдиреНрджреБрдорд╛ рдЗрдирд▓рд╛рдЗрди-рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛, рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рддреНрдпрд╕реНрддрд╛ рд░реВрдкрдорд╛ рдШреЛрд╖рд┐рдд рдирдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред
  • рд╕рдорд╛рд╡реЗрд╢реА рд╕рдореНрднрд╛рд╡рдирд╛ рд╕реНрдерд┐рд░ рд╡рд┐рд╕реНрддрд╛рд░ "@:using(path.ToExtension)" рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рдХрд╛рд░ (рдЬрд╕реНрддреИ "enum") рдШреЛрд╖рдгрд╛ рдЧрд░реНрджрд╛ред
  • рд╕рд╛рд░ рдкреНрд░рдХрд╛рд░рд╣рд░реВрд▓реЗ рдЕрдм "obj.foo = bar" рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рдкреБрди: рд▓реЛрдб рдЧрд░реНрди "@:op(ab)" рдЕрдкрд░реЗрдЯрд░рдХреЛ "рд╕реЗрдЯ" рд╕рдВрд╕реНрдХрд░рдгрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред
  • "рдХрд╛ рд▓рд╛рдЧрд┐" рд▓реБрдк рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рд▓реЗ рдЕрдм рдХреБрдЮреНрдЬреА-рдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ: "рдХрд╛ рд▓рд╛рдЧрд┐ (рдХреБрдЮреНрдЬреА => рд╕рдЩреНрдХрд▓рдирдорд╛ рдорд╛рди) {}"ред
  • рдПрдХреНрд╕рдПрдордПрд▓-рдЬрд╕реНрддреЛ рдорд╛рд░реНрдХрдЕрдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди: "var a = тА╣hi/тА║;"ред рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рд╕реБрд╡рд┐рдзрд╛ рдореНрдпрд╛рдХреНрд░реЛрд╕рдБрдЧ рдкрд╛рд░реНрд╕рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдЙрдкрд▓рдмреНрдз рдЫ рд░ рдбрд┐рдЬрд╛рдЗрди рдЪрд░рдгрдорд╛ рдЫред
  • рдмреЗрдирд╛рдореА рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВрдХреЛ "рдкреВрд░реНрдг" рд╕рдЩреНрдХреЗрддрдорд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛ: "{ var ?f:Int; }" (рдЫреЛрдЯреЛ "{?f:Int }" рдХреЛ рд╡рд┐рдХрд▓реНрдк)ред
  • Enum рдорд╛рдирд╣рд░реВ рдЕрдм рдкреНрд░рдХрд╛рд░реНрдп рддрд░реНрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреН: "function fooтА╣TтА║(option:OptionтА╣TтА║ = None)"ред
  • "enum abstract Name(BasicType) {}" рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рд▓рд╛рдИ рдЕрдм "enum" рдорд╛ "@:" рдЙрдкрд╕рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред
  • рдЕрдореВрд░реНрдд рдЧрдгрдирд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рдд: рдирдореНрдмрд░рд┐рдЩ:

    enum abstract Foo(Int) {
    var A; // реж
    var B; // рез
    }
    enum abstract Bar(String) {
    var A; // "рдП"
    var B; // "B"
    }

  • "рдмрд╛рд╣реНрдп" рдХреБрдЮреНрдЬреА рд╢рдмреНрджрд▓рд╛рдИ рдЕрдм "@:" рдЙрдкрд╕рд░реНрдЧрдХреЛ рдкреНрд░рдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред
  • рд╡рд┐рдХрд▓реНрдк рд╣рдЯрд╛рдЗрдпреЛ"рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВ рдорд╛рд░реНрдлрдд рдХрдХреНрд╖рд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдЧрддрд┐рд╢реАрд▓"ред рдмрд╛рд╣реНрдп рдХрдХреНрд╖рд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд╛ рд╕рд╛рд░ рдкреНрд░рдХрд╛рд░рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рд░реНрдлрдд рдЙрдкрд▓рдмреНрдз рдЫред
  • рдкреНрд░рдХрд╛рд░ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрдирдХрд╛ рд▓рд╛рдЧрд┐ "A рд░ B" рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдердкрд┐рдпреЛ, рдЬреБрди рд╣рд╛рд▓ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрд░рдЪрдирд╛ рд░ рдкреНрд░рдХрд╛рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдЕрд╡рд░реЛрдзрд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫред рдкреБрд░рд╛рдиреЛ рдмрд╛рдзрд╛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рд╣рдЯрд╛рдЗрдпреЛред
  • рдЦрд╛рд▓реА "рдирдХреНрд╕рд╛" рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ "var map:MapтА╣Int, StringтА║ = [];" рдорд╛рд░реНрдлрдд рдЙрдкрд▓рдмреНрдз рдЫред рдПрд░реЗ рдЬрд╕реНрддреИред
  • рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ "haxe.ds.ReadOnlyArray" рдердкрд┐рдпреЛред
  • рдореЗрдЯрд╛рдбреЗрдЯрд╛рдорд╛ рдЕрдм рдиреЗрдорд╕реНрдкреЗрд╕ (тАЬ@:prefix.name function() {тАж}тАЭ) рд╣реБрди рд╕рдХреНрдЫред рддреНрдпрд╕реНрддреИ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдВрдЧ: "#if (some.flag ... #end"ред
  • IDEs рдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рд╕реЗрд╡рд╛ рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдпреЛ VSCode рдХреЛ рд▓рд╛рдЧреА рдкреНрд▓рдЧрдЗрди.
  • рд╡реЗрдм API рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдмрд╛рд╣реНрдп рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВ (рдмрд╛рд╣реНрдп) рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдпреЛ рд░ рдЫреБрдЯреЗрдХрд╛рд╣рд░реВ рдердкрд┐рдпреЛред

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди