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

Có sẵn phát hành bộ công cụ Haxe 4.0, 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 phân phối bởi theo giấy phép GPLv2, thư viện tiêu chuẩn và máy ảo được phát triển cho Haxe Neko theo giấy phép MIT.

Ngôn ngữ là định hướng biểu hiện với khả năng gõ mạnh mẽ. Các khái niệm lập trình hướng đối tượng, chung và chức năng được hỗ trợ.
Cú pháp Haxe gần với ECMAScript và mở rộng các tính năng của nó như gõ tĩnh, suy luận 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, định nghĩa mảng đơn giản, 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 , các lớp và biểu thức, nội suy chuỗi ("Tên tôi là $name'), tham số loại ("new Main‹String>('foo')") và nhiều hơn nữa.

Kiểm tra lớp học {
hàm tĩnh chính() {
người var = [
"Elizabeth" => "Lập trình",
"Joel" => "Thiết kế"
];

for (tên trong people.keys()) {
var job = people[name];
trace('$name làm công việc $ để kiếm sống!');
}
}
}

Chính đổi mới phiên bản 4.0:

  • Cú pháp mới để chỉ định loại hàm "(name:String, age:Int)->Bool" hoặc "(String, Int)->Bool" thay vì "String->Int->Bool".
  • Cú pháp của hàm mũi tên là "(a, b) -> a + b" thay vì "function(a, b) return a + b".
  • Bảo vệ khỏi các vấn đề liên quan đến việc sử dụng giá trị Null (tính năng thử nghiệm, được bật tùy chọn cho một số trường, lớp hoặc gói nhất định).
  • Từ khóa "cuối cùng" dành cho các trường lớp và các biến cục bộ không thể thay đổi. "cuối cùng" cũng có thể được sử dụng để xác định các hàm nhằm ngăn chúng bị ghi đè bởi tính kế thừa và đối với các lớp/giao diện không thể được kế thừa.
  • Hỗ trợ Tiêu chuẩn Unicode cho loại cơ sở "Chuỗi" trên tất cả các mục tiêu biên dịch ngoại trừ Neko.
  • Trình thông dịch tích hợp được viết lại từ đầu, hiện có tên Đánh giá. Nhờ trình thông dịch mới, tập lệnh và macro chạy nhanh hơn nhiều. Chế độ gỡ lỗi tương tác được hỗ trợ.
  • Hệ thống mục tiêu mới để biên dịch (đích) liên kết băm - thời gian chạy hiệu suất cao được thiết kế dành riêng cho Haxe, hỗ trợ biên dịch thành mã byte cho JIT hoặc C, tích hợp dễ dàng với C, cũng như truy cập vào các loại số và con trỏ cấp thấp.
  • Mục tiêu JVM mới - cho phép bạn tạo mã byte jvm bằng cách bỏ qua bước biên dịch mã Java bằng cách thêm cờ "-D jvm" khi nhắm mục tiêu trong Java.
  • Khả năng triển khai nội tuyến tại điểm gọi hàm hoặc hàm tạo, ngay cả khi chúng không được khai báo như vậy.
  • Khả năng hòa nhập phần mở rộng tĩnh khi khai báo một loại (chẳng hạn như "enum") bằng cách sử dụng "@:using(path.ToExtension)".
  • Các kiểu trừu tượng hiện hỗ trợ phiên bản "set" của toán tử "@:op(ab)" để tải lại các biểu thức "obj.foo = bar".
  • Cú pháp vòng lặp "for" hiện hỗ trợ lặp lại khóa-giá trị: "for (key => value in Collection) {}".
  • Hỗ trợ sử dụng đánh dấu giống xml trong các biểu thức: “var a = ‹hi/>;”. Hiện tại, tính năng này chỉ khả dụng để phân tích cú pháp bằng macro và đang ở giai đoạn thiết kế.
  • Cú pháp cho các trường tùy chọn trong ký hiệu “đầy đủ” của các loại cấu trúc ẩn danh là: “{ var ?f:Int; }" (một cách thay thế cho từ viết tắt "{ ?f:Int }").
  • Giá trị Enum bây giờ có thể là giá trị mặc định cho các đối số hàm: "function foo‹T></(option:Option‹T> = None)".
  • Cú pháp "enum abstract Name(BasicType) {}" không còn yêu cầu tiền tố "@:" trong "enum".
  • Tự động đánh số cho bảng liệt kê trừu tượng:

    enum tóm tắt Foo(Int) {
    var A; // 0
    biến B; // 1
    }
    thanh trừu tượng enum (Chuỗi) {
    var A; // "MỘT"
    biến B; // "B"
    }

  • Từ khóa "extern" không còn yêu cầu sử dụng tiền tố "@:".
  • Đã xóa tùy chọn "thực hiện Dynamic" để truy cập các trường lớp thông qua chuỗi. Có sẵn cho các lớp bên ngoài hoặc thông qua việc triển khai theo kiểu trừu tượng.
  • Đã thêm cú pháp "A & B" cho giao điểm loại, hiện chỉ áp dụng cho các cấu trúc ẩn danh và ràng buộc tham số loại. Cú pháp ràng buộc cũ đã bị xóa.
  • Tạo các phiên bản "Bản đồ" trống có sẵn thông qua cú pháp "var map:Map‹Int, String> = [];" tương tự như một mảng.
  • Đã thêm cấu trúc dữ liệu "haxe.ds.ReadOnlyArray".
  • Siêu dữ liệu hiện có thể có không gian tên (“@:prefix.name function() {…}”). Tương tự với định nghĩa: “#if (some.flag... #end”.
  • Giao thức dịch vụ mới cho IDE được sử dụng trong plugin cho VSCode.
  • Đã cập nhật các định nghĩa bên ngoài (bên ngoài) cho API Web và bổ sung các định nghĩa còn thiếu.

Nguồn: opennet.ru

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