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

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

ภาษาเน้นการแสดงออกและการพิมพ์ที่แข็งแกร่ง รองรับเทคนิคการเขียนโปรแกรมเชิงวัตถุ ทั่วไป และเชิงฟังก์ชัน ไวยากรณ์ของ Haxe นั้นใกล้เคียงกับ ECMAScript และขยายออกไปด้วยฟีเจอร์ต่างๆ เช่น การพิมพ์แบบคงที่ การอนุมานประเภทอัตโนมัติ การจับคู่รูปแบบ ข้อมูลทั่วไป ตัววนซ้ำที่ใช้สำหรับลูป มาโคร AST GADT (ประเภทข้อมูลพีชคณิตทั่วไป) ประเภทนามธรรม โครงสร้างที่ไม่ระบุตัวตน ทำให้ง่ายขึ้น อาร์เรย์คำจำกัดความ, นิพจน์สำหรับการคอมไพล์แบบมีเงื่อนไข, การแนบเมทาดาทากับฟิลด์, คลาสและนิพจน์, การแก้ไขสตริง ('ชื่อของฉันคือ $name'), พารามิเตอร์ประเภท ('ชื่อหลักใหม่' (“foo”)') และอื่นๆ อีกมากมาย การทดสอบคลาส { ฟังก์ชั่นคงที่ main () { คนสุดท้าย = [ "Elizabeth" => "การเขียนโปรแกรม", "Joel" => "การออกแบบ" ]; for (name => job in people) { ติดตาม('$name ทำ $job เพื่อหาเลี้ยงชีพ!'); } } }

คุณสมบัติใหม่ในเวอร์ชัน 4.2:

  • การประกาศตัวแปรและฟังก์ชันคงที่ในระดับโมดูล โดยไม่จำเป็นต้องรวมไว้ในคลาส
  • รองรับคลาสและฟังก์ชันนามธรรม "คลาสสิก"
  • การใช้งานฟังก์ชัน variadic แบบเนทีฟสำหรับแพลตฟอร์มเป้าหมายทั้งหมด (haxe.Rest) และการเพิ่มตัวดำเนินการขยายอาร์กิวเมนต์ “f(...array)”
  • การดำเนินการวนรอบเหตุการณ์สำหรับแต่ละเธรด (“sys.thread.Thread.events”)
  • ข้อมูลเมตา "@:inheritDoc" สำหรับการสืบทอดเอกสารประเภท/ฟิลด์
  • รองรับวิธีการโอเวอร์โหลดสำหรับวิธีการภายนอกบนแพลตฟอร์มเป้าหมายทั้งหมด
  • การส่งต่อตัวสร้างที่อยู่ภายใต้ประเภทของมันไปยังนามธรรมโดยใช้ข้อมูลเมตา "@:forward.new"
  • เพิ่มตัวสร้าง "EIs" ใน "haxe.macro.Expr"
  • ความสามารถในการสร้างตัวแปรประเภทนามธรรมด้วย "@:forward.variance"
  • การแสดงประเภท "ใดๆ" เป็น "ไดนามิก" เมื่อรวมรูปแบบต่างๆ
  • เพิ่มข้อยกเว้นพื้นฐานบางประเภทให้กับแพ็คเกจ "haxe.Exceptions"
  • รองรับการแนบข้อมูลเมตาเมื่อประกาศตัวแปร
  • ฟังก์ชัน "StringTools.unsafeCharAt" ใช้สำหรับการวนซ้ำสตริง
  • eval (ล่าม): เพิ่มการผูกเข้ากับ "libuv" ในแพ็คเกจ "eval.luv"
  • eval: เชื่อมโยงกับการใช้งานดั้งเดิมของ "Int64" และ "UInt64" ผ่านแพ็คเกจ "eval.integers"
  • cs: การใช้งานซ็อกเก็ต UDP
  • cs: โมดูล “cs.Syntax” สำหรับการแทรกโค้ด C# แบบอินไลน์
  • jvm: เพิ่มแฟล็ก “-D jvm.dynamic-level=x” เพื่อควบคุมจำนวนการปรับให้เหมาะสมที่สร้างขึ้นสำหรับโค้ดไดนามิก 0 = ไม่มี, 1 = การเพิ่มประสิทธิภาพการอ่าน/เขียนฟิลด์, 2 = การปิดเมธอด ณ เวลาคอมไพล์
  • java, jvm: รองรับแฟล็ก "--java-lib <directory>"
  • หลาม: การใช้เธรด API

การปรับปรุงทั่วไป:

  • "expr คือ SomeType" ไม่จำเป็นต้องใส่วงเล็บ
  • เพิ่มลำดับความสำคัญสำหรับส่วนขยายประเภท "@:using"
  • อนุญาตให้ใช้ส่วนขยายประเภทคงที่ผ่าน "super"
  • ความสามารถในการตั้งค่าข้อมูลเมตาเป็นช่อง “@:noDoc”
  • ประเภทนามธรรม "แผนที่" ถูกสร้างขึ้นแบบสกรรมกริยา
  • รองรับ "@:native" บนตัวสร้าง enum
  • รองรับ "@:using" ในการประกาศประเภท ("typedefs")
  • ข้อผิดพลาดหลายบรรทัดใช้ "..." เป็นคำนำหน้าสำหรับบรรทัดถัดไป
  • การอนุมานประเภทได้รับการปรับปรุงใหม่ โครงสร้างที่ไม่ระบุชื่อจะถูกแปลงเป็นประเภทที่ชัดเจนได้ดีขึ้น และ "ปิด" เมื่อฟังก์ชันเสร็จสมบูรณ์
  • การอนุมานประเภทของฟังก์ชันที่ไม่มีอาร์กิวเมนต์เป็น "()->..." แทนที่จะเป็น "Void->..."
  • คีย์เวิร์ด "function" ได้รับอนุญาตให้เป็นชื่อแพ็กเกจ
  • ปรับปรุงการอินไลน์ของวัตถุ
  • cs: เพิ่มการรองรับ .NET 5.0
  • cpp: รองรับคอนสตรัคเตอร์ดั้งเดิมสำหรับคลาสภายนอก
  • php: เพิ่ม "php.Syntax.customArrayDecl" เพื่อประกาศอาร์เรย์ดั้งเดิม
  • PHP: อัปเดตวิธีการภายนอกสำหรับฟังก์ชันและคลาสต่างๆ
  • php: เพิ่มประสิทธิภาพการใช้งานโครงสร้างที่ไม่ระบุชื่อ
  • hl: ข้ามการคอมไพล์หากไม่มีการเปลี่ยนแปลงโมดูล
  • lua: การใช้ "hx-lua-simdjson" เพื่อแยกวิเคราะห์ json
  • jvm: ลดภาระของ CPU ในการใช้งาน "sys.thread.Lock"
  • js: ปรับปรุงความเข้ากันได้กับ Google Closed Compiler
  • ความปลอดภัยแบบ Null: พิจารณา "@:nullSafety(Off)" เมื่อประกาศตัวแปร: "var @:nullSafety(Off) v"

นอกจากนี้ การเพิ่มตัวแก้ไข VSCode ยังได้รับการอัปเดตเป็นเวอร์ชันใหม่ของคอมไพเลอร์ ซึ่งมีคำแนะนำปรากฏขึ้นพร้อมกับการสร้างฟิลด์อินเทอร์เฟซที่ขาดหายไป คลาสแบบง่ายและนามธรรม รวมถึงวิธีการคุณสมบัติ

ที่มา: opennet.ru

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