Mash yog ib hom lus programming uas suav nws tus kheej

Mash yog ib hom lus programming uas suav nws tus kheej

Nyob zoo rau txhua tus nyob rau xyoo tshiab 2020.

Txij li thaum luam tawm thawj zaug ncej Yuav luag 1 xyoos dhau los txog Mash.

Nyob rau hauv lub xyoo no, cov lus tau txhim kho zoo heev, ntau yam ntawm nws cov kev xav tau los ntawm thiab vector ntawm kev loj hlob tau txiav txim siab.

Kuv zoo siab los qhia tag nrho cov no rau cov zej zog.

Disclaimer

Qhov project no yog tsim los ntawm kev txaus siab nkaus xwb thiab tsis ua txuj rau lub ntiaj teb domination nyob rau hauv lub teb ntawm dynamic programming lus!

Qhov kev txhim kho no yuav tsum tsis txhob suav tias yog tus qauv uas yuav tsum tau siv zog rau; qhov project tsis zoo tagnrho, tab sis nws tseem tab tom txhim kho.

GitHub
website
Rooj sab laj

Tshiab compiler

Nyob rau hauv /mashc ceg ntawm qhov project repository, koj tuaj yeem pom ib qho tshiab ntawm cov compiler, uas tau sau hauv Mash (thawj version ntawm cov lus).

Lub compiler muaj ib tug code generator nyob rau hauv asm npe (rau assembler rau ib pawg-raws li VM).
Tam sim no kuv tab tom tsim ib lub tshuab hluav taws xob rau Java (JDK 1.8).

Tus tshiab version ntawm lub compiler txhawb nqa lub functionality ntawm thawj version ntawm cov lus thiab complements nws.

New OOP

Hauv cov lus tshiab, kev ua haujlwm nrog cov chav kawm tau raug kho dua ib nrab.
Cov txheej txheem hauv chav kawm tuaj yeem tshaj tawm ob qho tib si hauv chav kawm lub cev thiab sab nraud.
Cov chav kawm tam sim no muaj tus tsim qauv qhia meej: init.

Qauv code:

...
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
...

Yog hais tias muaj qub txeeg qub teg tshwm sim, ces peb muaj lub cib fim kom tau yooj yim hu ua qub txeeg qub teg (super).

Qauv code:

...
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

Dynamic overriding ntawm txoj hauv kev hauv chav kawm:

...
func Polymorph::NewFoo(c):
  return $a + $b + c  
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30)    // 60

Packages/namespaces

Lub namespace yuav tsum huv si!
Yog li, hom lus yuav tsum muab lub sijhawm no.
Nyob rau hauv Mash, yog hais tias ib tug hauv chav kawm ntawv txoj kev yog zoo li qub, nws muaj peev xwm yuav xyuam xim hu los ntawm ib feem ntawm cov cai.

Piv Txwv:

...
class MyPackage:
  func MyFunc(a, b):
    return a + b  
  end
end
...
println( MyPackage -> MyFunc(10, 20) )    // 30

Los ntawm txoj kev, tus neeg teb xov tooj super yuav ua haujlwm kom raug thaum hu ua li no.

Tsis suav

Nyob rau hauv lub tshiab version ntawm cov lus lawv raug kho zoo li cov chav kawm:

...
try:
  raise new Exception(
    "My raised exception!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Unknown exception class!")
  end
end
...

New enum

Tam sim no enumeration ntsiab tuaj yeem muab cov txiaj ntsig tas li:

enum MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

Hom lus

Muaj peev xwm, Mash tuaj yeem pom nws cov niche ua ib hom lus kos npe, zoo ib yam li Lua.

Txhawm rau pib siv Mash rau cov hom phiaj no, koj tsis tas yuav sib sau ua haujlwm ntawm koj tus kheej.

Mash muaj Runtime Ib puag ncig - pawg-raws li VM muab tso ua ke ua lub tsev qiv ntawv muaj zog nrog API tag nrho.

Txhua yam koj yuav tsum tau ua yog ntxiv nws rau qhov project dependency thiab ua ob peb hu.

Cov lus nws tus kheej muab kev ua haujlwm los ua haujlwm ua hom lus kos.
Nyob rau tib lub sijhawm, kev ua haujlwm ua ke nrog cov lus thiab cov tsev qiv ntawv thib peb tsis cuam tshuam.
Peb tau txais cov lus kos uas tuaj yeem siv tag nrho lub zog ntawm ntau lub moj khaum sau rau hauv nws.

Mash + JVM

Kuv pib tsim ib tug version ntawm tus txhais lus rau JVM.
Tej zaum, tom qab N lub sijhawm, cov lus tshaj tawm ntawm cov ncauj lus no yuav tshwm sim ntawm HabrΓ©.

Cov txiaj ntsim tau los

Tsis muaj qhov tshwm sim tshwj xeeb. Qhov no yog ib qho kev sawv cev nruab nrab ntawm cov txiaj ntsig.
Nyob zoo txhua tus xyoo 2020.

Tau qhov twg los: www.hab.com

Ntxiv ib saib