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์๋ ์ ์ฒด API๋ฅผ ๊ฐ์ถ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ปดํ์ผ๋ ์คํ ๊ธฐ๋ฐ VM์ธ ๋ฐํ์ ํ๊ฒฝ์ด ์์ต๋๋ค.
๋น์ ์ด ํด์ผ ํ ์ผ์ ์ด๋ฅผ ํ๋ก์ ํธ ์ข ์์ฑ์ ์ถ๊ฐํ๊ณ ๋ช ๋ฒ ํธ์ถํ๋ ๊ฒ๋ฟ์ ๋๋ค.
์ธ์ด ์์ฒด๋ ์๋ฒ ๋๋ ์ธ์ด๋ก ์๋ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋์์ ์ธ์ด ๋ฐ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋ ์ฑ๋ฅ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ทธ ์์ ์์ฑ๋ ๋ค์ํ ํ๋ ์์ํฌ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ ์๋ฒ ๋๋ ์ธ์ด๋ฅผ ์ป์ต๋๋ค.
๋งค์ + JVM
๋๋ JVM์ฉ ๋ฒ์ญ๊ธฐ ๋ฒ์ ์ ๊ฐ๋ฐํ๊ธฐ ์์ํ์ต๋๋ค.
์๋ง๋ N์๊ฐ์ด ์ง๋๋ฉด ์ด ์ฃผ์ ์ ๋ํ ๊ฒ์๋ฌผ์ด Habrรฉ์ ๋ํ๋ ๊ฒ์
๋๋ค.
๊ฒฐ๊ณผ
ํน๋ณํ ๊ฒฐ๊ณผ๋ ์์ต๋๋ค. ์ด๋ ๊ฒฐ๊ณผ์ ์ค๊ฐ ํํ์
๋๋ค.
2020๋
์๋ ๋ชจ๋๋ค ํ์ด์ ๋น๋๋ค.
์ถ์ฒ : habr.com