Mash is een programmeertaal die zichzelf compileert.

Mash is een programmeertaal die zichzelf compileert.

Ik wens iedereen een gelukkig nieuwjaar 2020.

Sinds de publicatie van de eerste vasten Het is bijna precies 1 jaar geleden dat Mash plaatsvond.

In de loop van dit jaar is de taal sterk verbeterd, zijn veel aspecten ervan doordacht en is de ontwikkelingsvector bepaald.

Ik deel dit graag met de community.

Disclaimer

Dit project wordt uitsluitend uit enthousiasme ontwikkeld en pretendeert niet de wereldtop te worden op het gebied van dynamische programmeertalen!

Deze ontwikkeling moet niet gezien worden als een standaard waar men naar moet streven; het project is niet ideaal, maar het is wel in ontwikkeling.

GitHub
Plaats
forum

Nieuwe compiler

In de /mashc-branch van de projectrepository kunt u een nieuwe versie van de compiler zien, die geschreven is in Mash (de eerste versie van de taal).

De compiler heeft een codegenerator in de asm-lijst (voor assembler voor stack VM).
Ik ben momenteel bezig met het ontwikkelen van een versie van de generator voor Java (JDK 1.8).

De nieuwe versie van de compiler ondersteunt de functionaliteit van de eerste versie van de taal volledig en vult deze aan.

Nieuwe OOP

In de nieuwe versie van de taal is het werken met klassen gedeeltelijk herwerkt.
Klassenmethoden kunnen zowel binnen als buiten de klassetekst worden gedeclareerd.
De klasse heeft nu een expliciete constructor: init.

Voorbeeldcode:

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

Indien er sprake is van overerving, kunnen we eenvoudig geërfde (super) calls maken.

Voorbeeldcode:

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

Dynamisch overschrijven van methoden op klasse-instanties:

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

Pakketten / Naamruimten

De naamruimte moet schoon blijven!
Daarom moet de taal deze mogelijkheid bieden.
In Mash kan een klassemethode die statisch is, veilig vanuit elk deel van de code worden aangeroepen.

Voorbeeld:

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

Overigens zal de super operator correct functioneren als je hem op deze manier aanroept.

Исключения

In de nieuwe versie van de taal worden ze behandeld als klassen:

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

Nieuwe enum

Nu kunnen aan opsommingselementen constante waarden worden toegewezen:

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

Ingebedde PL

Potentieel gezien zou Mash zijn plek kunnen vinden als embedded programmeertaal, vergelijkbaar met Lua.

Om Mash voor deze doeleinden te gebruiken, hoeft u het project niet eens zelf te bouwen.

Mash heeft een Runtime Environment: een stack-VM die is gebouwd als een dynamische bibliotheek met een volwaardige API.

Het enige wat u hoeft te doen is het toe te voegen aan de afhankelijkheden van uw project en een paar aanroepen te doen.

De taal zelf biedt functionaliteit voor gebruik als ingebedde taal.
Tegelijkertijd wordt de functionaliteit in combinatie met taal- en externe bibliotheken niet aangetast.
We krijgen een ingebedde taal die de volledige kracht van de verschillende frameworks die erin geschreven zijn, kan benutten.

Mash + JVM

Begonnen met het ontwikkelen van een versie van de vertaler voor JVM.
Misschien verschijnt er over een bepaalde tijd een bericht over dit onderwerp op Habr.

Resultaten van

Er zijn geen specifieke resultaten. Dit is een tussenpresentatie van de resultaten.
Veel geluk allemaal in 2020.

Bron: www.habr.com

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster