Mash Π΅ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° сам

Mash Π΅ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° сам

ΠŸΠΎΠ·Π΄Ρ€Π°Π²ΠΈ Π½Π° всички ΠΏΡ€Π΅Π· Π½ΠΎΠ²Π°Ρ‚Π° 2020 Π³ΠΎΠ΄ΠΈΠ½Π°.

ΠžΡ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ пост Измина ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ 1 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΎΠΊΠΎΠ»ΠΎ Mash.

ΠŸΡ€Π΅Π· Ρ‚Π°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Π΅Π·ΠΈΠΊΡŠΡ‚ бСшС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½, ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ аспСкти бяха обмислСни ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ бСшС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

Щастлив съм Π΄Π° сподСля всичко Ρ‚ΠΎΠ²Π° с общността.

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ отговорност

Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° само Π½Π° Π΅Π½Ρ‚ΡƒΡΠΈΠ°Π·ΡŠΠΌ ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΠΈΡ€Π° Π·Π° свСтовно господство Π² областта Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅!

Π’ΠΎΠ²Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π΅ трябва Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ стандарт, към ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° сС стрСмим, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π½Π΅ Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½, Π½ΠΎ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° сС Ρ€Π°Π·Π²ΠΈΠ²Π°.

GitHub
ΠœΡΡΡ‚ΠΎ
Ρ„ΠΎΡ€ΡƒΠΌ

Нов ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€

Π’ ΠΊΠ»ΠΎΠ½Π° /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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€