ืฉืืื ืืืืื ืืฉื ื ืืืืฉื 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 ืืืื ืืืฆืื ืืช ืื ืืฉื ืฉืื ืืฉืคืช ืชืื ืืช ืืฉืืืฆืช, ืืืืื ื-Lua.
ืืื ืืืชืืื ืืืฉืชืืฉ ื-Mash ืืืืจืืช ืืื, ืืื ื ืฆืจืื ืืคืืื ืืืจืืื ืืช ืืคืจืืืงื ืืขืฆืื.
ื-Mash ืืฉ Runtime Environment - VM ืืืืกืก ืืืกื ืืช ืืืืืจ ืืกืคืจืืื ืืื ืืืช ืขื API ืืื.
ืื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืืืกืืฃ ืืืชื ืืชืืืช ืืคืจืืืงื ืืืืฆืข ืืื ืฉืืืืช.
ืืฉืคื ืขืฆืื ืืกืคืงืช ืคืื ืงืฆืืื ืืืืช ืืขืืืื ืืฉืคื ืืฉืืืฆืช.
ืืื ืขื ืืืช, ืืืืฆืืขืื ืืฉืืืื ืขื ืกืคืจืืืช ืฉืคื ืืฆื ืฉืืืฉื ืืื ื ืืืฉืคืขืื.
ืื ื ืืงืืืื ืฉืคื ืืฉืืืฆืช ืฉืืืืื ืืืฉืชืืฉ ืืืืื ืืขืืฆืื ืฉื ืืกืืจืืช ืฉืื ืืช ืืืชืืืืช ืื.
ืืืฉ + JVM
ืืชืืืชื ืืคืชื ืืจืกื ืฉื ืืืชืจืื ืขืืืจ ื-JVM.
ืืืื, ืืืืจ N ืคืจืง ืืื, ืคืืกื ืื ืืฉื ืื ืืืคืืข ื-Habrรฉ.
ืชืืฆืืืช ืฉื
ืืื ืชืืฆืืืช ืืืืืืืช. ืืื ืืืฆืื ืืื ืืื ืฉื ืืชืืฆืืืช.
ืืืฆืืื ืืืืื ืืฉื ืช 2020.
ืืงืืจ: www.habr.com