Mash mangrupikeun basa pamrograman anu nyusun sorangan

Mash mangrupikeun basa pamrograman anu nyusun sorangan

Salam kanggo sadayana dina taun anyar 2020.

Kusabab publikasi munggaran pos Ampir persis 1 taun kaliwat ngeunaan Mash.

Sapanjang taun ieu, basa parantos ningkat pisan, seueur aspekna anu dipikiran sareng vektor pangwangunan ditangtukeun.

Abdi bagja ngabagi sadayana ieu sareng komunitas.

Bantahan

Proyék ieu dikembangkeun ngan ukur pikeun sumanget sareng henteu pura-pura dominasi dunya dina widang basa program dinamis!

Pangwangunan ieu henteu kedah dianggap salaku standar anu kedah diusahakeun; proyék éta henteu idéal, tapi éta berkembang.

GitHub
website
Forum

kompiler anyar

Dina /mashc cabang Repository proyék, anjeun tiasa ningali versi anyar tina kompiler, nu ditulis dina Mash (versi mimiti basa).

Compiler ngabogaan generator kode dina asm Listing (pikeun assembler pikeun VM basis tumpukan).
Ayeuna kuring ngembangkeun versi generator pikeun Java (JDK 1.8).

Versi anyar kompiler pinuh ngarojong fungsionalitas versi munggaran basa jeung ngalengkepan eta.

OOP anyar

Dina versi anyar basa, karya kalawan kelas geus sawaréh redesigned.
Métode kelas tiasa dinyatakeun boh dina awak kelas sareng di luar éta.
Kelas ayeuna gaduh konstruktor eksplisit: init.

Kode sampel:

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

Lamun warisan lumangsung, mangka urang boga kasempetan pikeun gampang nelepon warisan (super).

Kode sampel:

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

Overriding dinamis tina métode dina instansi kelas:

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

Bungkusan / spasi ngaran

Ruang ngaran kudu tetep beresih!
Sasuai, basa kudu nyadiakeun kasempetan ieu.
Dina Mash, upami metode kelas statik, éta tiasa aman disebat tina bagian mana waé kodeu.

contona:

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

Ku jalan kitu, operator super bakal tiasa dianggo leres nalika disebut ku cara ieu.

Ntitas

Dina versi anyar basa aranjeunna diperlakukeun sapertos kelas:

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

Enum anyar

Ayeuna elemen enumerasi tiasa dipasihan nilai konstan:

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

Basa napel

Berpotensi, Mash tiasa mendakan niche na salaku basa pamrograman anu dipasang, sami sareng Lua.

Pikeun ngamimitian nganggo Mash pikeun tujuan ieu, anjeun henteu kedah ngumpul proyék nyalira.

Mash gaduh Lingkungan Runtime - VM dumasar tumpukan disusun salaku perpustakaan dinamis sareng API pinuh.

Sadaya anu anjeun kedah laksanakeun nyaéta nambihanana kana kagumantungan proyék sareng ngadamel sababaraha telepon.

Basa sorangan nyadiakeun fungsionalitas pikeun dianggo salaku basa embedded.
Dina waktu nu sarua, kinerja ditéang jeung basa jeung perpustakaan pihak katilu teu kapangaruhan.
Urang meunang basa embedded nu bisa ngagunakeun kakuatan pinuh rupa frameworks ditulis dina eta.

Mash + JVM

Kuring mimiti ngamekarkeun versi penerjemah pikeun JVM.
Panginten, saatos waktos N, tulisan ngeunaan topik ieu bakal muncul dina Habré.

hasil

Henteu aya hasil khusus. Ieu ngagambarkeun panengah hasil.
Wilujeng sumping ka sadayana di 2020.

sumber: www.habr.com

Tambahkeun komentar