Ang pagpapalabas ng Rust 1.78 general-purpose programming language, na itinatag ng proyekto ng Mozilla, ngunit ngayon ay binuo sa ilalim ng auspice ng independiyenteng non-profit na organisasyon na Rust Foundation, ay nai-publish. Nakatuon ang wika sa kaligtasan ng memorya at nagbibigay ng paraan upang makamit ang mataas na parallelism sa trabaho habang iniiwasan ang paggamit ng isang basurero at runtime (runtime ay binabawasan sa pangunahing pagsisimula at pagpapanatili ng karaniwang library).
Ang mga paraan ng pangangasiwa ng memorya ng Rust ay nagliligtas sa developer mula sa mga error kapag nagmamanipula ng mga pointer at nagpoprotekta laban sa mga problemang lumitaw dahil sa mababang antas ng paghawak ng memorya, tulad ng pag-access sa isang lugar ng memorya pagkatapos na ito ay mapalaya, pag-derefer ng mga null pointer, pag-overrun ng buffer, atbp. Upang ipamahagi ang mga aklatan, magbigay ng mga build at pamahalaan ang mga dependency, bubuo ang proyekto ng Cargo package manager. Ang crates.io repository ay suportado para sa pagho-host ng mga aklatan.
Ang kaligtasan ng memorya ay ibinibigay sa Rust sa oras ng pag-compile sa pamamagitan ng pagsuri sa sanggunian, pagsubaybay sa pagmamay-ari ng bagay, pagsubaybay sa mga buhay ng bagay (mga saklaw), at pagtatasa ng kawastuhan ng pag-access sa memorya sa panahon ng pagpapatupad ng code. Nagbibigay din ang kalawang ng proteksyon laban sa mga overflow ng integer, nangangailangan ng mandatoryong pagsisimula ng mga variable na halaga bago gamitin, mas mahusay na pinangangasiwaan ang mga error sa karaniwang library, inilalapat ang konsepto ng hindi nababagong mga sanggunian at mga variable bilang default, nag-aalok ng malakas na static na pag-type upang mabawasan ang mga lohikal na error.
Mga pangunahing inobasyon:
- Ang isang bagong attribute namespace na "#[diagnostic]" ay iminungkahi, na nagbibigay ng paraan upang maimpluwensyahan ang mga mensahe ng error na ginawa ng compiler. Ang una sa bagong espasyo ay ang attribute na "#[diagnostic::on_unimplemented]," na maaaring gamitin upang i-customize ang mga mensahe ng error na itinapon sa isang sitwasyon kung saan kailangan mong gumamit ng katangian na hindi ipinatupad para sa uri. #[diagnostic::on_unimplemented( message = "Ang Aking Mensahe para sa `ImportantTrait<{A}>` ay hindi ipinatupad para sa `{Self}`", label = "My Label", note = "Note 1", note = "Note 2" )] katangiang ImportantTrait {} fn use_my_trait(_: impl ImportantTrait ) {} fn main() { use_my_trait(String::new()); } error[E32]: Aking Mensahe para sa `ImportantTrait ` ay hindi ipinatupad para sa `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^^^ My Label | | | kinakailangan ng isang bound na ipinakilala ng tawag na ito | = tulong: ang katangiang `ImportantTrait Ang ` ay hindi ipinatupad para sa `String` = note: Note 18 = note: Note 12
- Ang mga paunang igiit na pagsusuri na inilapat sa mga hindi ligtas na function ay maaari na ngayong ipagpaliban hanggang sa pagbuo ng code, na nagbibigay-daan sa mga pagsusuring ito na maisagawa nang hindi kinakailangang buuin ang karaniwang library sa "#[cfg(debug_assertions)]" mode. Upang mag-trigger ng mga pagsusuri, sapat na ngayon na i-enable ang mga pag-debug para sa pagsubok o pag-debug ng mga build ng iyong code.
- Ang pag-uugali ng mga function sa karaniwang library na nakakaapekto sa pagkakahanay ng mga pointer at slice ay nahuhulaan na ngayon sa runtime at nakadepende sa input data. Ang function na pointer::align_offset, na kinakalkula ang offset upang ihanay ang pointer, ngayon ay nagbabalik ng usize::MAX lamang kung nabigo ang operasyon. Ang mga function na slice::align_to at slice::align_to_mut pareho, na binabago ang mga hiwa sa isang representasyon na may nakahanay na gitnang hiwa at ang orihinal na simula at dulo na mga hiwa, ngayon ay palaging ibinabalik ang pinakamalaking gitnang bahagi.
- Ang mga sumusunod ay inilipat sa stable na kategorya:
- impl Basahin para sa &Stdin
- Payagan ang paggamit ng hindi static (non-static) na panghabambuhay para sa ilang std::error::Error-related na pagpapatupad.
- Pagpapatupad ng Impl ?Sized na halaga ay pinapayagan.
- impl Mula sa para sa io:: Error
- Ang Barrier::new() function ay na-stabilize upang magamit gamit ang attribute na "const" sa anumang konteksto sa halip na mga constant.
- Para sa mga target na platform x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm at i686-pc-windows-gnu ngayon ay nangangailangan ng hindi bababa sa Windows 10 na bersyon.
- Ang ikatlong antas ng suporta ay ipinatupad para sa wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf at loongarch64-unknown-linux-musl platform. Ang ikatlong antas ay nagsasangkot ng pangunahing suporta, ngunit walang automated na pagsubok, paglalathala ng mga opisyal na build, at pag-verify ng code buildability.
- Ang pangalawang antas ng suporta para sa target na platform Add wasm32-wasip1 ay ipinatupad. Ang ikalawang antas ng suporta ay nagsasangkot ng garantiya ng pagpupulong.
- Ang platform na wasm32-wasi-preview1-threads ay pinalitan ng pangalan sa wasm32-wasip1-threads.
- Ang compiler ay inilipat upang gamitin ang LLVM 18. Kapag gumagamit ng LLVM 18 para sa x86-32 at x86-64 na mga arkitektura, ang ABI na nauugnay sa mga uri ng u128 at i128 ay binago.
- Sa Cargo pact manager, ang bersyon 4 ng mga lock file (lockfile v4) ay na-stabilize.
- Ang Cargo ay may na-stabilize na global cache na may impormasyon tungkol sa pinakabagong paggamit ng data. Ang cache ay naka-host sa $CARGO_HOME/.global-cache gamit ang SQLite at awtomatikong ina-update upang ipakita ang mga pinakabagong pagbabago sa index, crate file, code directory, git clone, at git checkout.
Bukod pa rito, sinusubukan ng Borgo programming language na maging mas nagpapahayag kaysa sa Go language, ngunit hindi gaanong kumplikado kaysa sa Rust na wika. Pinagsasama ng Borgo ang pinakamahusay na mga tampok ng Go at Rust, na bumubuo sa mga pagkukulang ng bawat wika. Halimbawa, ang Go ay simple at prangka, ngunit hindi nagbibigay ng advanced na uri ng mga tampok sa kaligtasan. Ang Rust na wika ay nagbibigay ng mga tool para sa ligtas na programming, ngunit ito ay sobrang kumplikado. Ang proyekto ay binuo ni Marco Sampellegrini, may-akda ng The Simple Haskell Handbook at developer ng Quad CI na tuluy-tuloy na sistema ng pagsasama.

Gumagamit ang Borgo ng static na pagta-type, mga uri ng Go-like, at tulad ng Rust na syntax. Ang mga semicolon ay opsyonal sa dulo ng mga linya sa Borgo code. Ang Borgo code ay pinagsama-sama sa isang representasyon ng Go na ganap na tugma sa mga umiiral nang Go package. Ang compiler code ay nakasulat sa Rust at ipinamamahagi sa ilalim ng lisensya ng ISC. gumamit ng fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: “Hello world”, duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => “naglo-load pa rin”, NetworkState.Failed(code) => fmt.Sprintf(“Nakakuha ng error code: %d”, code), NetworkState.Success (res) => res.title, } fmt.Println(msg) }
Pinagmulan: opennet.ru
