Rust 1.78 đã được phát hành. Ngôn ngữ Borgo kết hợp thế mạnh của Go và Rust

Ngôn ngữ lập trình đa năng Rust 1.78, được thành lập bởi dự án Mozilla nhưng hiện được phát triển dưới sự bảo trợ của tổ chức phi lợi nhuận độc lập Rust Foundation, đã được phát hành. Ngôn ngữ tập trung vào sự an toàn của bộ nhớ và cung cấp phương tiện để đạt được tính song song công việc cao trong khi tránh sử dụng trình thu gom rác và thời gian chạy (thời gian chạy được giảm xuống để khởi tạo và bảo trì cơ bản của thư viện chuẩn).

Các phương pháp xử lý bộ nhớ của Rust cứu nhà phát triển khỏi các lỗi khi thao tác với con trỏ và bảo vệ chống lại các sự cố phát sinh do xử lý bộ nhớ ở mức độ thấp, chẳng hạn như truy cập vùng bộ nhớ sau khi nó được giải phóng, hủy bỏ tham chiếu con trỏ null, tràn bộ đệm, v.v. Để phân phối các thư viện, cung cấp các bản dựng và quản lý các phụ thuộc, dự án phát triển trình quản lý gói Hàng hóa. Kho lưu trữ crates.io được hỗ trợ để lưu trữ thư viện.

An toàn bộ nhớ được cung cấp trong Rust tại thời điểm biên dịch thông qua kiểm tra tham chiếu, theo dõi quyền sở hữu đối tượng, theo dõi thời gian tồn tại của đối tượng (phạm vi) và đánh giá tính chính xác của quyền truy cập bộ nhớ trong quá trình thực thi mã. Rust cũng cung cấp khả năng bảo vệ chống tràn số nguyên, yêu cầu khởi tạo bắt buộc các giá trị biến trước khi sử dụng, xử lý lỗi tốt hơn trong thư viện chuẩn, áp dụng khái niệm tham chiếu và biến bất biến theo mặc định, cung cấp kiểu gõ tĩnh mạnh để giảm thiểu lỗi logic.

Những đổi mới chính:

  • Một không gian tên thuộc tính mới "#[diagnostic]" đã được đề xuất, cung cấp một phương tiện để tác động đến các thông báo lỗi do trình biên dịch tạo ra. Thuộc tính đầu tiên trong không gian mới là thuộc tính "#[diagnostic::on_unimplemented]", thuộc tính này có thể được sử dụng để tùy chỉnh các thông báo lỗi được đưa ra trong trường hợp bạn cần sử dụng một đặc điểm không được triển khai cho loại đó. #[diagnostic::on_unimplemented( message = "Thông báo của tôi cho `ImportantTrait<{A}>` không được triển khai cho `{Self}`", label = "My Label", note = "Note 1", note = "Note 2" )] đặc điểm Quan trọngTrait {} fn use_my_trait(_: impl Quan trọngTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Tin nhắn của tôi cho `ImportantTrait ` không được triển khai cho `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^ ^^ ^^ ^^ ^^ ^^ ^^ Nhãn của tôi | | | được yêu cầu bởi một ràng buộc được giới thiệu bởi cuộc gọi này | = help: đặc điểm `ImportantTrait ` không được triển khai cho `String` = note: Note 18 = note: Note 12
  • Giờ đây, các hoạt động kiểm tra xác nhận trước áp dụng cho các hàm không an toàn có thể được hoãn lại cho đến khi tạo mã, cho phép thực hiện các kiểm tra này mà không cần xây dựng thư viện chuẩn ở chế độ "#[cfg(debug_assertions)]". Để kích hoạt kiểm tra, giờ đây bạn chỉ cần bật xác nhận gỡ lỗi cho các bản dựng thử nghiệm hoặc gỡ lỗi mã của mình.
  • Hoạt động của các hàm trong thư viện chuẩn ảnh hưởng đến việc căn chỉnh các con trỏ và lát cắt hiện có thể dự đoán được trong thời gian chạy và phụ thuộc vào dữ liệu đầu vào. Hàm con trỏ::align_offset, tính toán độ lệch để căn chỉnh con trỏ, giờ đây chỉ trả về useize::MAX nếu thao tác thất bại. Cả hai hàm slice::align_to và slice::align_to_mut đều biến đổi các lát cắt thành một biểu diễn với một lát cắt ở giữa được căn chỉnh và các lát cắt bắt đầu và kết thúc ban đầu, giờ đây luôn trả về phần giữa lớn nhất.
  • Sau đây đã được chuyển sang loại ổn định:
    • impl Đọc cho &Stdin
    • Cho phép sử dụng thời gian tồn tại không tĩnh (không tĩnh) đối với một số triển khai liên quan đến std::error::Error.
    • Triển khai thực hiện ?Giá trị kích thước được cho phép.
    • ngụ ý từ cho io::Lỗi
  • Hàm Barrier::new() đã được ổn định để sử dụng với thuộc tính "const" trong bất kỳ ngữ cảnh nào thay vì hằng số.
  • Dành cho nền tảng đích x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm và i686-pc-windows-gnullvm bây giờ yêu cầu ít nhất phiên bản Windows 10.
  • Cấp độ hỗ trợ thứ ba đã được triển khai cho các nền tảng wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf và loongarch64-unknown-linux-musl. Cấp độ thứ ba bao gồm hỗ trợ cơ bản nhưng không có thử nghiệm tự động, xuất bản các bản dựng chính thức hoặc kiểm tra xem mã có thể được xây dựng hay không.
  • Mức hỗ trợ thứ hai cho nền tảng đích Thêm wasm32-wasip1 đã được triển khai. Mức hỗ trợ thứ hai liên quan đến việc đảm bảo lắp ráp.
  • Nền tảng wasm32-wasi-preview1-thread đã được đổi tên thành wasm32-wasip1-threads.
  • Trình biên dịch đã được chuyển sang sử dụng LLVM 18. Khi sử dụng LLVM 18 cho kiến ​​trúc x86-32 và x86-64, ABI liên kết với loại u128 và i128 đã được thay đổi.
  • Trong Trình quản lý hiệp ước hàng hóa, phiên bản 4 của tệp khóa (lockfile v4) đã được ổn định.
  • Cargo có bộ đệm toàn cầu ổn định với thông tin về việc sử dụng dữ liệu mới nhất. Bộ nhớ đệm được lưu trữ trong $CARGO_HOME/.global-cache bằng cách sử dụng SQLite và được cập nhật tự động để phản ánh những thay đổi mới nhất đối với chỉ mục, tệp thùng, thư mục mã, bản sao git và kiểm tra git.

Ngoài ra, ngôn ngữ lập trình Borgo cố gắng diễn đạt nhiều hơn ngôn ngữ Go nhưng ít phức tạp hơn ngôn ngữ Rust. Borgo kết hợp những tính năng tốt nhất của Go và Rust, bù đắp những thiếu sót của từng ngôn ngữ. Ví dụ: Go đơn giản và dễ hiểu nhưng không cung cấp các tính năng an toàn loại nâng cao. Ngôn ngữ Rust cung cấp các công cụ để lập trình an toàn nhưng lại quá phức tạp. Dự án đang được phát triển bởi Marco Sampellegrini, tác giả cuốn Sổ tay Haskell đơn giản và nhà phát triển hệ thống tích hợp liên tục Quad CI.

Rust 1.78 đã được phát hành. Ngôn ngữ Borgo kết hợp thế mạnh của Go và Rust

Borgo sử dụng kiểu gõ tĩnh, kiểu giống Go và cú pháp giống Rust. Dấu chấm phẩy là tùy chọn ở cuối dòng trong mã Borgo. Mã Borgo được biên dịch thành bản trình bày Go hoàn toàn tương thích với các gói Go hiện có. Mã trình biên dịch được viết bằng Rust và được phân phối theo giấy phép ISC. sử dụng fmt enum NetworkState { Đang tải, Thất bại(int), Thành công(T), } struct Phản hồi { tiêu đề: chuỗi, thời lượng: int, } fn main() { let res = Phản hồi { tiêu đề: “Xin chào thế giới”, thời lượng: 0, } let state = NetworkState.Success(res) let msg = trạng thái khớp { NetworkState.Loading => “vẫn đang tải”, NetworkState.Failed(code) => fmt.Sprintf(“Đã nhận được mã lỗi: %d”, code), NetworkState.Success (res) => res.title, } fmt.Println(msg) }

Nguồn: opennet.ru

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