рдирдпрд╛рдБ рд╡рд░реНрд╖ реирежреиреж рдХреЛ рд╕рдмреИрдорд╛ рд╢реБрднрдХрд╛рдордирд╛ред
рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХрд╛рд╢рди рдкрдЫрд┐
рдпрд╕ рд╡рд░реНрд╖рдХреЛ рджреМрдбрд╛рди, рднрд╛рд╖рд╛ рдзреЗрд░реИ рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдпрд╕рдХрд╛ рдзреЗрд░реИ рдкрдХреНрд╖рд╣рд░реВ рдорд╛рд░реНрдлрдд рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рдпреЛ рд░ рд╡рд┐рдХрд╛рд╕рдХреЛ рднреЗрдХреНрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдпреЛред
рдо рдпреЛ рд╕рдмреИ рд╕рдореБрджрд╛рдпрд╕рдБрдЧ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреБред
рддреНрдпрд╛рдЧ
рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ рдЙрддреНрд╕рд╛рд╣ рдорд╛ рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЛ рдХреНрд╖реЗрддреНрд░ рдорд╛ рд╡рд┐рд╢реНрд╡ рдкреНрд░рднреБрддреНрд╡ рдХреЛ рдвреЛрдВрдЧ рдЧрд░реНрджреИрди!
рдпрд╕ рд╡рд┐рдХрд╛рд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдкрджрдгреНрдбрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреБ рд╣реБрдБрджреИрди; рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрджрд░реНрд╢ рдЫреИрди, рддрд░ рдпреЛ рд╡рд┐рдХрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдЫред
рдирдпрд╛рдБ рдХрдореНрдкрд╛рдЗрд▓рд░
рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдгреНрдбрд╛рд░рдХреЛ /mashc рд╢рд╛рдЦрд╛рдорд╛, рддрдкрд╛рдЗрдБ рдХрдореНрдкрд╛рдЗрд▓рд░рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬреБрди рдореНрдпрд╛рд╕ (рднрд╛рд╖рд╛рдХреЛ рдкрд╣рд┐рд▓реЛ рд╕рдВрд╕реНрдХрд░рдг) рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред
рдХрдореНрдкрд╛рдЗрд▓рд░рд╕рдБрдЧ asm рд╕реВрдЪреАрдорд╛ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдЫ (рд╕реНрдЯреНрдпрд╛рдХ-рдЖрдзрд╛рд░рд┐рдд VM рдХреЛ рд▓рд╛рдЧрд┐ рдПрд╕реЗрдореНрдмрд▓рд░рдХреЛ рд▓рд╛рдЧрд┐)ред
рд╣рд╛рд▓ рдо Java (JDK 1.8) рдХреЛ рд▓рд╛рдЧрд┐ рдЬреЗрдирд░реЗрдЯрд░рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджреИрдЫреБред
рдХрдореНрдкрд╛рдЗрд▓рд░рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ рднрд╛рд╖рд╛рдХреЛ рдкрд╣рд┐рд▓реЛ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдкреВрд░рдХ рдмрдирд╛рдЙрдБрдЫред
рдирдпрд╛рдБ OOP
рднрд╛рд╖рд╛рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдорд╛, рдХрдХреНрд╖рд╛рд╣рд░реВрд╕рдБрдЧрдХреЛ рдХрд╛рдо рдЖрдВрд╢рд┐рдХ рд░реВрдкрдорд╛ рдкреБрди: рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫред
рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рд╣рд░реВ рд╡рд░реНрдЧ рдирд┐рдХрд╛рдпрдорд╛ рд░ рдмрд╛рд╣рд┐рд░ рджреБрд╡реИ рдШреЛрд╖рдгрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдХреНрд▓рд╛рд╕рдорд╛ рдЕрдм рд╕реНрдкрд╖реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЫ: initред
рдирдореВрдирд╛ рдХреЛрдб:
...
class MyClass:
private:
var a, b
public:
init(a, b):
$a ?= a
$b ?= b
end
func Foo():
return $a + $b
end
end
func MyClass::Bar(c):
return $a + $b + c
end
...
рдпрджрд┐ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдиреНрд╕ рднрдпреЛ рднрдиреЗ, рд╣рд╛рдореАрд╕рдБрдЧ рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдб рдХрд▓рд╣рд░реВ (рд╕реБрдкрд░) рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рдЫред
рдирдореВрдирд╛ рдХреЛрдб:
...
class MySecondClass(MyClass):
public:
var c
init(a, b, c):
super(a, b)
$c ?= c
end
func Bar():
super($c)
end
end
...
x ?= new MySecondClass(10, 20, 30)
println( x -> Bar() ) // 60
рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛ рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рдЧрддрд┐рд╢реАрд▓ рдЕрдзрд┐рд▓реЗрдЦрди:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ/рдирд╛рдорд╕реНрдерд╛рдирд╣рд░реВ
рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рдлрд╛ рд╣реБрдиреБрдкрд░реНрдЫ!
рддрджрдиреБрд╕рд╛рд░, рднрд╛рд╖рд╛рд▓реЗ рдпреЛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрдкрд░реНрдЫред
рдореНрдпрд╛рд╕рдорд╛, рдпрджрд┐ рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рд╕реНрдерд┐рд░ рдЫ рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдХреЛрдбрдХреЛ рдХреБрдиреИ рдкрдирд┐ рднрд╛рдЧрдмрд╛рдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдХрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдЙрджрд╛рд╣рд░рдг:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
рдпрд╕рд░реА рдмреЛрд▓рд╛рдЙрдБрджрд╛ рд╕реБрдкрд░ рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдареАрдХрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫред
рдЕрдкрд╡рд╛рджрд╣рд░реВ
рднрд╛рд╖рд╛рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдЙрдиреАрд╣рд░реВрд▓рд╛рдИ рдХрдХреНрд╖рд╛рд╣рд░реВ рдЬрд╕реНрддреИ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░рд┐рдиреНрдЫ:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
рдирдпрд╛рдБ enum
рдЕрдм рдЧрдгрдирд╛ рддрддреНрд╡рд╣рд░реВрд▓рд╛рдИ рд╕реНрдерд┐рд░ рдорд╛рди рддреЛрдХреНрди рд╕рдХрд┐рдиреНрдЫ:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
рдЗрдореНрдмреЗрдбреЗрдб рднрд╛рд╖рд╛
рд╕рдореНрднрд╛рд╡рд┐рдд рд░реВрдкрдорд╛, рдореНрдпрд╛рд╢рд▓реЗ рд▓реБрдЖ рдЬрд╕реНрддреИ рдПрдореНрдмреЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдХреЛ рд░реВрдкрдорд╛ рдЖрдлреНрдиреЛ рд╕реНрдерд╛рди рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдЫред
рдпреА рдЙрджреНрджреЗрд╢реНрдпрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдореНрдпрд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрдлреИрдВрд▓рд╛рдИ рднреЗрд▓рд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред
рдореНрдпрд╛рд╕рд╕рдБрдЧ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдЫ - рд╕реНрдЯреНрдпрд╛рдХ-рдЖрдзрд╛рд░рд┐рдд VM рдкреВрд░реНрдг API рдХреЛ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рд░реВрдкрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫред
рддрдкрд╛рдИрд▓реЗ рдЧрд░реНрдиреБ рдкрд░реНрдиреЗ рднрдиреЗрдХреЛ рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛рдорд╛ рдердкреНрдиреБ рд░ рдХреЗрд╣рд┐ рдХрд▓рд╣рд░реВ рдЧрд░реНрдиреБ рд╣реЛред
рднрд╛рд╖рд╛ рдЖрдлреИрдВрд▓реЗ рдПрдореНрдмреЗрдбреЗрдб рднрд╛рд╖рд╛рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рдПрдХреИ рд╕рдордпрдорд╛, рднрд╛рд╖рд╛ рд░ рддреЗрд╕реНрд░реЛ-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрд╕рдБрдЧ рд╕рдВрдпреЛрдЬрдирдорд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдБрджреИрдиред
рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдЗрдореНрдмреЗрдбреЗрдб рднрд╛рд╖рд╛ рдкрд╛рдЙрдБрдЫреМрдВ рдЬрд╕рд▓реЗ рдпрд╕рдорд╛ рд▓реЗрдЦрд┐рдПрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдлреНрд░реЗрдорд╡рд░реНрдХрд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╢рдХреНрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫред
рдореНрдпрд╛рд╢ + JVM
рдореИрд▓реЗ JVM рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрд╡рд╛рджрдХрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рдерд╛рд▓реЗрдВред
рд╣реБрдирд╕рдХреНрдЫ, N рд╕рдордп рдкрдЫрд┐, рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдкреЛрд╕реНрдЯ Habr├й рдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫред
рдкрд░рд┐рдгрд╛рдорд╣рд░реВ
рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЫреИрдирдиреНред рдпреЛ рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛред
реирежреиреж рдорд╛ рд╕рдмреИрд▓рд╛рдИ рд╢реБрднрдХрд╛рдордирд╛ред
рд╕реНрд░реЛрдд: www.habr.com