Język programowania Rust jest najprawdopodobniej jedynym obecnie nowoczesnym językiem zdolnym zastąpić C w zastosowaniach niskopoziomowych i wbudowanych albo dostrzegalnie zajmować tę samą niszę. Wskazuje się tutaj następujące cechy Rust: mocna kontrola typów, brak odśmiecacza pamięci i zdolność do jej ręcznego przydzielania czy syntaktykę w stylu C. Dynamika rozwoju języka Rust cechuje się zauważalną aktywnością. Niemniej deklaracja o zastępowalności jednego języka drugim zdaje się na wyrost, skoro w tym przypadku C posiada przewagę w postaci narzędzi. Jego siła zdaje się tkwić także w owym konserwatyzmie C, jakie powoli się zmienia.
Apple
Apple na swoim Twitterze ogłosiło, że poszukują programistów znających język programowania Rust, dla swoich przedsięwzięć opartych o chmurę i na backend sieciowy. Dodatkowym atutem jest znajomość języka C i systemów operacyjnych zgodnych z POSIX, obok niskopoziomowej obsługi sieci. Zadaniem inżyniera oprogramowania będzie przeniesienie obecnej bazy kodu źródłowego z C do Rust i implementacja kolejnych funkcji już w Rust.
Rust 1.42.0 (2020-03-12)
Zespół Rust niedawno ogłosił wydanie stabilnej wersji języka programowania Rust o numerze edycji 1.42.0.
Język:
1. Odtąd jest możliwe używanie syntaktyki slice pattern dla subslices. Dla przykładu:
fn foo(words: &[&str]) {
match words {
["Hello", "World", "!", ..] => println!("Hello World!"),
["Foo", "Bar", ..] => println!("Baz"),
rest => println!("{:?}", rest),
}
}
2. Jest możliwe użycie #[repr(transparent)]
dla jednoczynnikowych typów wyliczeniowych enum
. To jest typ wyliczeniowy enum
może przyjąć ten sam układ i ABI jak typ który zawiera w sobie.
#[repr(transparent)]
enum Foo { Bar(u8) }
Jest tożsame:
#[repr(transparent)]
struct Foo(u8);
3. Zmiany które zaszły w syntaktyce:
default
jest składniowo dopuszczalne przed elementami w definicjachtrait
;- Elementy w
impl
(np.const, type, fn
) mogą składniowo opuścić własne definicje na korzyść; - Zakresy (Bounds) dla powiązanych typów w
impl
są aktualnie składniowo dopuszczalne (np. typFoo: Ord
); - Typy ze zmienną liczbą argumentów w stylu C (C-variadic, w Rust używa się po prostu makra, jest to przeznaczone do wywoływania procedur z innych języków za pomocą FFI przyp. tłum.) w składni mogą wystąpić bezpośrednio jako typ każdego parametru funkcji.
Zobacz też: Silnik synchronizacji w aplikacji Dropboksa został przepisany w języku Rust
Jest to nadal odrzucane na poziomie semantyki i zostanie wyświetlony błąd, lecz te zmiany mogą zostać użyte i być sparsowane w makrach proceduralnych i w czasie kompilacji warunkowej (Conditional compilation, coś takiego jak ifdef w C++ przyp.tłum.).
Kompilator:
- Wsparcie na poziomie Tier 2 dla platformy rmv7a-none-eabi.
- Wsparcie na poziomie Tier 2 dla platformy riscv64gc-unknown-linux-gnu.
Option::{expect,unwrap}
iResult::{expect, expect_err, unwrap, unwrap_err}
odtąd będzie wyświetlał komunikat paniki wskazując konkretne miejsce jakie je wywołało, a nie odwoływał się tylko do organizacji wewnętrznej biblioteki podstawowej.
Listę wspieranych platform można przejrzeć na podstronie projektu Rust.
Biblioteki:
iter::Empty<T>
odtąd implementujeSend
iSync
dla każdegoT
(T oznacza nazwę parametru typu, w języku Rust nazwy parametrów typów są krótkie, często jest to jedna litera przyp.tłum.).Pin::{map_unchecked, map_unchecked_mut}
nie wymaga odtąd zwracania typu, aby zaimplementowaćSized
.io::Cursor
odtąd wywodziPartialEq
iEq
.Layout::new
jest odtądconst
.- Dodano wsparcie Biblioteki Standardowej dla platformy riscv64gc-unknown-linux-gnu.
Ustabilizowane API:
CondVar::wait_while, CondVar::wait_timeout_while, DebugMap::key, DebugMap::value, ManuallyDrop::take, matches!, ptr::slice_from_raw_parts_mut, ptr::slice_from_raw_parts
.
Cargo:
Odtąd nie istnieje potrzeba dołączania extern crate proc_macro;
, aby używać proc_macro;
w edycji Rust 2018.
Informacje o kompatybilności:
Error::description
zostało uznane za przestarzałe (deprecated) i jego użycie wyświetli błąd. Zalecane jest użycie w zamian Display/to_string
.