Mash kendi kendini derleyen bir programlama dilidir

Mash kendi kendini derleyen bir programlama dilidir

2020 yeni yılında herkese selamlar.

İlkinin yayınlanmasından bu yana postalamak Mash'ın üzerinden neredeyse tam 1 yıl geçti.

Bu yıl boyunca dil büyük ölçüde geliştirildi, birçok yönü düşünüldü ve gelişim vektörü belirlendi.

Bütün bunları toplumla paylaşmaktan mutluluk duyuyorum.

Feragatname

Bu proje tamamen heyecanla geliştiriliyor ve dinamik programlama dilleri alanında dünya hakimiyeti iddiasında değil!

Bu gelişmeyi çabalamamız gereken bir standart olarak düşünmemek lazım; proje ideal değil ama yine de gelişiyor.

GitHub
web sitesi
forum

Yeni derleyici

Proje deposunun /mashc dalında, derleyicinin Mash'de (dilin ilk versiyonu) yazılmış yeni bir versiyonunu görebilirsiniz.

Derleyicinin asm listesinde bir kod oluşturucusu vardır (yığın tabanlı bir VM için derleyici için).
Şu anda Java için jeneratörün bir versiyonunu geliştiriyorum (JDK 1.8).

Derleyicinin yeni sürümü, dilin ilk sürümünün işlevselliğini tamamen destekler ve onu tamamlar.

Yeni OOP

Dilin yeni versiyonunda sınıflarla çalışma kısmen yeniden tasarlandı.
Sınıf yöntemleri hem sınıf gövdesinde hem de dışında bildirilebilir.
Sınıfın artık açık bir kurucusu var: init.

Örnek кода:

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

Kalıtım meydana gelirse, miras alınan çağrıları (süper) kolayca yapma fırsatımız olur.

Örnek кода:

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

Sınıf örneklerinde yöntemlerin dinamik olarak geçersiz kılınması:

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

Paketler/ad alanları

Ad alanı temiz kalmalıdır!
Buna göre dilin bu olanağı sağlaması gerekir.
Mash'te, eğer bir sınıf yöntemi statikse, kodun herhangi bir kısmından güvenli bir şekilde çağrılabilir.

Örnek:

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

Bu arada süper operatör bu şekilde çağrıldığında doğru şekilde çalışacaktır.

Исключения

Dilin yeni versiyonunda sınıflar gibi ele alınırlar:

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

Yeni numaralandırma

Artık numaralandırma elemanlarına sabit değerler atanabilir:

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

Gömülü dil

Potansiyel olarak Mash, Lua'ya benzer şekilde yerleşik bir programlama dili olarak nişini işgal edebilir.

Mash'i bu amaçlarla kullanmaya başlamak için projeyi kendiniz birleştirmenize bile gerek yok.

Mash'in, tam API'ye sahip dinamik bir kitaplık olarak derlenen yığın tabanlı bir VM olan bir Çalışma Zamanı Ortamı vardır.

Tek yapmanız gereken bunu proje bağımlılığına eklemek ve birkaç arama yapmak.

Dilin kendisi gömülü bir dil olarak çalışma işlevselliği sağlar.
Aynı zamanda dil ve üçüncü taraf kitaplıklarla bağlantılı performans da etkilenmez.
İçinde yazılı olan çeşitli çerçevelerin tüm gücünü kullanabilen gömülü bir dil elde ediyoruz.

Mash + JVM

JVM için çevirmenin bir versiyonunu geliştirmeye başladım.
Belki N kadar süre sonra Habré'de bu konuyla ilgili bir yazı yayınlanacaktır.

sonuçlar

Belirli bir sonuç yok. Bu, sonuçların ara bir temsilidir.
2020'de herkese başarılar.

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster