สวัสดีทุกคนในปีใหม่ 2020
นับตั้งแต่มีการพิมพ์ครั้งแรก
ในระหว่างปีนี้ ภาษาได้รับการปรับปรุงอย่างมาก มีการพิจารณาแง่มุมต่างๆ มากมาย และกำหนดเวกเตอร์ของการพัฒนา
ฉันยินดีที่จะแบ่งปันทั้งหมดนี้กับชุมชน
ข้อจำกัดความรับผิดชอบ
โปรเจ็กต์นี้ได้รับการพัฒนาด้วยความกระตือรือร้นเท่านั้น และไม่ได้เสแสร้งว่าเป็นผู้ครอบครองโลกในด้านภาษาการเขียนโปรแกรมแบบไดนามิก!
การพัฒนานี้ไม่ควรถือเป็นมาตรฐานที่จะต้องมุ่งมั่น โครงการนี้ไม่เหมาะ แต่กำลังพัฒนาอยู่
คอมไพเลอร์ใหม่
ในสาขา /mashc ของที่เก็บโปรเจ็กต์ คุณสามารถดูเวอร์ชันใหม่ของคอมไพเลอร์ ซึ่งเขียนด้วยภาษา Mash (เวอร์ชันแรกของภาษา)
คอมไพเลอร์มีตัวสร้างโค้ดในรายการ asm (สำหรับแอสเซมเบลอร์สำหรับ VM แบบสแต็ก)
ขณะนี้ฉันกำลังพัฒนาเวอร์ชันของตัวสร้างสำหรับ Java (JDK 1.8)
คอมไพเลอร์เวอร์ชันใหม่รองรับฟังก์ชันการทำงานของภาษาเวอร์ชันแรกอย่างสมบูรณ์และเสริมด้วย
อ๊อฟใหม่
ในภาษาเวอร์ชันใหม่ การทำงานกับคลาสได้รับการออกแบบใหม่บางส่วน
วิธีการเรียนสามารถประกาศได้ทั้งในเนื้อหาของชั้นเรียนและภายนอก
ขณะนี้คลาสมี Constructor ที่ชัดเจน: 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
อย่างไรก็ตาม super Operator จะทำงานได้อย่างถูกต้องเมื่อถูกเรียกด้วยวิธีนี้
ข้อยกเว้น
ในภาษาเวอร์ชันใหม่ พวกเขาจะถือว่าเป็นคลาส:
...
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 มีสภาพแวดล้อมรันไทม์ - VM แบบสแต็กที่คอมไพล์เป็นไลบรารีไดนามิกพร้อม API เต็มรูปแบบ
สิ่งที่คุณต้องทำคือเพิ่มมันลงในการพึ่งพาโปรเจ็กต์และโทรออกสองสามครั้ง
ภาษานั้นมีฟังก์ชันการทำงานเป็นภาษาฝังตัว
ในเวลาเดียวกัน ประสิทธิภาพการทำงานร่วมกับภาษาและไลบรารีของบริษัทอื่นจะไม่ได้รับผลกระทบ
เราได้รับภาษาฝังตัวที่สามารถใช้พลังเต็มรูปแบบของกรอบงานต่างๆ ที่เขียนลงไปได้
มาช + JVM
ฉันเริ่มพัฒนาเวอร์ชันของนักแปลสำหรับ JVM
บางทีหลังจากผ่านระยะเวลา N โพสต์ในหัวข้อนี้จะปรากฏบนHabré
ผลของการ
ไม่มีผลลัพธ์ที่เฉพาะเจาะจง นี่คือการแสดงผลลัพธ์ระดับกลาง
ขอให้ทุกคนโชคดีในปี 2020
ที่มา: will.com