การเปิดตัวภาษาการเขียนโปรแกรม Haxe 4.0

มีอยู่ การเปิดตัวชุดเครื่องมือ เฮ็กซ์ 4.0ซึ่งรวมถึงภาษาการเขียนโปรแกรมระดับสูงแบบหลายกระบวนทัศน์ที่มีชื่อเดียวกันพร้อมการพิมพ์ที่ชัดเจน คอมไพเลอร์ข้าม และไลบรารีฟังก์ชันมาตรฐาน โปรเจ็กต์รองรับการแปลเป็น C++, HashLink/C, JavaScript, C#, Java, PHP, Python และ Lua รวมถึงการคอมไพล์เป็น JVM, HashLink/JIT, Flash และ Neko bytecode พร้อมการเข้าถึงความสามารถดั้งเดิมของแต่ละแพลตฟอร์มเป้าหมาย รหัสคอมไพเลอร์ จัดจำหน่ายโดย ภายใต้ใบอนุญาต GPLv2 และไลบรารีมาตรฐานและเครื่องเสมือนที่พัฒนาขึ้นสำหรับ Haxe Neko ภายใต้ใบอนุญาต MIT

ภาษาคือ เน้นการแสดงออก ด้วยการพิมพ์ที่แข็งแกร่ง รองรับแนวคิดการเขียนโปรแกรมเชิงวัตถุ ทั่วไป และเชิงฟังก์ชัน
ไวยากรณ์ Haxe ใกล้เคียงกับ ECMAScript และ ขยาย คุณลักษณะต่างๆ เช่น การพิมพ์แบบคงที่ การอนุมานแบบอัตโนมัติ การจับคู่รูปแบบ ข้อมูลทั่วไป ตัววนซ้ำสำหรับลูป มาโคร AST GADT (ประเภทข้อมูลพีชคณิตทั่วไป) ประเภทนามธรรม โครงสร้างที่ไม่ระบุชื่อ คำจำกัดความของอาร์เรย์แบบง่าย นิพจน์การคอมไพล์แบบมีเงื่อนไข การแนบเมตาดาต้าเข้ากับฟิลด์ , คลาสและนิพจน์, การแก้ไขสตริง ('ชื่อของฉันคือ $name'), พิมพ์พารามิเตอร์ ("new Main‹String›('foo')") และ ล้นหลาม.

การทดสอบระดับ {
ฟังก์ชั่นคงที่ main() {
เป็นคน = [
"Elizabeth" => "การเขียนโปรแกรม",
"โจเอล" => "การออกแบบ"
];

สำหรับ (ชื่อใน people.keys()) {
งาน var = คน [ชื่อ];
Trace('$name ทำ $job เพื่อหาเลี้ยงชีพ!');
}
}
}

หลัก นวัตกรรม เวอร์ชัน 4.0:

  • ไวยากรณ์ใหม่สำหรับการระบุประเภทฟังก์ชัน "(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

เพิ่มความคิดเห็น