ภาษาคือ
ไวยากรณ์ Haxe ใกล้เคียงกับ ECMAScript และ
การทดสอบระดับ {
ฟังก์ชั่นคงที่ main() {
เป็นคน = [
"Elizabeth" => "การเขียนโปรแกรม",
"โจเอล" => "การออกแบบ"
];
สำหรับ (ชื่อใน people.keys()) {
งาน var = คน [ชื่อ];
Trace('$name ทำ $job เพื่อหาเลี้ยงชีพ!');
}
}
}
หลัก
- ไวยากรณ์ใหม่สำหรับการระบุประเภทฟังก์ชัน "(name:String, age:Int)->Bool" หรือ "(String, Int)->Bool" แทนที่จะเป็น "String->Int->Bool"
- ไวยากรณ์ของฟังก์ชันลูกศรคือ "(a, b) -> a + b" แทนที่จะเป็น "function(a, b) return a + b"
- การป้องกันปัญหาที่เกี่ยวข้องกับการใช้ค่า Null (คุณลักษณะทดลอง สามารถเลือกเปิดใช้งานได้สำหรับบางฟิลด์ คลาส หรือแพ็คเกจ)
- คีย์เวิร์ด "final" ใช้สำหรับฟิลด์คลาสและตัวแปรท้องถิ่นที่ไม่เปลี่ยนรูป "final" ยังสามารถใช้เพื่อกำหนดฟังก์ชันเพื่อป้องกันไม่ให้ถูกแทนที่โดยการสืบทอดและสำหรับคลาส/อินเทอร์เฟซที่ไม่สามารถสืบทอดได้
-
สนับสนุน มาตรฐาน Unicode สำหรับประเภทพื้นฐาน "String" บนเป้าหมายการคอมไพล์ทั้งหมดยกเว้น Neko - ล่ามในตัวเขียนใหม่ตั้งแต่ต้น ซึ่งตอนนี้มาภายใต้ชื่อ
อีวาล . ต้องขอบคุณล่ามใหม่ สคริปต์และมาโครจึงทำงานเร็วขึ้นมาก รองรับโหมดดีบักแบบโต้ตอบ - ระบบเป้าหมายใหม่สำหรับการรวบรวม (เป้าหมาย)
แฮชลิงค์ - รันไทม์ประสิทธิภาพสูงที่ออกแบบมาโดยเฉพาะสำหรับ Haxe ซึ่งรองรับการคอมไพล์เป็นโค้ดไบต์สำหรับ JIT หรือ C สามารถทำงานร่วมกับ C ได้อย่างง่ายดาย รวมถึงการเข้าถึงประเภทตัวเลขและพอยน์เตอร์ระดับต่ำ - เป้าหมาย JVM ใหม่ - อนุญาตให้คุณสร้างรหัสไบต์ jvm โดยการข้ามขั้นตอนการคอมไพล์โค้ด Java โดยการเพิ่มแฟล็ก "-D jvm" เมื่อกำหนดเป้าหมายใน Java
- ความสามารถในการปรับใช้แบบอินไลน์ ณ จุดเรียกใช้ฟังก์ชันหรือตัวสร้าง แม้ว่าจะไม่ได้ประกาศไว้ก็ตาม
- ความเป็นไปได้ของการรวม
ส่วนขยายแบบคงที่ เมื่อประกาศประเภท (เช่น "enum") โดยใช้ "@:using(path.ToExtension)" - ขณะนี้ประเภทบทคัดย่อสนับสนุนเวอร์ชัน "set" ของตัวดำเนินการ "@:op(ab)" เพื่อโหลดนิพจน์ "obj.foo = bar" อีกครั้ง
- ขณะนี้ไวยากรณ์ลูป "for" รองรับการวนซ้ำคีย์-ค่า: "for (key => value in collection) {}"
- รองรับการใช้มาร์กอัปที่มีลักษณะคล้าย xml ในนิพจน์: “var a = ‹hi/›;” ในขณะนี้ คุณลักษณะนี้มีให้ใช้สำหรับการแยกวิเคราะห์ด้วยมาโครเท่านั้น และอยู่ในขั้นตอนการออกแบบ
- ไวยากรณ์สำหรับฟิลด์ตัวเลือกในรูปแบบ “เต็ม” ของประเภทโครงสร้างที่ไม่ระบุชื่อคือ: “{ var ?f:Int; }" (ทางเลือกแทนคำสั้น "{ ?f:Int }")
- ค่า Enum สามารถเป็นค่าเริ่มต้นสำหรับอาร์กิวเมนต์ของฟังก์ชันได้แล้ว: "function foo‹T›(option:Option‹T› = None)"
- ไวยากรณ์ "enum abstract Name(BasicType) {}" ไม่ต้องการคำนำหน้า "@:" ใน "enum" อีกต่อไป
- การกำหนดหมายเลขอัตโนมัติสำหรับการแจงนับเชิงนามธรรม:
enum นามธรรม Foo (Int) {
วาร์ ก; // 0
วาร์ B; // 1
}
แถบนามธรรม enum (สตริง) {
วาร์ ก; // "ก"
วาร์ B; // "บี"
} - คำหลัก "ภายนอก" ไม่จำเป็นต้องใช้คำนำหน้า "@:" อีกต่อไป
- ลบตัวเลือก "การดำเนินการ Dynamic" เพื่อเข้าถึงฟิลด์คลาสผ่านสตริง มีให้สำหรับคลาสภายนอกหรือผ่านการนำไปใช้งานตามประเภทนามธรรม
- เพิ่มไวยากรณ์ "A & B" สำหรับการแยกประเภท ซึ่งปัจจุบันใช้กับโครงสร้างที่ไม่ระบุชื่อและข้อจำกัดพารามิเตอร์ประเภทเท่านั้น ไวยากรณ์ข้อจำกัดแบบเก่าได้ถูกลบออกแล้ว
- การสร้างอินสแตนซ์ "Map" ที่ว่างเปล่าสามารถทำได้ผ่านไวยากรณ์ "var map:Map‹Int, String› = [];" คล้ายกับอาร์เรย์
- เพิ่มโครงสร้างข้อมูล "haxe.ds.ReadOnlyArray"
- ข้อมูลเมตาสามารถมีเนมสเปซ (“@:prefix.name function() {…}”) ได้แล้ว ในทำนองเดียวกันกับคำจำกัดความ: “#if (some.flag ... #end”
- โปรโตคอลบริการใหม่สำหรับ IDE ที่ใช้
ปลั๊กอินสำหรับ VSCode . - อัปเดตคำจำกัดความภายนอก (ภายนอก) สำหรับ Web API และเพิ่มคำที่ขาดหายไป
ที่มา: opennet.ru