با سلام به همه در سال جدید 2020.
از زمان انتشار اولین
در این سال، زبان بسیار پیشرفت کرد، بسیاری از جنبه های آن مورد بررسی قرار گرفت و بردار توسعه مشخص شد.
من خوشحالم که همه اینها را با جامعه به اشتراک می گذارم.
سلب مسئولیت
این پروژه صرفاً با اشتیاق در حال توسعه است و تظاهر به سلطه جهانی در زمینه زبان های برنامه نویسی پویا ندارد!
این توسعه نباید به عنوان استانداردی در نظر گرفته شود که باید برای آن تلاش کرد؛ پروژه ایده آل نیست، اما با این وجود در حال توسعه است.
کامپایلر جدید
در شاخه mashc / مخزن پروژه، می توانید نسخه جدیدی از کامپایلر را مشاهده کنید که به زبان Mash (نسخه اول زبان) نوشته شده است.
کامپایلر دارای یک مولد کد در لیست asm است (برای اسمبلر برای یک ماشین مجازی مبتنی بر پشته).
در حال حاضر من در حال توسعه نسخه ای از ژنراتور برای جاوا هستم (JDK 1.8).
نسخه جدید کامپایلر به طور کامل از عملکرد نسخه اول زبان پشتیبانی می کند و آن را تکمیل می کند.
OOP جدید
در نسخه جدید زبان، کار با کلاس ها تا حدی بازطراحی شده است.
متدهای کلاس را می توان هم در بدنه کلاس و هم در خارج از آن اعلان کرد.
کلاس اکنون یک سازنده صریح دارد: 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
...
اگر وراثت رخ دهد، پس ما این فرصت را داریم که به راحتی تماس های ارثی (فوق العاده) برقرار کنیم.
کد مثال:
...
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
نادیده گرفتن دینامیک متدها در نمونه های کلاس:
...
func Polymorph::NewFoo(c):
return $a + $b + c
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30) // 60
بسته ها / فضاهای نام
فضای نام باید تمیز بماند!
بر این اساس زبان باید این فرصت را فراهم کند.
در Mash، اگر متد کلاس ایستا باشد، می توان آن را با خیال راحت از هر بخشی از کد فراخوانی کرد.
به عنوان مثال:
...
class MyPackage:
func MyFunc(a, b):
return a + b
end
end
...
println( MyPackage -> MyFunc(10, 20) ) // 30
به هر حال، اپراتور فوق العاده با این روش به درستی کار خواهد کرد.
استثنا
در نسخه جدید زبان با آنها مانند کلاس ها رفتار می شود:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
شماره جدید
اکنون می توان به عناصر شمارش مقادیر ثابتی اختصاص داد:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
زبان تعبیه شده
به طور بالقوه، Mash می تواند جایگاه خود را به عنوان یک زبان برنامه نویسی تعبیه شده، مشابه Lua پیدا کند.
برای شروع استفاده از Mash برای این اهداف، حتی نیازی نیست خودتان پروژه را مونتاژ کنید.
Mash یک Runtime Environment دارد - یک VM مبتنی بر پشته که به عنوان یک کتابخانه پویا با یک API کامل کامپایل شده است.
تنها کاری که باید انجام دهید این است که آن را به وابستگی پروژه اضافه کنید و چند تماس برقرار کنید.
خود زبان قابلیتی را برای کار به عنوان یک زبان جاسازی شده فراهم می کند.
در عین حال، عملکرد در ارتباط با زبان و کتابخانه های شخص ثالث تحت تأثیر قرار نمی گیرد.
ما یک زبان تعبیه شده دریافت می کنیم که می تواند از تمام قدرت فریمورک های مختلف نوشته شده در آن استفاده کند.
Mash + JVM
من شروع به توسعه نسخه ای از مترجم برای JVM کردم.
شاید پس از N مدت زمان، پستی در مورد این موضوع در Habré ظاهر شود.
نمایش نتایج: از
هیچ نتیجه خاصی وجود ندارد. این یک نمایش متوسط از نتایج است.
برای همه در سال 2020 موفق باشید.
منبع: www.habr.com