Mash แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ’แƒ”แƒœแƒก แƒ—แƒแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒก

Mash แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ’แƒ”แƒœแƒก แƒ—แƒแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒก

แƒ’แƒ˜แƒšแƒแƒชแƒแƒ•แƒ— แƒงแƒ•แƒ”แƒšแƒแƒก แƒแƒฎแƒแƒš 2020 แƒฌแƒ”แƒšแƒก.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒžแƒแƒกแƒขแƒ˜ แƒ›แƒแƒจแƒ–แƒ” แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ 1 แƒฌแƒ”แƒšแƒ˜ แƒ’แƒแƒ•แƒ˜แƒ“แƒ.

แƒแƒ› แƒ”แƒ แƒ—แƒ˜ แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ”แƒœแƒ แƒกแƒแƒ’แƒ แƒซแƒœแƒแƒ‘แƒšแƒแƒ“ แƒ“แƒแƒ˜แƒฎแƒ•แƒ”แƒฌแƒ, แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒแƒกแƒžแƒ”แƒฅแƒขแƒ˜ แƒ“แƒแƒคแƒ˜แƒฅแƒ แƒ“แƒ แƒ“แƒ แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ˜.

แƒ›แƒแƒฎแƒแƒ แƒฃแƒšแƒ˜ แƒ•แƒแƒ , แƒ แƒแƒ› แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒกแƒแƒ–แƒแƒ’แƒแƒ“แƒแƒ”แƒ‘แƒแƒก แƒ•แƒฃแƒ–แƒ˜แƒแƒ แƒ”แƒ‘.

แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜

แƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒœแƒ—แƒฃแƒ–แƒ˜แƒแƒ–แƒ›แƒ–แƒ” แƒ“แƒ แƒแƒ  แƒžแƒ แƒ”แƒขแƒ”แƒœแƒ–แƒ˜แƒ แƒแƒฅแƒ•แƒก แƒ›แƒกแƒแƒคแƒšแƒ˜แƒ แƒ“แƒแƒ›แƒ˜แƒœแƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒคแƒ”แƒ แƒแƒจแƒ˜!

แƒ”แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒฉแƒแƒ˜แƒ—แƒ•แƒแƒšแƒแƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒแƒ“, แƒ แƒแƒ›แƒšแƒ˜แƒกแƒ™แƒ”แƒœแƒแƒช แƒฃแƒœแƒ“แƒ แƒ˜แƒกแƒฌแƒ แƒแƒคแƒ•แƒแƒ“แƒ”แƒก, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒ“แƒ”แƒแƒšแƒฃแƒ แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ˜แƒœแƒช แƒ•แƒ˜แƒ—แƒแƒ แƒ“แƒ”แƒ‘แƒ.

GitHub
แƒกแƒแƒ˜แƒขแƒ˜แƒก
แƒคแƒแƒ แƒฃแƒ›แƒ˜

แƒแƒฎแƒแƒšแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒก /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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ