เจฎเฉˆเจธเจผ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพ เจนเฉˆ เจœเฉ‹ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจฆเฉ€ เจนเฉˆ

เจฎเฉˆเจธเจผ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพ เจนเฉˆ เจœเฉ‹ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจฆเฉ€ เจนเฉˆ

เจจเจตเฉ‡เจ‚ เจธเจพเจฒ 2020 เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจผเฉเจญเจ•เจพเจฎเจจเจพเจตเจพเจ‚เฅค

เจชเจนเจฟเจฒเฉ€ เจฆเฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฆเฉ‡ เจฌเจพเจ…เจฆ เจชเฉ‹เจธเจŸ เจฎเฉˆเจธเจผ เจจเฉ‚เฉฐ เจฒเจ—เจญเจ— 1 เจธเจพเจฒ เจฌเฉ€เจค เจ—เจฟเจ† เจนเฉˆเฅค

เจ‡เจธ เจธเจพเจฒ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจธเฉเจงเจพเจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจ‡เจธเจฆเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจชเจนเจฟเจฒเฉ‚เจ†เจ‚ เจจเฉ‚เฉฐ เจตเจฟเจšเจพเจฐเจฟเจ† เจ—เจฟเจ† เจธเฉ€ เจ…เจคเฉ‡ เจตเจฟเจ•เจพเจธ เจฆเจพ เจตเฉˆเจ•เจŸเจฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจธเจญ เจ•เจฎเจฟเจŠเจจเจฟเจŸเฉ€ เจจเจพเจฒ เจธเจพเจ‚เจเจพ เจ•เจฐเจ•เฉ‡ เจ–เฉเจธเจผเฉ€ เจนเฉ‹ เจฐเจนเฉ€ เจนเฉˆเฅค

เจฌเฉ‡เจฆเจพเจ…เจตเจพ

เจ‡เจน เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเจฟเจฐเจซ เจ‰เจคเจธเจผเจพเจน 'เจคเฉ‡ เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฆเฉ‡ เจ–เฉ‡เจคเจฐ เจตเจฟเฉฑเจš เจตเจฟเจธเจผเจต เจฆเฉ‡ เจฆเจฌเจฆเจฌเฉ‡ เจฆเจพ เจฆเจฟเจ–เจพเจตเจพ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ!

เจ‡เจธ เจตเจฟเจ•เจพเจธ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐ เจตเจœเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจฎเฉฐเจจเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจœเจฟเจธ เจฒเจˆ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆ; เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ†เจฆเจฐเจธเจผ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจซเจฟเจฐ เจตเฉ€ เจ‡เจน เจตเจฟเจ•เจพเจธ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ.

GitHub
เจฆเฉ€ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ
เจซเฉ‹เจฐเจฎ

เจจเจตเจพเจ‚ เจ•เฉฐเจชเจพเจˆเจฒเจฐ

เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฆเฉ€ /mashc เจธเจผเจพเจ–เจพ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฆเจพ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเฉ‹ Mash (เจญเจพเจธเจผเจพ เจฆเจพ เจชเจนเจฟเจฒเจพ เจธเฉฐเจธเจ•เจฐเจฃ) เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค

เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจ•เฉ‹เจฒ asm เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เฉ‹เจก เจœเจจเจฐเฉ‡เจŸเจฐ เจนเฉˆ (เจ‡เฉฑเจ• เจธเจŸเฉˆเจ•-เจ…เจงเจพเจฐเจฟเจค VM เจฒเจˆ เจ…เจธเฉˆเจ‚เจฌเจฒเจฐ เจฒเจˆ)เฅค
เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ Java (JDK 1.8) เจฒเจˆ เจœเจจเจฐเฉ‡เจŸเจฐ เจฆเจพ เจ‡เฉฑเจ• เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฟเจ•เจธเจค เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚.

เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฆเจพ เจจเจตเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจญเจพเจธเจผเจพ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ€ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจฆเจพ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉ‚เจฐเจ• เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจจเจตเจพเจ‚ เจ“.เจ“.เจชเฉ€

เจญเจพเจธเจผเจพ เจฆเฉ‡ เจจเจตเฉ‡เจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฟเฉฑเจš, เจ•เจฒเจพเจธเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจกเจฟเจœเจผเจพเจ‡เจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค
เจ•เจฒเจพเจธ เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจฒเจพเจธ เจฌเจพเจกเฉ€ เจตเจฟเฉฑเจš เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจฌเจพเจนเจฐ เจ˜เฉ‹เจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค
เจ•เจฒเจพเจธ เจตเจฟเฉฑเจš เจนเฉเจฃ เจ‡เฉฑเจ• เจธเจชเจธเจผเจŸ เจ•เฉฐเจธเจŸเจฐเจ•เจŸเจฐ เจนเฉˆ: 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

เจชเฉˆเจ•เฉ‡เจœ/เจจเฉ‡เจฎเจธเจชเฉ‡เจธ

เจจเจพเจฎ-เจธเจฅเจพเจจ เจธเจพเจซเจผ เจฐเจนเจฟเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ!
เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจ‡เจน เจฎเฉŒเจ•เจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ.
Mash เจตเจฟเฉฑเจš, เจœเฉ‡เจ•เจฐ เจ‡เฉฑเจ• เจ•เจฒเจพเจธ เจตเจฟเจงเฉ€ เจธเจฅเจฟเจฐ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ•เฉ‹เจก เจฆเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจนเจฟเฉฑเจธเฉ‡ เจคเฉ‹เจ‚ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจขเฉฐเจ— เจจเจพเจฒ เจ•เจพเจฒ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ‰เจฆเจพเจนเจฐเจจ:

...
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 เจฒเจˆ เจ…เจจเฉเจตเจพเจฆเจ• เจฆเจพ เจ‡เฉฑเจ• เจธเฉฐเจธเจ•เจฐเจฃ เจตเจฟเจ•เจธเจฟเจค เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพเฅค
เจธเจผเจพเจ‡เจฆ, N เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจฌเจพเจ…เจฆ, เจ‡เจธ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจ‡เฉฑเจ• เจชเฉ‹เจธเจŸ Habrรฉ' เจคเฉ‡ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€.

เจจเจคเฉ€เจœเฉ‡

เจ•เฉ‹เจˆ เจ–เจพเจธ เจจเจคเฉ€เจœเฉ‡ เจจเจนเฉ€เจ‚ เจนเจจเฅค เจ‡เจน เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเจฟเจšเจ•เจพเจฐเจฒเฉ€ เจจเฉเจฎเจพเจ‡เฉฐเจฆเจ—เฉ€ เจนเฉˆเฅค
2020 เจตเจฟเฉฑเจš เจธเจพเจฐเจฟเจ†เจ‚ เจฒเจˆ เจธเจผเฉเจญเจ•เจพเจฎเจจเจพเจตเจพเจ‚เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹