Mash αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž…αž„αž€αŸ’αžšαž„αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹

Mash αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž…αž„αž€αŸ’αžšαž„αžŠαŸ„αž™αžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹

αžŸαž½αžŸαŸ’αžαžΈαž†αŸ’αž“αžΆαŸ†αžαŸ’αž˜αžΈ αž†αŸ’αž“αžΆαŸ†αžŸαž€αž› ្០្០ αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆαŸ”

αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž›αžΎαž€αžŠαŸ†αž”αžΌαž„ αž”αŸ’αžšαž€αžΆαžŸ αžŸαŸ’αž‘αžΎαžšαžαŸ‚ 1 αž†αŸ’αž“αžΆαŸ†αž”αžΆαž“αž€αž“αŸ’αž›αž„αž•αž»αžαž‘αŸ…αž’αŸ†αž–αžΈ Mash αŸ”

αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž†αŸ’αž“αžΆαŸ†αž“αŸαŸ‡ αž—αžΆαžŸαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αž›αž˜αŸ’αž’αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„ αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‡αžΆαž…αŸ’αžšαžΎαž“αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αž·αžαž‚αžΌαžš αž αžΎαž™αžœαŸ‰αž·αž…αž‘αŸαžšαž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ”

αžαŸ’αž‰αž»αŸ†αžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αžŸαž αž‚αž˜αž“αŸαŸ”

αž€αžΆαžšαž˜αž·αž“αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœ

αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžαŸ‚αž›αžΎαž—αžΆαž–αžšαžΈαž€αžšαžΆαž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž“αž·αž„αž˜αž·αž“αž’αŸ’αžœαžΎαž–αž»αžαž‡αžΆαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αž·αž—αž–αž›αŸ„αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸƒαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž˜αžœαž“αŸ’αž!

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸαŸ‡αž˜αž·αž“αž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžαž·αžαžαŸ†αž“αŸ„αŸ‡αž‘αŸ αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž˜αž·αž“αžŸαž˜αžŸαŸ’αžšαž”αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž“αŸ…αžαŸ‚αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαŸ”

GitHub
αž‚αŸαž αž‘αŸ†αž–αŸαžš
αžœαŸαž‘αž·αž€αžΆ

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αž€αŸ’αžšαž„αžαŸ’αž˜αžΈαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆ /mashc αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„ αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αž€αŸ’αžšαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ Mash (αž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αž“αŸƒαž—αžΆαžŸαžΆ)αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αž€αŸ’αžšαž„αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ asm (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ assembler αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ VM αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ stack)αŸ”
αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž”αž„αŸ’αž€αžΎαžαž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž›αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 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

αž€αž‰αŸ’αž…αž”αŸ‹/αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡

αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αžšαžΌαžœαžαŸ‚αžŸαŸ’αž’αžΆαž!
αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž—αžΆαžŸαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αž•αŸ’αžαž›αŸ‹αž±αž€αžΆαžŸαž“αŸαŸ‡αŸ”
αž“αŸ…αž€αŸ’αž“αž»αž„ Mash αž”αŸ’αžšαžŸαž·αž“αž”αžΎ class method αž‚αžΊαž‹αž·αžαž·αžœαž“αŸ’αž αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αŸ…αžŠαŸ„αž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž–αžΈαž•αŸ’αž“αŸ‚αž€αžŽαžΆαž˜αž½αž™αž“αŸƒαž€αžΌαžŠαŸ”

αž§αž‘αžΆαž αžšαžŽαŸ:

...
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

αž—αžΆαžŸαžΆαž”αž„αŸ’αž€αž”αŸ‹

αžŸαž€αŸ’αžαžΆαž“αž»αž–αž› Mash αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹ αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„ Lua αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎ Mash αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž‘αŸαŸ”

Mash αž˜αžΆαž“ Runtime Environment - VM αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‡αž„αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαžΆαž˜αžœαž“αŸ’αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„ API αž–αŸαž‰αž›αŸαž‰αŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž‘αŸ…αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„ αž αžΎαž™αž’αŸ’αžœαžΎαž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘αž–αžΈαžšαž”αžΈαžŠαž„αŸ”

αž—αžΆαžŸαžΆαžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž˜αž»αžαž„αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž—αžΆαžŸαžΆαž”αž„αŸ’αž€αž”αŸ‹αŸ”
αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž—αžΆαžŸαžΆ αž“αž·αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αž‘αŸαŸ”
αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž—αžΆαžŸαžΆαž”αž„αŸ’αž€αž”αŸ‹αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžΎαžαžΆαž˜αž–αž›αž–αŸαž‰αž›αŸαž‰αž“αŸƒαž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž•αŸ’αžŸαŸαž„αŸ—αžŠαŸ‚αž›αž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ”

Mash + JVM

αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž„αŸ’αž€αžΎαžαž€αŸ†αžŽαŸ‚αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ JVM αŸ”
αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžšαž™αŸˆαž–αŸαž› N αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž›αžΎHabreαŸ”

αž›αž‘αŸ’αž’αž•αž›

αž˜αž·αž“αž˜αžΆαž“αž›αž‘αŸ’αž’αž•αž›αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‘αŸαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžαŸ†αžŽαžΆαž„αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αž“αŸƒαž›αž‘αŸ’αž’αž•αž›αŸ”
αžŸαžΌαž˜αžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† αŸ’αŸ αŸ’αŸ αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹