Ra mắt ngôn ngữ lập trình Haxe 4.2

Đã có bản phát hành bộ công cụ Haxe 4.2, bao gồm ngôn ngữ lập trình cấp cao đa mô hình cùng tên với khả năng gõ mạnh, trình biên dịch chéo và thư viện hàm tiêu chuẩn. Dự án hỗ trợ dịch sang C++, HashLink/C, JavaScript, C#, Java, PHP, Python và Lua, cũng như biên dịch sang mã byte JVM, HashLink/JIT, Flash và Neko, với quyền truy cập vào các khả năng riêng của từng nền tảng mục tiêu. Mã trình biên dịch được phân phối theo giấy phép GPLv2 và thư viện tiêu chuẩn cũng như các máy ảo HashLink và Neko được phát triển cho Haxe được cấp phép theo giấy phép MIT.

Ngôn ngữ này thiên về biểu thức với kiểu gõ mạnh mẽ. Các kỹ thuật lập trình hướng đối tượng, chung và chức năng được hỗ trợ. Cú pháp của Haxe gần giống với ECMAScript và mở rộng nó với các tính năng như gõ tĩnh, suy luận kiểu tự động, khớp mẫu, tổng quát, vòng lặp dựa trên trình lặp, macro AST, GADT (Các kiểu dữ liệu đại số tổng quát), kiểu trừu tượng, cấu trúc ẩn danh, đơn giản hóa mảng định nghĩa, biểu thức để biên dịch có điều kiện, đính kèm siêu dữ liệu vào các trường, lớp và biểu thức, nội suy chuỗi ('Tên tôi là $name'), tham số loại ('new Main("foo")') và hơn thế nữa. class Test { hàm tĩnh main() { người cuối cùng = [ "Elizabeth" => "Lập trình", "Joel" => "Thiết kế" ]; for (name => job in people) { trace('$name làm $job để kiếm sống!'); } } }

Các tính năng mới trong phiên bản 4.2:

  • Khai báo các biến và hàm tĩnh ở cấp mô-đun mà không cần phải bọc chúng trong một lớp.
  • Hỗ trợ các lớp và hàm trừu tượng “cổ điển”.
  • Việc triển khai nguyên bản các hàm biến đổi cho tất cả các nền tảng đích (haxe.Rest) và bổ sung toán tử mở rộng đối số “f(...array)”.
  • Triển khai vòng lặp sự kiện cho các luồng riêng lẻ (“sys.thread.Thread.events”).
  • Siêu dữ liệu "@:inheritDoc" để kế thừa tài liệu loại/trường.
  • Hỗ trợ nạp chồng phương thức cho các phương thức bên ngoài trên tất cả các nền tảng đích.
  • Chuyển tiếp hàm tạo làm cơ sở cho kiểu của nó sang bản tóm tắt bằng cách sử dụng siêu dữ liệu “@:forward.new”.
  • Đã thêm hàm tạo "EI" vào "haxe.macro.Expr".
  • Khả năng tạo một biến thể kiểu trừu tượng với "@:forward.variance".
  • Biểu diễn loại “Bất kỳ” là “Động” khi thống nhất biến thể.
  • Đã thêm một số loại ngoại lệ cơ bản vào gói "haxe.Exceptions".
  • Hỗ trợ đính kèm siêu dữ liệu khi khai báo biến.
  • Hàm "StringTools.unsafeCharAt" được sử dụng để lặp chuỗi.
  • eval (trình thông dịch): Đã thêm các liên kết vào "libuv" trong gói "eval.luv".
  • eval: liên kết với các triển khai gốc của "Int64" và "UInt64" thông qua gói "eval.integer".
  • cs: Triển khai ổ cắm UDP.
  • cs: mô-đun “cs.Syntax” để chèn mã C# nội tuyến.
  • jvm: Đã thêm cờ “-D jvm.dynamic-level=x” để kiểm soát số lượng tối ưu hóa được tạo cho mã động. 0 = không có, 1 = tối ưu hóa đọc/ghi trường, 2 = đóng phương thức tại thời điểm biên dịch.
  • java, jvm: Hỗ trợ cờ "--java-lib ".
  • python: triển khai API luồng.

Cải tiến chung:

  • "expr is SomeType" không yêu cầu đặt trong dấu ngoặc đơn.
  • Tăng mức độ ưu tiên cho tiện ích mở rộng loại "@:using".
  • Cho phép sử dụng tiện ích mở rộng loại tĩnh thông qua "super".
  • Khả năng đặt siêu dữ liệu thành các trường “@:noDoc”.
  • Kiểu trừu tượng "Bản đồ" được tạo thành bắc cầu.
  • Hỗ trợ "@:native" trên hàm tạo enum.
  • Hỗ trợ "@:using" khi khai báo kiểu ("typedefs").
  • Lỗi nhiều dòng sử dụng "..." làm tiền tố cho các dòng tiếp theo.
  • Suy luận kiểu đã được làm lại, cấu trúc ẩn danh được chuyển đổi tốt hơn thành kiểu rõ ràng và “đóng” khi hàm hoàn thành.
  • Suy ra loại hàm không có đối số là "()->..." thay vì "Void->...".
  • Từ khóa "chức năng" được phép làm tên gói.
  • Cải thiện nội tuyến của các đối tượng.
  • cs: Đã thêm hỗ trợ cho .NET 5.0.
  • cpp: Hỗ trợ các hàm tạo riêng cho các lớp bên ngoài.
  • php: Đã thêm "php.Syntax.customArrayDecl" để khai báo một mảng gốc.
  • php: Đã cập nhật các phương thức bên ngoài cho các hàm và lớp khác nhau.
  • php: Tối ưu hóa việc triển khai các cấu trúc ẩn danh.
  • hl: Bỏ qua quá trình biên dịch nếu không có thay đổi nào đối với mô-đun.
  • lua: Sử dụng "hx-lua-simdjson" để phân tích cú pháp json.
  • jvm: Giảm tải CPU khi triển khai "sys.thread.Lock".
  • js: Cải thiện khả năng tương thích với Trình biên dịch đóng cửa của Google.
  • An toàn Null: Hãy xem xét "@:nullSafety(Off)" khi khai báo các biến: "var @:nullSafety(Off) v".

Ngoài ra, phần bổ sung cho trình soạn thảo VSCode đã được cập nhật lên phiên bản mới của trình biên dịch, trong đó các gợi ý đã xuất hiện với việc tạo ra các trường giao diện bị thiếu, các lớp đơn giản và trừu tượng cũng như các phương thức thuộc tính.

Nguồn: opennet.ru

Thêm một lời nhận xét