Mash minangka basa pamrograman sing nyusun dhewe

Mash minangka basa pamrograman sing nyusun dhewe

Sugeng warsa enggal 2020 kagem sedaya.

Wiwit publikasi pisanan kirim Meh persis 1 taun kepungkur babagan Mash.

Sajrone taun iki, basa kasebut saya apik banget, akeh aspek sing dipikirake lan vektor pangembangan ditemtokake.

Aku seneng nuduhake kabeh iki karo masyarakat.

Nolak tanggung jawab

Proyek iki dikembangake mung kanthi semangat lan ora ndalang dominasi donya ing bidang basa pemrograman dinamis!

Pangembangan iki ora kudu dianggep minangka standar sing kudu diupayakake; proyek kasebut ora becik, nanging isih berkembang.

GitHub
situs
Forum

Compiler anyar

Ing /mashc cabang saka repositori project, sampeyan bisa ndeleng versi anyar saka compiler, kang ditulis ing Mash (versi pisanan saka basa).

Compiler wis generator kode ing listing asm (kanggo assembler kanggo VM basis tumpukan).
Saiki aku ngembangake versi generator kanggo Jawa (JDK 1.8).

Versi anyar kompiler ndhukung kanthi lengkap fungsi versi pisanan saka basa lan nglengkapi.

OOP anyar

Ing versi anyar saka basa, karya karo kelas wis sebagian redesigned.
Cara kelas bisa diumumake ing awak kelas lan ing njaba.
Kelas saiki duwe 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
...

Yen ana warisan, mula kita duwe kesempatan kanthi gampang nelpon 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

Dinamis overriding metode ing instance kelas:

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

Paket / namespaces

Ruang jeneng kudu tetep resik!
Mulane, basa kudu menehi kesempatan iki.
Ing Mash, yen metode kelas statis, bisa diarani kanthi aman saka bagean kode kasebut.

Conto:

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

Miturut cara, operator super bakal bisa digunakake kanthi bener nalika diarani kanthi cara iki.

Pangecualian

Ing versi anyar basa kasebut dianggep kaya 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

Saiki unsur enumerasi bisa diwenehi nilai konstan:

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

Basa semat

Potensial, Mash bisa nemokake ceruk minangka basa pamrograman sing dipasang, padha karo Lua.

Kanggo miwiti nggunakake Mash kanggo tujuan kasebut, sampeyan ora perlu ngumpulake proyek kasebut dhewe.

Mash duwe Lingkungan Runtime - VM adhedhasar tumpukan sing disusun minangka perpustakaan dinamis kanthi API lengkap.

Sampeyan mung kudu nambahake menyang ketergantungan proyek lan nggawe sawetara telpon.

Basa kasebut nyedhiyakake fungsi kanggo bisa digunakake minangka basa sing disematake.
Ing wektu sing padha, kinerja bebarengan karo basa lan perpustakaan pihak katelu ora kena pengaruh.
Kita entuk basa sing dipasang sing bisa nggunakake kekuwatan saka macem-macem kerangka kerja sing ditulis ing njero.

Mash + JVM

Aku miwiti ngembangaken versi penerjemah kanggo JVM.
Mbok menawa, sawise wektu N, kiriman babagan topik iki bakal katon ing HabrΓ©.

Hasil

Ora ana asil tartamtu. Iki minangka perwakilan penengah saka asil.
Good luck kanggo kabeh ing 2020.

Source: www.habr.com

Add a comment