
สวัสดีทุกท่านในปีใหม่ 2020
ตั้งแต่มีการตีพิมพ์ครั้งแรก ผ่านไปเกือบ 1 ปีพอดีนับตั้งแต่ Mash
ตลอดทั้งปีนี้ ภาษาได้รับการปรับปรุงอย่างมีนัยสำคัญ มีการคิดทบทวนในหลายๆ ด้าน และมีการกำหนดทิศทางการพัฒนา
ฉันมีความสุขที่ได้แบ่งปันสิ่งเหล่านี้กับชุมชน
ข้อจำกัดความรับผิดชอบ
โครงการนี้ได้รับการพัฒนาขึ้นด้วยความกระตือรือร้นล้วนๆ และไม่ได้อ้างความโดดเด่นระดับโลกในด้านภาษาการเขียนโปรแกรมแบบไดนามิก!
การพัฒนานี้ไม่ควรได้รับการพิจารณาให้เป็นมาตรฐานที่ใครๆ ควรพยายามบรรลุถึง แม้ว่าโครงการนี้จะไม่เหมาะสมนัก แต่ก็ยังคงพัฒนาต่อไป
คอมไพเลอร์ใหม่
ในสาขา /mashc ของที่เก็บโครงการ คุณจะเห็นคอมไพเลอร์เวอร์ชันใหม่ ซึ่งเขียนด้วย Mash (เวอร์ชันแรกของภาษา)
คอมไพเลอร์มีตัวสร้างโค้ดในรายการ asm (สำหรับแอสเซมเบลอร์สำหรับสแต็ก VM)
ขณะนี้ฉันกำลังพัฒนาเวอร์ชันของเครื่องกำเนิดไฟฟ้าสำหรับ Java (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
...
หากเกิดการสืบทอด เราก็สามารถทำการเรียกแบบสืบทอดได้อย่างง่ายดาย (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
การแทนที่แบบไดนามิกของวิธีการบนอินสแตนซ์คลาส:
...
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
อย่างไรก็ตาม ตัวดำเนินการ Super จะทำงานได้อย่างถูกต้องเมื่อเรียกตามนี้
ข้อยกเว้น
ในเวอร์ชันใหม่ของภาษาจะได้รับการปฏิบัติเหมือนเป็นคลาส:
...
try:
raise new Exception(
"My raised exception!"
)
catch E:
if E is Exception:
println(E)
else:
println("Unknown exception class!")
end
end
...
ค่า enum ใหม่
ขณะนี้องค์ประกอบการแจงนับสามารถกำหนดค่าคงที่ได้:
enum MyEnum [
meFirst = "First",
meSecond = 2,
meThird
]
...
k ?= meSecond
...
if k in MyEnum:
...
end
ภาษาโปรแกรมแบบฝังตัว
มีความเป็นไปได้ที่ Mash อาจพบช่องทางของตัวเองในฐานะภาษาการเขียนโปรแกรมแบบฝังตัว เช่นเดียวกับ Lua
หากต้องการเริ่มใช้ Mash เพื่อวัตถุประสงค์เหล่านี้ คุณไม่จำเป็นต้องสร้างโครงการด้วยตัวเอง
Mash มี Runtime Environment ซึ่งเป็น VM ที่ใช้สแต็กซึ่งสร้างขึ้นเป็นไลบรารีแบบไดนามิกพร้อม API เต็มรูปแบบ
สิ่งที่คุณต้องทำคือเพิ่มลงในสิ่งที่ต้องมีของโครงการของคุณและโทรสองสามครั้ง
ภาษานี้มีฟังก์ชันการทำงานเพื่อใช้เป็นภาษาฝังตัว
ในเวลาเดียวกัน ฟังก์ชันการทำงานที่เชื่อมโยงกับภาษาและไลบรารีของบุคคลที่สามก็ไม่ได้รับผลกระทบ
เราได้รับภาษาฝังตัวที่สามารถใช้พลังเต็มรูปแบบของเฟรมเวิร์กต่างๆ ที่เขียนอยู่ในนั้นได้
แมช + เจวีเอ็ม
เริ่มพัฒนาเวอร์ชันของตัวแปลสำหรับ JVM
บางทีหลังจากผ่านไปสักระยะหนึ่ง อาจมีโพสต์เกี่ยวกับหัวข้อนี้ปรากฏบน Habr
ผลของการ
ไม่มีผลลัพธ์ที่เจาะจง นี่เป็นเพียงการนำเสนอผลลัพธ์เบื้องต้น
ขอให้ทุกคนโชคดีในปี 2020
ที่มา: will.com
