ΠΠΎΠ·Π΄ΡΠ°Π²ΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π· Π½ΠΎΠ²Π°ΡΠ° 2020 Π³ΠΎΠ΄ΠΈΠ½Π°.
ΠΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΡΠ²ΠΈΡ
ΠΡΠ΅Π· ΡΠ°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Π΅Π·ΠΈΠΊΡΡ Π±Π΅ΡΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½, ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π±ΡΡ Π° ΠΎΠ±ΠΌΠΈΡΠ»Π΅Π½ΠΈ ΠΈ Π²Π΅ΠΊΡΠΎΡΡΡ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π±Π΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½.
Π©Π°ΡΡΠ»ΠΈΠ² ΡΡΠΌ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»Ρ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Ρ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°.
ΠΡΠΊΠ°Π· ΠΎΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ
Π’ΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ Π½Π° Π΅Π½ΡΡΡΠΈΠ°Π·ΡΠΌ ΠΈ Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΠΈΡΠ° Π·Π° ΡΠ²Π΅ΡΠΎΠ²Π½ΠΎ Π³ΠΎΡΠΏΠΎΠ΄ΡΡΠ²ΠΎ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅!
Π’ΠΎΠ²Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ, ΠΊΡΠΌ ΠΊΠΎΠΉΡΠΎ Π΄Π° ΡΠ΅ ΡΡΡΠ΅ΠΌΠΈΠΌ, ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π½Π΅ Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½, Π½ΠΎ Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°.
ΠΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ
Π ΠΊΠ»ΠΎΠ½Π° /mashc Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Mash (ΠΏΡΡΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ°).
ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΠΈΠΌΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ΄ Π² asm listing (Π·Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ Π·Π° Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΡΠ΅ΠΊ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°).
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΠΌ Π²Π΅ΡΡΠΈΡ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π·Π° 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 MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
ΠΠ³ΡΠ°Π΄Π΅Π½ Π΅Π·ΠΈΠΊ
ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ Mash ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈ ΡΠ²ΠΎΡΡΠ° Π½ΠΈΡΠ° ΠΊΠ°ΡΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Lua.
ΠΠ° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Mash Π·Π° ΡΠ΅Π·ΠΈ ΡΠ΅Π»ΠΈ, Π΄ΠΎΡΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ°ΠΌΠΈ.
Mash ΠΈΠΌΠ° ΡΡΠ΅Π΄Π° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ - Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΡΡΠ΅ΠΊ Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΠΏΡΠ»Π΅Π½ API.
ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΊΡΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ.
Π‘Π°ΠΌΠΈΡΡ Π΅Π·ΠΈΠΊ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΊΠ°ΡΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ Π΅Π·ΠΈΠΊ.
Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π²ΡΠ² Π²ΡΡΠ·ΠΊΠ° Ρ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° ΡΡΠ΅ΡΠΈ ΡΡΡΠ°Π½ΠΈ Π½Π΅ Π΅ Π·Π°ΡΠ΅Π³Π½Π°ΡΠ°.
ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ Π΅Π·ΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠ»Π½Π°ΡΠ° ΠΌΠΎΡΠ½ΠΎΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°ΠΌΠΊΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² Π½Π΅Π³ΠΎ.
Mash + JVM
ΠΠ°ΠΏΠΎΡΠ½Π°Ρ
Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΠΌ Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ° Π·Π° JVM.
ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΠ»Π΅Π΄ N ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π½Π° Π₯Π°Π±ΡΠ΅.
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ
ΠΡΠΌΠ° ΠΎΡΠΎΠ±Π΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅.
Π£ΡΠΏΠ΅Ρ
Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π· 2020 Π³.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com