āĻŽā§āϝāĻžāĻļ āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž āϝāĻž āύāĻŋāĻœā§‡āχ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰ⧇

āĻŽā§āϝāĻžāĻļ āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž āϝāĻž āύāĻŋāĻœā§‡āχ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰ⧇

āύāϤ⧁āύ āĻŦāĻ›āϰ ⧍ā§Ļ⧍ā§Ļ-āĻāϰ āĻļ⧁āϭ⧇āĻšā§āĻ›āĻžāĨ¤

āĻĒā§āϰāĻĨāĻŽāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āĻĒāϰ āĻĨ⧇āϕ⧇ āωāĻĒāĻŦāĻžāϏ āĻŽā§āϝāĻžāĻļ⧇āϰ āĻĒāϰ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻžāϝāĻŧ āĻ āĻŋāĻ• ā§§ āĻŦāĻ›āϰ āϕ⧇āĻŸā§‡ āϗ⧇āϛ⧇āĨ¤

āĻāχ āĻŦāĻ›āϰ āϜ⧁āĻĄāĻŧ⧇ āĻ­āĻžāώāĻžāϟāĻŋāϰ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝ āωāĻ¨ā§āύāϤāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāϰ āĻ…āύ⧇āĻ• āĻĻāĻŋāĻ• āύāĻŋāϝāĻŧ⧇ āĻ—āĻ­ā§€āϰāĻ­āĻžāĻŦ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāϰ āωāĻ¨ā§āύāϝāĻŧāύ⧇āϰ āĻĻāĻŋāĻ•āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āφāĻŽāĻŋ āϏāĻŽā§āĻĒā§āϰāĻĻāĻžāϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āĻāχ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ­āĻžāĻ— āĻ•āϰ⧇ āύāĻŋāϤ⧇ āĻĒ⧇āϰ⧇ āφāύāĻ¨ā§āĻĻāĻŋāϤāĨ¤

āĻĻāĻžāϝāĻŧāĻŋāĻ¤ā§āĻŦ āĻ…āĻ¸ā§āĻŦā§€āĻ•āĻžāϰ

āĻāχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ‰ā§ŽāϏāĻžāĻš āĻĨ⧇āϕ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ āĻāĻŦāĻ‚ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŦāĻŋāĻļā§āĻŦ āφāϧāĻŋāĻĒāĻ¤ā§āϝ⧇āϰ āϕ⧋āύ⧋ āĻĻāĻžāĻŦāĻŋ āĻ•āϰ⧇ āύāĻž!

āĻāχ āωāĻ¨ā§āύāϝāĻŧāύāϕ⧇ āĻāĻŽāύ āϕ⧋āύ⧋ āĻŽāĻžāύāĻĻāĻŖā§āĻĄ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧ, āϝāĻž āĻ…āĻ°ā§āϜāύ⧇āϰ āϜāĻ¨ā§āϝ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ; āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āφāĻĻāĻ°ā§āĻļ āύāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻž āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“ āĻāϰ āωāĻ¨ā§āύāϝāĻŧāύ āϘāϟāϛ⧇āĨ¤

GitHub
āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ
āĻĢā§‹āϰāĻžāĻŽ

āύāϤ⧁āύ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ

āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ /mashc āĻŦā§āϰāĻžāĻžā§āĻšā§‡ āφāĻĒāύāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ, āϝ⧇āϟāĻŋ āĻŽā§āϝāĻžāĻļ (āĻ­āĻžāώāĻžāϟāĻŋāϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ) āĻĻāĻŋāϝāĻŧ⧇ āϞ⧇āĻ–āĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ⧇āϰ asm āϞāĻŋāĻ¸ā§āϟāĻŋāĻ‚-āĻ (āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻ­āĻŋāĻāĻŽ-āĻāϰ āϜāĻ¨ā§āϝ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻžāϰ⧇āϰ) āĻāĻ•āϟāĻŋ āϕ⧋āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟāϰ āφāϛ⧇āĨ¤
āφāĻŽāĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āϜāĻžāĻ­āĻžāϰ (āĻœā§‡āĻĄāĻŋāϕ⧇ ā§§.ā§Ž) āϜāĻ¨ā§āϝ āĻœā§‡āύāĻžāϰ⧇āϟāϰāϟāĻŋāϰ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāĻ›āĻŋāĨ¤

āĻ•āĻŽā§āĻĒāĻžāχāϞāĻžāϰ⧇āϰ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻ­āĻžāώāĻžāϟāĻŋāϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻžāϕ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰ āĻĒāϰāĻŋāĻĒā§‚āϰāĻ• āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

āύāϤ⧁āύ 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 MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

āĻāĻŽāĻŦ⧇āĻĄā§‡āĻĄ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž

āϏāĻŽā§āĻ­āĻžāĻŦā§āϝāĻ­āĻžāĻŦ⧇, āϞ⧁āϝāĻŧāĻž-āϰ āĻŽāϤ⧋ āĻŽā§āϝāĻžāĻļāĻ“ āĻāĻ•āϟāĻŋ āĻāĻŽāĻŦ⧇āĻĄā§‡āĻĄ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻœā§‡āϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻžāύ āĻ•āϰ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāχāϏāĻŦ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻŽā§āϝāĻžāĻļ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰāĻžāϰāĻ“ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχāĨ¤

āĻŽā§āϝāĻžāĻļ⧇āϰ āĻāĻ•āϟāĻŋ āϰāĻžāύāϟāĻžāχāĻŽ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϰāϝāĻŧ⧇āĻ›ā§‡â€”āϝāĻž āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŖāĻžāĻ™ā§āĻ— āĻāĻĒāĻŋāφāχ āϏāĻš āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ•-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ­āĻŋāĻāĻŽāĨ¤

āφāĻĒāύāĻžāϕ⧇ āĻļ⧁āϧ⧁ āĻāϟāĻŋāϕ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋāϤ⧇ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻ­āĻžāώāĻžāϟāĻŋ āύāĻŋāĻœā§‡āχ āĻāĻ•āϟāĻŋ āĻāĻŽāĻŦ⧇āĻĄā§‡āĻĄ āĻ­āĻžāώāĻž āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤
āĻāĻ•āχ āϏāĻžāĻĨ⧇, āĻ­āĻžāώāĻž āĻāĻŦāĻ‚ āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āϟāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻŦā§āϝāĻžāĻšāϤ āĻšāϝāĻŧ āύāĻžāĨ¤
āφāĻŽāϰāĻž āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻāĻŽāĻŦ⧇āĻĄā§‡āĻĄ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ āĻĒāĻžāχ, āϝāĻž āĻāϤ⧇ āϞ⧇āĻ–āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āϕ⧇āϰ āĻĒā§‚āĻ°ā§āĻŖ āĻļāĻ•ā§āϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻŽā§āϝāĻžāĻļ + āĻœā§‡āĻ­āĻŋāĻāĻŽ

JVM-āĻāϰ āϜāĻ¨ā§āϝ āĻŸā§āϰāĻžāĻ¨ā§āϏāϞ⧇āϟāϰ⧇āϰ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĻ›āĻŋāĨ¤
āϏāĻŽā§āĻ­āĻŦāϤ, āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ āĻĒāϰ Habr-āĻ āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻĒā§‹āĻ¸ā§āϟ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāĻŦ⧇āĨ¤

āĻĢāϞāĻžāĻĢāϞ

āϕ⧋āύ⧋ āϏ⧁āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻĢāϞāĻžāĻĢāϞ āύ⧇āχāĨ¤ āĻāϟāĻŋ āĻĢāϞāĻžāĻĢāϞ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āĻ¨ā§āϤāĻ°ā§āĻŦāĻ°ā§āϤ⧀āĻ•āĻžāϞ⧀āύ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻžāĨ¤
⧍ā§Ļ⧍ā§Ļ āϏāĻžāϞ⧇ āϏāĻ•āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻļ⧁āĻ­āĻ•āĻžāĻŽāύāĻžāĨ¤

āωāĻ¤ā§āϏ: www.habr.com

āĻāĻ•āϟāĻŋ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϜ⧁āĻĄāĻŧ⧁āύ