
Salam untuk semua di tahun 2020 yang baru.
Sejak publikasi
posting pertama tentang Mash, hampir tepat 1 tahun telah berlalu.
Selama tahun ini, bahasanya sangat ditingkatkan, banyak aspeknya dipikirkan dan vektor pengembangan didefinisikan.
Saya senang berbagi ini dengan komunitas.
Penafian
Proyek ini dikembangkan secara eksklusif berdasarkan antusiasme dan tidak mengklaim dominasi dunia dalam bidang bahasa pemrograman dinamis!
Anda tidak boleh menganggap pengembangan ini sebagai standar yang harus Anda perjuangkan, proyek ini tidak ideal, namun demikian pengembangannya.
Github
Situs
Forum
Kompiler baru
Di cabang / mashc dari repositori proyek, Anda bisa melihat versi baru dari kompiler, yang ditulis dalam Mash (pada versi pertama bahasa).
Kompiler memiliki generator kode dalam daftar asm (untuk assembler di bawah tumpukan VM).
Saat ini saya sedang mengembangkan versi generator untuk Java (JDK 1.8).
Versi baru dari kompiler sepenuhnya mendukung fungsionalitas versi pertama bahasa dan melengkapinya.
OOP baru
Versi bahasa yang baru telah mengerjakan sebagian pekerjaan dengan kelas.
Metode kelas dapat dideklarasikan baik di tubuh kelas dan di luar.
Kelas sekarang memiliki konstruktor eksplisit: init.
Contoh kode:
... 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 pewarisan terjadi, maka kami memiliki kesempatan untuk dengan mudah membuat panggilan yang diwarisi (super).
Contoh kode:
... 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
Metode override 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 menyediakan kesempatan ini.
Di Mash, jika metode kelas statis, itu dapat dengan aman dipanggil dari mana saja dalam kode.
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 dengan panggilan seperti itu.
Pengecualian
Dalam versi baru bahasa, mereka diperlakukan sebagai 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
Tertanam
Berpotensi - Mash dapat mengambil niche sebagai bahasa pemrograman tertanam, mirip dengan Lua.
Untuk mulai menggunakan Mash untuk keperluan ini, Anda bahkan tidak perlu membangun proyek sendiri.
Mash memiliki Lingkungan Runtime - VM bertumpuk yang dibangun sebagai perpustakaan dinamis dengan API lengkap.
Anda hanya perlu menambahkannya tergantung pada proyek dan melakukan beberapa panggilan.
Bahasa itu sendiri menyediakan fungsionalitas untuk bekerja sebagai bahasa yang disematkan.
Pada saat yang sama, operabilitas bersamaan dengan bahasa dan perpustakaan pihak ketiga tidak dilanggar.
Kami mendapatkan bahasa yang tertanam yang dapat menggunakan kekuatan penuh dari berbagai kerangka kerja yang ditulis di dalamnya.
Hancurkan + JVM
Dia mulai mengembangkan versi penerjemah untuk JVM.
Mungkin, setelah jumlah waktu ke-N, posting pada topik ini akan muncul di hub.
Ringkasan
Tidak ada hasil tertentu. Ini adalah presentasi sementara hasil.
Semoga sukses untuk semua orang di tahun 2020.