Việc phát hành ngôn ngữ lập trình Crystal 1.16 đã đượ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ữ này sử dụng kiểm tra kiểu tĩnh, được triển khai mà không cần phải chỉ định rõ ràng loại biến và đối số phương thức trong mã. Các chương trình Crystal đượ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 ra 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 ràng buộc được viết bằng C. Việc song song hóa 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 ở chế độ 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 bộ các hàm tiêu biểu, 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, bạn có thể sử dụng lệnh "crystal play" để tạo giao diện web (localhost:8080 theo mặc định) để thực thi tương tác mã Crystal.
Sự thay đổi chính:
- Đã thêm hỗ trợ thử nghiệm cho việc chạy các luồng nhẹ (fiber) trong các bối cảnh thực thi riêng biệt (Bối cảnh thực thi), cho phép thực thi song song các tác vụ hiệu quả hơn - việc chặn các luồng trong một bối cảnh không dẫn đến việc dừng thực thi trong bối cảnh khác. mt_context = Fiber::ExecutionContext::MultiThreaded.new("worker-threads", 4) 10.times thực hiện mt_context.spawn thực hiện do_something kết thúc kết thúc gtk = Fiber::ExecutionContext::Isolated.new("Gtk") thực hiện Gtk.main kết thúc gtk.wait
- Phương thức Slice.literal hiện cung cấp suy luận kiểu cho các phần tử có trong một lát cắt và bổ sung hỗ trợ làm việc trong trình thông dịch.
- Các macro sizeof và alignof cung cấp thông tin về các kiểu ổn định.
- Các phương thức mới đã được thêm vào thư viện chuẩn: Indexable#find, #find!, EventLoop#wait_readable và #wait_writable.
- Trình biên dịch có phiên bản dài của tùy chọn "-o", "--output" và khả năng chỉ định thư mục thay vì tệp đã được triển khai (tên tệp sẽ được chọn theo tên tệp có mã).
- Trình tạo tài liệu hiện có khả năng bao gồm các đối tượng riêng tư và được bảo vệ, cũng như các đối tượng trong ràng buộc thư viện (lib, fun, union, cstruct, external, type) trong tài liệu.
- Trong "File.match?" Phương pháp Một thuật toán khớp đường dẫn tệp mới đã được triển khai, giúp loại bỏ một số vấn đề và hạn chế. Ví dụ, ký tự thoát (mặt nạ "\\t" khớp với "\t" nhưng không khớp với ký tự "t"), phân tách đường dẫn (mặt nạ "a**" khớp với "ab" nhưng không thành công với "ab/c", trong khi mặt nạ "**/a" khớp với "a"), các mẫu lồng nhau (mặt nạ "{[}]}" khớp với "}") và phạm vi (mặt nạ "[a-]" khớp với "-") hiện đã được xử lý chính xác.
- Các hậu tố "?" đã bị loại bỏ trong tên của các tham số trong định nghĩa (defs), macro và khối. Và "!".
- Trong các phương thức Enumerable#sum và #product, việc xác định tự động kiểu trả về đã bị loại bỏ nếu kiểu phần tử là hợp nhất. Khi gọi các phương thức này, bây giờ bạn cần chỉ định rõ loại, ví dụ, thay vì “[1, 10000000000_u64].sum”, bạn nên viết “[1, 10000000000_u64].sum(0_u64)”.
- HTTP::Request đảm bảo phân tích cú pháp chính xác các phần URL.
- Đã thêm hỗ trợ cho bộ biên dịch LLVM 20.
- Các lệnh gọi tới LLVM::ABI và LLVM::TargetMachine#abi đã không còn được sử dụng nữa.
Nguồn: opennet.ru
