Mae Mash yn iaith raglennu sy'n llunio ei hun.

Mae Mash yn iaith raglennu sy'n llunio ei hun.

Cyfarchion i bawb yn y flwyddyn newydd 2020.

Ers cyhoeddi'r cyntaf ymprydio am Mash wedi mynd heibio bron union 1 flwyddyn.

Yn ystod y flwyddyn hon, mae'r iaith wedi gwella'n fawr, mae llawer o'i hagweddau wedi'u hystyried a phennwyd fector datblygu.

Yr wyf yn hapus i rannu pob un ohonynt Γ’'r gymuned.

Ymwadiad

Mae'r prosiect hwn yn cael ei ddatblygu ar frwdfrydedd yn unig ac nid yw'n esgus bod y byd ym maes ieithoedd rhaglennu deinamig!

Ni ddylech ystyried y datblygiad hwn fel safon y mae angen i chi anelu ati, nid yw'r prosiect yn ddelfrydol, ond serch hynny mae'n datblygu.

GitHub
Safle
Fforwm

Casglwr newydd

Yn y gangen /mashc o ystorfa'r prosiect, gallwch weld y fersiwn newydd o'r casglwr, sydd wedi'i ysgrifennu yn Mash (fersiwn gyntaf yr iaith).

Mae gan y casglwr generadur cod yn y rhestr asm (ar gyfer cydosodwr o dan y pentwr VM).
Ar hyn o bryd rwy'n datblygu fersiwn o'r generadur ar gyfer Java (JDK 1.8).

Mae'r fersiwn newydd o'r casglwr yn cefnogi ymarferoldeb y fersiwn gyntaf o'r iaith yn llawn ac yn ei hategu.

OOP newydd

Yn y fersiwn newydd o'r iaith, mae gwaith gyda dosbarthiadau wedi'i ailgynllunio rhywfaint.
Gellir datgan dulliau dosbarth yn y corff dosbarth a'r tu allan iddo.
Mae gan y dosbarth yn awr lunydd eglur : init.

Enghraifft o god:

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

Os bydd etifeddiaeth yn digwydd, yna mae gennym y gallu i wneud galwadau etifeddol yn hawdd (super).

Enghraifft o god:

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

Diystyru dulliau dynamig ar gyfer achosion dosbarth:

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

Pecynnau / Mannau Enw

Rhaid i'r gofod enw aros yn lΓ’n!
Yn unol Γ’ hynny, dylai'r iaith ddarparu'r cyfle hwn.
Yn Mash, os yw dull dosbarth yn statig, gellir ei alw'n ddiogel o unrhyw ran o'r cod.

Enghraifft:

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

Gyda llaw, bydd yr uwch weithredwr yn gweithio'n gywir gyda galwad o'r fath.

Eithriadau

Yn y fersiwn newydd o'r iaith, cΓ’nt eu trin fel dosbarthiadau:

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

Enum newydd

Nawr gellir rhoi gwerthoedd cyson i elfennau'r cyfrif:

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

Wedi'i fewnosod PL

O bosibl - gall Mash ddod o hyd i'w niche fel iaith raglennu y gellir ei hymgorffori, fel Lua.

I ddechrau defnyddio Mash at y dibenion hyn, nid oes angen i chi hyd yn oed adeiladu'r prosiect eich hun.

Mae gan Mash Amgylchedd Amser Rhedeg - pentwr VM a adeiladwyd fel llyfrgell ddeinamig gydag API llawn.

Does ond angen i chi ei ychwanegu at ddibyniaethau'r prosiect a gwneud cwpl o alwadau.

Mae'r iaith ei hun yn darparu ymarferoldeb i weithio fel iaith wreiddiedig.
Ar yr un pryd, nid yw perfformiad ar y cyd Γ’ llyfrgelloedd iaith a thrydydd parti yn cael ei dorri.
Cawn iaith fewnosodadwy a all ddefnyddio grym llawn y gwahanol fframweithiau a ysgrifennwyd ynddi.

Stwns + JVM

Wedi dechrau datblygu fersiwn o'r cyfieithydd ar gyfer y JVM.
Efallai, ar Γ΄l y N-th faint o amser, bydd post ar y pwnc hwn yn ymddangos ar HabrΓ©.

Canlyniadau

Nid oes unrhyw ganlyniadau penodol. Mae hwn yn gynrychiolaeth ganolraddol o'r canlyniadau.
Pob hwyl i bawb yn 2020.

Ffynhonnell: hab.com

Ychwanegu sylw