рдореНрдпрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд╣реЛ рдЬрд╕рд▓реЗ рдЖрдлреИрдВ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ

рдореНрдпрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд╣реЛ рдЬрд╕рд▓реЗ рдЖрдлреИрдВ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ

рдирдпрд╛рдБ рд╡рд░реНрд╖ реирежреиреж рдХреЛ рд╕рдмреИрдорд╛ рд╢реБрднрдХрд╛рдордирд╛ред

рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХрд╛рд╢рди рдкрдЫрд┐ рдкреЛрд╕реНрдЯ рдореНрдпрд╛рд╕ рднрдПрдХреЛ рдЭрдгреНрдбреИ рез рд╡рд░реНрд╖ рдмрд┐рддрд┐рд╕рдХреЗрдХреЛ рдЫ ред

рдпрд╕ рд╡рд░реНрд╖рдХреЛ рджреМрдбрд╛рди, рднрд╛рд╖рд╛ рдзреЗрд░реИ рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдпрд╕рдХрд╛ рдзреЗрд░реИ рдкрдХреНрд╖рд╣рд░реВ рдорд╛рд░реНрдлрдд рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рдпреЛ рд░ рд╡рд┐рдХрд╛рд╕рдХреЛ рднреЗрдХреНрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдпреЛред

рдо рдпреЛ рд╕рдмреИ рд╕рдореБрджрд╛рдпрд╕рдБрдЧ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреБред

рддреНрдпрд╛рдЧ

рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ рдЙрддреНрд╕рд╛рд╣ рдорд╛ рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЛ рдХреНрд╖реЗрддреНрд░ рдорд╛ рд╡рд┐рд╢реНрд╡ рдкреНрд░рднреБрддреНрд╡ рдХреЛ рдвреЛрдВрдЧ рдЧрд░реНрджреИрди!

рдпрд╕ рд╡рд┐рдХрд╛рд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдкрджрдгреНрдбрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреБ рд╣реБрдБрджреИрди; рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрджрд░реНрд╢ рдЫреИрди, рддрд░ рдпреЛ рд╡рд┐рдХрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдЫред

GitHub
рд╡реЗрдмрд╕рд╛рдЗрдЯ
рдордВрдЪ

рдирдпрд╛рдБ рдХрдореНрдкрд╛рдЗрд▓рд░

рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдгреНрдбрд╛рд░рдХреЛ /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

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