Is e cànan prògramaidh a th’ ann am Mash a tha ga chur ri chèile

Is e cànan prògramaidh a th’ ann am Mash a tha ga chur ri chèile

Beannachdan na h-uile air a’ bhliadhna ùr 2020.

Bho chaidh a 'chiad fhoillseachadh post Tha cha mhòr dìreach 1 bliadhna air a dhol seachad mu dheidhinn Mash.

Am-bliadhna, chaidh an cànan a leasachadh gu mòr, chaidh mòran de na taobhan aice a smaoineachadh troimhe agus chaidh vectar leasachaidh a dhearbhadh.

Tha mi toilichte seo uile a cho-roinn leis a’ choimhearsnachd.

Àicheadh

Tha am pròiseact seo ga leasachadh a-mhàin air dealas agus chan eil e a’ leigeil a-mach gu bheil smachd aig an t-saoghal ann an raon chànanan prògramaidh fiùghantach!

Cha bu chòir beachdachadh air an leasachadh seo mar ìre airson a bhith ag amas; chan eil am pròiseact air leth freagarrach, ach tha e a’ leasachadh a dh’ aindeoin sin.

GitHub
làrach-lìn
fòram

Compiler ùr

Anns a 'mheur /mashc de stòras a' phròiseict, chì thu dreach ùr den inneal-cruinneachaidh, a tha sgrìobhte ann am Mash (a 'chiad dreach den chànan).

Tha gineadair còd aig an inneal-cruinneachaidh ann an liostadh asm (airson cruinneachaidh airson VM stèidhichte air stac).
An-dràsta tha mi a’ leasachadh dreach den ghineadair airson Java (JDK 1.8).

Tha an dreach ùr den inneal-cruinneachaidh a’ toirt làn thaic do ghnìomhachd a’ chiad dreach den chànan agus a’ cur ris.

OOP ùr

Anns an dreach ùr den chànan, chaidh an obair le clasaichean ath-dhealbhadh gu ìre.
Faodar modhan clas ainmeachadh an dà chuid ann am buidheann a 'chlas agus taobh a-muigh.
Tha neach-togail soilleir aig a’ chlas a-nis: init.

Còd sampaill:

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

Ma thachras dìleab, tha cothrom againn gairmean sealbhaichte (super) a dhèanamh gu furasta.

Còd sampaill:

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

A’ dol thairis air dòighean dinamach ann an suidheachaidhean clasa:

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

Pacaidean/space name

Feumaidh an t-ainm-àite fuireach glan!
Mar sin, feumaidh an cànan an cothrom seo a thoirt seachad.
Ann am Mash, ma tha modh clas statach, faodar a ghairm gu sàbhailte bho phàirt sam bith den chòd.

Eisimpleir:

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

Co-dhiù, obraichidh an sàr-ghnìomhaiche gu ceart nuair a thèid a ghairm san dòigh seo.

Eisimpleirean

Anns an dreach ùr den chànan tha iad air an làimhseachadh mar chlasaichean:

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

Ùrnaigh

A-nis faodar luachan seasmhach a thoirt do eileamaidean àireamhachd:

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

Cànan freumhaichte

Is dòcha gum faigh Mash an àite sònraichte aige mar chànan prògramadh freumhaichte, coltach ri Lua.

Gus tòiseachadh air Mash a chleachdadh airson na h-adhbharan sin, cha leig thu eadhon a leas am pròiseact a chuir ri chèile thu fhèin.

Tha Àrainneachd Runtime aig Mash - VM stèidhichte air stac air a chur ri chèile mar leabharlann fiùghantach le làn API.

Chan eil agad ach a chuir ri eisimeileachd a’ phròiseict agus fios no dhà a dhèanamh.

Tha an cànan fhèin a’ toirt comas-gnìomh airson obrachadh mar chànan freumhaichte.
Aig an aon àm, chan eil buaidh air coileanadh ann an co-bhonn ri leabharlannan cànain agus treas-phàrtaidh.
Bidh sinn a’ faighinn cànan freumhaichte as urrainn làn chumhachd diofar fhrèaman a tha sgrìobhte innte a chleachdadh.

Mash + JVM

Thòisich mi a’ leasachadh dreach den eadar-theangair airson an JVM.
Is dòcha, às deidh N ùine, gun nochd post air a’ chuspair seo air Habré.

Builean

Chan eil toraidhean sònraichte ann. Is e seo riochdachadh eadar-mheadhanach de na toraidhean.
Gur math a thèid leis a h-uile duine ann an 2020.

Source: www.habr.com

Cuir beachd ann