Mash adalah bahasa pemrograman yang mengkompilasi dirinya sendiri

Mash adalah bahasa pemrograman yang mengkompilasi dirinya sendiri

Salam semuanya di tahun baru 2020.

Sejak diterbitkannya yang pertama pos Hampir tepat 1 tahun telah berlalu tentang Mash.

Selama tahun ini, bahasa mengalami kemajuan pesat, banyak aspeknya dipikirkan secara matang dan vektor perkembangannya ditentukan.

Saya senang berbagi semua ini dengan komunitas.

Penolakan tanggung jawab

Proyek ini dikembangkan semata-mata atas dasar antusiasme dan tidak berpura-pura mendominasi dunia di bidang bahasa pemrograman dinamis!

Perkembangan ini tidak boleh dianggap sebagai standar yang harus diperjuangkan; proyek ini tidak ideal, namun tetap saja berkembang.

GitHub
Situs web
forum

Kompiler baru

Di cabang /mashc repositori proyek, Anda dapat melihat versi baru kompiler, yang ditulis dalam Mash (versi bahasa pertama).

Kompiler memiliki generator kode dalam daftar asm (untuk assembler untuk VM berbasis tumpukan).
Saat ini saya sedang mengembangkan versi generator untuk Java (JDK 1.8).

Versi baru kompiler sepenuhnya mendukung fungsionalitas versi pertama bahasa tersebut dan melengkapinya.

OOP baru

Dalam versi bahasa yang baru, pekerjaan dengan kelas telah didesain ulang sebagian.
Metode kelas dapat dideklarasikan baik di dalam badan kelas maupun di luarnya.
Kelas sekarang memiliki konstruktor eksplisit: init.

Π΅Ρ€ ΠΎΠ΄Π°:

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

Jika terjadi pewarisan, maka kita mempunyai kesempatan untuk dengan mudah melakukan panggilan warisan (super).

Π΅Ρ€ ΠΎΠ΄Π°:

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

Penggantian metode secara dinamis pada instance kelas:

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

Paket/ruang nama

Namespace harus tetap bersih!
Oleh karena itu, bahasa harus memberikan kesempatan ini.
Di Mash, jika metode kelas bersifat statis, metode tersebut dapat dipanggil dengan aman dari bagian kode mana pun.

Contoh:

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

Omong-omong, operator super akan bekerja dengan benar bila dipanggil dengan cara ini.

Pengecualian

Dalam versi bahasa yang baru, mereka diperlakukan seperti kelas:

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

enum baru

Sekarang elemen enumerasi dapat diberi nilai konstan:

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

Bahasa yang tertanam

Secara potensial, Mash dapat menemukan ceruknya sebagai bahasa pemrograman tertanam, mirip dengan Lua.

Untuk mulai menggunakan Mash untuk tujuan ini, Anda bahkan tidak perlu merakit proyeknya sendiri.

Mash memiliki Runtime Environment - VM berbasis tumpukan yang dikompilasi sebagai perpustakaan dinamis dengan API lengkap.

Yang perlu Anda lakukan hanyalah menambahkannya ke ketergantungan proyek dan melakukan beberapa panggilan.

Bahasa itu sendiri menyediakan fungsionalitas untuk berfungsi sebagai bahasa yang tertanam.
Pada saat yang sama, kinerja dalam hubungannya dengan bahasa dan perpustakaan pihak ketiga tidak terpengaruh.
Kami mendapatkan bahasa tertanam yang dapat menggunakan kekuatan penuh dari berbagai kerangka kerja yang ditulis di dalamnya.

Hancurkan + JVM

Saya mulai mengembangkan versi penerjemah untuk JVM.
Mungkin, setelah N waktu, postingan tentang topik ini akan muncul di HabrΓ©.

Hasil

Tidak ada hasil tertentu. Ini adalah representasi perantara dari hasil.
Semoga sukses untuk semuanya di tahun 2020.

Sumber: www.habr.com

Tambah komentar