Veröffentlichung von Rust 1.53. Google finanziert die UnterstĂŒtzung von Rust im Linux-Kernel

Die Veröffentlichung der Systemsprache Rust 1.53 wurde bekannt gegeben, die ursprĂŒnglich von Mozilla entwickelt wurde, inzwischen jedoch unter der Schirmherrschaft der unabhĂ€ngigen gemeinnĂŒtzigen Organisation Rust Foundation weiterentwickelt wird. Die Sprache konzentriert sich auf einen sicheren Umgang mit Speicher, bietet automatisches Speicher-Management und stellt Mittel zur VerfĂŒgung, um eine hohe ParallelitĂ€t bei der AusfĂŒhrung von Aufgaben zu erreichen, ohne auf einen Garbage Collector oder Runtime zurĂŒckgreifen zu mĂŒssen (die Runtime beschrĂ€nkt sich auf die grundlegende Initialisierung und die Bereitstellung der Standardbibliothek).

Das automatische Speicher-Management in Rust befreit Entwickler von Fehlern beim Umgang mit Zeigern und schĂŒtzt vor Problemen, die durch niedrige Arbeit mit Speicher entstehen, wie z. B. Zugriff auf Speicherbereiche nach deren Freigabe, Dereferenzierung von Nullzeigern, BufferĂŒberlĂ€ufen usw. Zur Verteilung von Bibliotheken, zur Sicherstellung des Builds und zur Verwaltung von AbhĂ€ngigkeiten wird der Paket-Manager Cargo entwickelt. FĂŒr das Hosting von Bibliotheken wird das Repository crates.io unterstĂŒtzt.

Hauptneuheiten:

  • FĂŒr Arrays wurde die Trait IntoIterator implementiert, die das Durchlaufen der Array-Elemente nach Werten ermöglicht: for i in [1, 2, 3] { .. }

    Es besteht jetzt auch die Möglichkeit, Arrays an Methoden zu ĂŒbergeben, die Iteratoren akzeptieren, z. B.: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    FrĂŒher wurde IntoIterator nur fĂŒr Referenzen auf Arrays implementiert, d.h. um ĂŒber Werte zu iterieren, mussten Referenzen verwendet werden („&[1, 2, 3]“) oder „[1, 2, 3].iter()“. Die Implementierungen von IntoIterator fĂŒr Arrays wurden durch KompatibilitĂ€tsprobleme behindert, die durch eine zuvor im Compiler hinzugefĂŒgte Umwandlung von array.into_iter() in (&array).into_iter() verursacht wurden. Diese Probleme konnten durch einen Umweg gelöst werden — der Compiler wird die Umwandlung von array.into_iter() in (&array).into_iter() fortsetzen, als ob die Implementierung des Traits IntoIterator nicht vorhanden wĂ€re, jedoch nur bei einem Aufruf der Methode unter Verwendung der Syntax „.into_iter()“ und nicht bei Aufrufen in der Form „in [1, 2, 3]“, „iter.zip([1, 2, 3])“, „IntoIterator::into_iter([1, 2, 3])“.

  • Die Möglichkeit, AusdrĂŒcke „|“ (logische ODER-Operation) an jeder Stelle des Musters anzugeben, wurde bereitgestellt, z. B. anstelle von „Some(1) | Some(2)“ kann jetzt „Some(1 | 2)“ geschrieben werden: match result { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
  • Die Verwendung von nicht-ASCII-Zeichen in Identifikatoren ist erlaubt, einschließlich aller nationalen Zeichen, die in der Unicode-Spezifikation UAX 31 definiert sind, jedoch ohne Emoji-Zeichen. Bei der Verwendung verschiedener, aber Ă€hnlich gestalteter Zeichen gibt der Compiler eine Warnung aus. const BLÅHAJ: &str = Â«đŸŠˆÂ»; struct äșș { 損歗: String, } let α = 1; let os = 2; warning: Identifier-Paar als verwirrbar betrachtet zwischen ‘’ und ‘s’
  • Eine neue Reihe von APIs wurde in die stabile Kategorie ĂŒberfĂŒhrt, darunter stabilisiert:
    • array::from_ref
    • array::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • Duration::ZERO
    • Duration::MAX
    • Duration::is_zero
    • Duration::saturating_add
    • Duration::saturating_sub
    • Duration::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator fĂŒr Arrays
    • {integer}::BITS
    • io::Error::Unsupported
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • Option::insert
    • Ordering::is_eq
    • Ordering::is_ne
    • Ordering::is_lt
    • Ordering::is_gt
    • Ordering::is_le
    • Ordering::is_ge
    • OsStr::make_ascii_lowercase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_lowercase
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef fĂŒr slice::IterMut
    • impl SliceIndex fĂŒr (Bound, Bound)
    • Vec::extend_from_within
  • Eine dritte Stufe der UnterstĂŒtzung fĂŒr die Plattform wasm64-unknown-unknown wurde implementiert. Die dritte Stufe umfasst grundlegende UnterstĂŒtzung, jedoch ohne automatisierte Tests, die Veröffentlichung offizieller Builds und die ÜberprĂŒfung der Möglichkeit zur Code-Kompilierung.
  • Der Paketmanager Cargo wurde standardmĂ€ĂŸig so eingestellt, dass der Name „main“ fĂŒr den Hauptbranch des Git-Repositorys (HEAD) verwendet wird. FĂŒr AbhĂ€ngigkeiten, die in Repositories untergebracht sind, die den Namen main anstelle von master verwenden, ist es nicht mehr erforderlich, die Einstellung branch = „main“ anzugeben.
  • Im Compiler wurden die Anforderungen an die minimale LLVM-Version auf LLVM 10 angehoben.

ZusĂ€tzlich kann man das Bereitstellen von Mitteln zur Entwicklung der Integration in den Linux-Kernel fĂŒr die Entwicklung von Komponenten in der Programmiersprache Rust erwĂ€hnen. Die Arbeiten werden im Rahmen des Projekts Prossimo unter dem Dach der Organisation ISRG (Internet Security Research Group) durchgefĂŒhrt, die das Projekt Let’s Encrypt ins Leben gerufen hat und die Förderung von HTTPS sowie die Entwicklung von Technologien zur Verbesserung der Internetsicherheit unterstĂŒtzt. Die Mittel werden von Google bereitgestellt, das die Arbeiten von Miguel Ojeda, dem Schöpfer des Projekts Rust-for-Linux, finanziert. Zuvor hatten ISRG und Google bereits die Erstellung eines alternativen HTTP-Backends fĂŒr das curl-Tool sowie die Entwicklung eines neuen TLS-Moduls fĂŒr den Apache-Webserver finanziert.

Laut den Unternehmensangaben von Microsoft und Google sind etwa 70 % der SicherheitsanfĂ€lligkeiten auf unsicheren Umgang mit Arbeitsspeicher zurĂŒckzufĂŒhren. Es wird angenommen, dass die Verwendung der Programmiersprache Rust zur Entwicklung von Kernelkomponenten, wie GerĂ€tetreibern, das Risiko von durch unsicheren Umgang mit Arbeitsspeicher verursachten SicherheitsanfĂ€lligkeiten verringern und die Entstehung solcher Fehler, wie z. B. den Zugriff auf den Speicherbereich nach dessen Freigabe und das Überschreiten von Puffergrenzen, ausschließen wird.

Die sichere Arbeit mit Speicher wird in Rust wĂ€hrend der Kompilierung durch ÜberprĂŒfung von Referenzen, Verfolgung des Eigentums an Objekten und BerĂŒcksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereich) sowie durch die Beurteilung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit des Codes gewĂ€hrleistet. Rust bietet auch Mittel zum Schutz vor ganzzahligen ÜberlĂ€ufen, erfordert die zwingende Initialisierung von Variablen vor deren Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet das Konzept der ImmutabilitĂ€t (unverĂ€nderlich) auf Referenzen und Variablen standardmĂ€ĂŸig an und bietet eine starke statische Typisierung zur Minimierung logischer Fehler.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster