Cyfarchion i bawb yn y flwyddyn newydd 2020.
Ers cyhoeddi'r cyntaf
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.
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