Is teanga ríomhchlárúcháin é Mash a thiomsaíonn é féin

Is teanga ríomhchlárúcháin é Mash a thiomsaíonn é féin

Beannachtaí gach duine don athbhliain 2020.

Ó foilsíodh an chéad cheann an post Tá beagnach 1 bhliain caite faoi Mash.

I rith na bliana seo, feabhsaíodh an teanga go mór, rinneadh machnamh ar go leor dá gnéithe agus socraíodh veicteoir na forbartha.

Tá áthas orm é seo ar fad a roinnt leis an bpobal.

Séanadh

Tá an tionscadal seo á fhorbairt ar dhíograis amháin agus ní ligeann sé air féin go bhfuil forlámhas domhanda aige i réimse na dteangacha ríomhchlárúcháin dinimiciúla!

Níor cheart breathnú ar an bhforbairt seo mar chaighdeán le dícheall a dhéanamh, níl an tionscadal idéalach, ach tá sé ag forbairt mar sin féin.

GitHub
Suíomh
Fóram

Tiomsaitheoir nua

Sa bhrainse /mashc de stór an tionscadail, is féidir leat leagan nua den tiomsaitheoir a fheiceáil, atá scríofa i Mash (an chéad leagan den teanga).

Tá gineadóir cóid ag an tiomsaitheoir i liostú ASM (do chóimeálaí do VM bunaithe ar chruach).
Faoi láthair tá mé ag forbairt leagan den ghineadóir do Java (JDK 1.8).

Tacaíonn an leagan nua den tiomsaitheoir go hiomlán le feidhmiúlacht an chéad leagan den teanga agus comhlánaíonn sé é.

OOP nua

Sa leagan nua den teanga, tá athdhearadh páirteach ar obair na ranganna.
Is féidir modhanna ranga a dhearbhú sa chorp ranga agus lasmuigh de.
Tá cruthaitheoir follasach ag an rang anois: init.

Cód primer:

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

Má tharlaíonn oidhreacht, ansin tá an deis againn glaonna oidhreachta (super) a dhéanamh go héasca.

Cód primer:

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

Sárú dinimiciúil ar mhodhanna ar chásanna ranga:

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

Pacáistí/spásanna ainm

Caithfidh an t-ainmspás fanacht glan!
Dá réir sin, caithfidh an teanga an deis seo a chur ar fáil.
I Mash, má tá modh ranga statach, is féidir é a ghlaoch go sábháilte ó aon chuid den chód.

Sampla:

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

Dála an scéil, oibreoidh an t-oibreoir sármhaith i gceart nuair a ghlaoitear air ar an mbealach seo.

Eisceachtaí

Sa leagan nua den teanga caitear leo mar ranganna:

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

Enum nua

Anois is féidir luachanna tairiseacha a thabhairt d’eilimintí áirimh:

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

Teanga leabaithe

D'fhéadfadh go mbeadh Mash in ann a nideoige a aimsiú mar theanga ríomhchláraithe leabaithe, cosúil le Lua.

Chun tús a chur le Mash a úsáid chun na gcríoch sin, ní gá duit fiú an tionscadal a chur le chéile tú féin.

Tá Timpeallacht Runtime ag Mash - VM bunaithe ar stack a tiomsaíodh mar leabharlann dinimiciúil le API iomlán.

Níl le déanamh agat ach é a chur le spleáchas an tionscadail agus cúpla glaoch a dhéanamh.

Soláthraíonn an teanga féin feidhmiúlacht chun oibriú mar theanga leabaithe.
Ag an am céanna, ní chuirtear isteach ar fheidhmíocht i gcomhar le leabharlanna teanga agus tríú páirtí.
Faighimid teanga leabaithe ar féidir léi úsáid a bhaint as cumhacht iomlán na gcreataí éagsúla atá scríofa inti.

Mash + JVM

Thosaigh mé ag forbairt leagan den aistritheoir don JVM.
B’fhéidir, tar éis N méid ama, go mbeidh postáil ar an ábhar seo le feiceáil ar Habré.

Torthaí

Níl aon torthaí ar leith. Is léiriú idirmheánach é seo ar na torthaí.
Ádh mór do gach duine i 2020.

Foinse: will.com

Add a comment