рдореЕрд╢ рд╣реА рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрд╣реЗ рдЬреА рд╕реНрд╡рддрдГрдЪ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ

рдореЕрд╢ рд╣реА рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрд╣реЗ рдЬреА рд╕реНрд╡рддрдГрдЪ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ

рдирд╡реАрди рд╡рд░реНрд╖ 2020 рдЪреНрдпрд╛ рд╕рд░реНрд╡рд╛рдВрдирд╛ рд╣рд╛рд░реНрджрд┐рдХ рд╢реБрднреЗрдЪреНрдЫрд╛.

рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд╢рдирд╛рдкрд╛рд╕реВрди рдЙрдкрд╡рд╛рд╕ рдореЕрд╢рд▓рд╛ рдЬрд╡рд│рдкрд╛рд╕ 1 рд╡рд░реНрд╖ рдЙрд▓рдЯреВрди рдЧреЗрд▓реЗ рдЖрд╣реЗ.

рдпрд╛ рд╡рд░реНрд╖рд╛рдд, рднрд╛рд╖реЗрдд рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╕реБрдзрд╛рд░рдгрд╛ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА, рддрд┐рдЪреНрдпрд╛ рдЕрдиреЗрдХ рдкреИрд▓реВрдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рд╛рдЪрд╛ рд╡реЗрдХреНрдЯрд░ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛.

рд╣реЗ рд╕рд░реНрд╡ рд╕рдорд╛рдЬрд╛рд╕реЛрдмрдд рд╢реЗрдЕрд░ рдХрд░рддрд╛рдирд╛ рдорд▓рд╛ рдЖрдирдВрдж рд╣реЛрдд рдЖрд╣реЗ.

рдЬрдмрд╛рдмрджрд╛рд░реА рдирд╛рдХрд╛рд░рдгреЗ

рд╣рд╛ рдкреНрд░рдХрд▓реНрдк рдХреЗрд╡рд│ рдЙрддреНрд╕рд╛рд╣рд╛рд╡рд░ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ рдбрд╛рдпрдиреЕрдорд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдВрдЪреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд рдЬрд╛рдЧрддрд┐рдХ рд╡рд░реНрдЪрд╕реНрд╡рд╛рдЪрд╛ рдЖрд╡ рдЖрдгрдд рдирд╛рд╣реА!

рдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдорд╛рдирдХ рдорд╛рдирд▓реЗ рдЬрд╛рдК рдирдпреЗ; рдкреНрд░рдХрд▓реНрдк рдЖрджрд░реНрд╢ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддрд░реАрд╣реА рддреЛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЖрд╣реЗ.

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├й рд╡рд░ рджрд┐рд╕реВрди рдпреЗрдИрд▓.

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдгрддреЗрд╣реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдгрд╛рдо рдирд╛рд╣реАрдд. рд╣реЗ рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреЗ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЖрд╣реЗ.
2020 рдЪреНрдпрд╛ рд╕рд░реНрд╡рд╛рдВрдирд╛ рд╢реБрднреЗрдЪреНрдЫрд╛.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛