แแแแแชแแแ แงแแแแแก แแฎแแ 2020 แฌแแแก.
แแแ แแแแแก แแแแแฅแแแงแแแแแแแ
แแ แแ แแ แฌแแแก แแแแแแแแแแแจแ แแแ แกแแแ แซแแแแแแ แแแแฎแแแฌแ, แแแกแ แแ แแแแแ แแกแแแฅแขแ แแแคแแฅแ แแ แแ แแแแแกแแแฆแแ แ แแแแแแแแ แแแแก แแแฅแขแแ แ.
แแแฎแแ แฃแแ แแแ , แ แแ แแ แงแแแแแคแแ แก แกแแแแแแแแแแแก แแฃแแแแ แแ.
แแแกแฃแฎแแกแแแแแแแแแก แจแแแฆแฃแแแแก แแแแแชแฎแแแ
แแก แแ แแแฅแขแ แจแแแฃแจแแแแแฃแแแ แแฎแแแแ แแแแฃแแแแแแแ แแ แแ แแ แแขแแแแแ แแฅแแก แแกแแคแแแ แแแแแแแ แแแแแ แแแแแแแฃแ แ แแ แแแ แแแแ แแแแก แแแแแแก แกแคแแ แแจแ!
แแก แแแแแแแแ แแแ แแ แฃแแแ แฉแแแแแแแแก แกแขแแแแแ แขแแ, แ แแแแแกแแแแแช แฃแแแ แแกแฌแ แแคแแแแแก, แแ แแแฅแขแ แแ แแ แแก แแแแแแฃแ แ, แแแแ แแ แแแแแช แแแแแ แแแแ.
แแฎแแแ แจแแแแแแแแแ
แแ แแแฅแขแแก แกแแชแแแแก /mashc แคแแแแแแจแ แจแแแแซแแแแ แแฎแแแแ แจแแแแแแแแแแก แแฎแแแ แแแ แกแแ, แ แแแแแแช แแแฌแแ แแแแ Mash-แจแ (แแแแก แแแ แแแแ แแแ แกแแ).
แจแแแแแแแแแก แแฅแแก แแแแแก แแแแแ แแขแแ แ 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
แแแแแขแแแ/แกแแฎแแแแ แกแแแ แชแแแแ
แกแแฎแแแแ แกแแแ แชแ แกแฃแคแแ แฃแแแ แแแ แฉแแก!
แจแแกแแแแแแกแแ, แแแแ แฃแแแ แฃแแ แฃแแแแแงแแก แแก แจแแกแแซแแแแแแแ.
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 MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
แฉแแจแแแแแฃแแ แแแ
แแแขแแแชแแฃแ แแ, Mash-แก แจแแฃแซแแแ แแแแแแก แแแแแกแ แแแจแ, แ แแแแ แช แฉแแจแแแแแฃแแ แแ แแแ แแแแ แแแแก แแแ, แแฃแแก แแกแแแแกแ.
แแ แแแแแแแแกแแแแก Mash-แแก แแแแแงแแแแแแก แแแกแแฌแงแแแแ, แแฅแแแ แแ แช แแ แแญแแ แแแแแ แแ แแแฅแขแแก แแฌแงแแแ แแแแแ.
Mash-แก แแฅแแก Runtime Environment - แกแขแแแแ แแแคแฃแซแแแแฃแแ VM, แ แแแแแแช แจแแแแแแแแแ แ แแแแ แช แแแแแแแฃแ แ แแแแแแแแแแ แกแ แฃแแ API-แแ.
แงแแแแแคแแ แ แ แแช แแฅแแแ แแญแแ แแแแแ แแ แแก แแแแแแขแแ แแก แแ แแแฅแขแแก แแแแแแแแแแฃแแแแแจแ แแ แแแแแฎแแ แชแแแแแ แ แแแแแแแแ แแแ แ.
แแแแแ แแแ แฃแแ แฃแแแแแงแแคแก แคแฃแแฅแชแแแแแ แแแแก แฉแแจแแแแแฃแ แแแแ แแฃแจแแแแแกแแแแก.
แแแแแแ แแฃแแแ, แแแแแแแ แแ แแแกแแแ แแฎแแ แแก แแแแแแแแแแแแแแ แแ แแแ แจแแกแ แฃแแแแ แแ แแแแฅแแแแแแก.
แฉแแแ แแแฆแแแ แฉแแจแแแแแฃแ แแแแก, แ แแแแแกแแช แจแแฃแซแแแ แแแแแแงแแแแก แแแกแจแ แแแฌแแ แแแ แกแฎแแแแแกแฎแแ แฉแแ แฉแแแแแก แกแ แฃแแ แซแแแ.
Mash + JVM
แแแแแฌแงแ JVM-แแกแแแแก แแแแ แแแแแแแก แแแ แกแแแก แจแแแฃแจแแแแแ.
แจแแกแแซแแแ, N แแ แแแก แจแแแแแ, แแ แแแแแแ แแแกแขแ แแแแแฉแแแแก Habrรฉ-แแ.
แจแแแแแแแ
แแแแแ แแขแฃแแ แจแแแแแแแ แแ แแ แแก. แแก แแ แแก แจแแแแแแแแก แจแฃแแแแแฃแ แ แฌแแ แแแแแแแ.
แฌแแ แแแขแแแแแก แแแกแฃแ แแแแ แงแแแแแก 2020 แฌแแแก.
แฌแงแแ แ: www.habr.com