Phát hành ngôn ngữ lập trình Crystal 1.5

Việc phát hành ngôn ngữ lập trình Crystal 1.5 đã được xuất bản, các nhà phát triển ngôn ngữ này đang cố gắng kết hợp sự tiện lợi của việc phát triển bằng ngôn ngữ Ruby với đặc tính hiệu suất ứng dụng cao của ngôn ngữ C. Cú pháp của Crystal gần giống nhưng không hoàn toàn tương thích với Ruby, mặc dù một số chương trình Ruby chạy mà không sửa đổi. Mã trình biên dịch được viết bằng Crystal và được phân phối theo giấy phép Apache 2.0.

Ngôn ngữ sử dụng tính năng kiểm tra kiểu tĩnh, được triển khai mà không cần chỉ định rõ ràng loại biến và đối số phương thức trong mã. Các chương trình tinh thể được biên dịch thành các tệp thực thi, với các macro được đánh giá và mã được tạo tại thời điểm biên dịch. Trong các chương trình Crystal, có thể kết nối các liên kết được viết bằng C. Việc song song thực thi mã được thực hiện bằng cách sử dụng từ khóa “spawn”, cho phép bạn chạy tác vụ nền không đồng bộ mà không chặn luồng chính, dưới dạng các luồng nhẹ gọi là sợi.

Thư viện chuẩn cung cấp một tập hợp lớn các chức năng phổ biến, bao gồm các công cụ để xử lý CSV, YAML và JSON, các thành phần để tạo máy chủ HTTP và hỗ trợ WebSocket. Trong quá trình phát triển, sẽ rất thuận tiện khi sử dụng lệnh “crystal play”, lệnh này tạo giao diện web (localhost:8080 theo mặc định) để thực thi mã tương tác bằng ngôn ngữ Crystal.

Sự thay đổi chính:

  • Trình biên dịch đã thêm tính năng kiểm tra sự tương ứng của các tên đối số trong việc triển khai một phương thức trừu tượng và trong định nghĩa của nó. Nếu có tên không khớp, một cảnh báo sẽ được đưa ra: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^— Cảnh báo: tham số vị trí 'name' tương ứng với tham số 'number' của phương thức được ghi đè FooAbstract#foo(number : Int32), có tên khác và có thể ảnh hưởng đến việc truyền đối số được đặt tên
  • Khi gán một đối số cho một phương thức chưa được gõ vào giá trị của một biến, đối số hiện bị ràng buộc theo loại của biến đó. class Foo @x : Int64 def khởi tạo(x) @x = x # tham số x sẽ được gõ @x end end
  • Cho phép bạn thêm chú thích vào tham số của phương thức hoặc macro. def foo(@[Có thể không sử dụng] x); kết thúc # được rồi
  • Đã thêm hỗ trợ cho việc sử dụng hằng số làm chỉ mục và tên trong bộ dữ liệu. KEY = "s" foo = {s: "String", n: 0} đặt foo[KEY].size
  • Các phương thức File#delete? mới đã được thêm vào API tệp để xóa tệp và thư mục. và Dir#delete?, trả về sai nếu thiếu tệp hoặc thư mục.
  • Việc bảo vệ phương thức File.tempfile đã được tăng cường, hiện không cho phép các ký tự null trong các dòng tạo thành tên tệp.
  • Đã thêm biến môi trường NO_COLOR, tắt tính năng đánh dấu màu trong đầu ra của trình biên dịch và trình thông dịch.
  • Làm việc ở chế độ thông dịch viên đã được cải thiện đáng kể.

Nguồn: opennet.ru

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