Veröffentlichung der Programmiersprache Rust 1.37

Veröffentlicht Release der Systemprogrammiersprache Rust 1.37, basierend auf dem Projekt von Mozilla. Die Sprache konzentriert sich auf sichere Speicherverwaltung, bietet automatisches Speichermanagement und stellt Werkzeuge zur Verfügung, um hohen Parallelismus bei der Ausführung von Aufgaben zu erreichen, ohne auf einen Garbage Collector und Runtime angewiesen zu sein.

Das automatische Speichermanagement in Rust befreit den Entwickler von der Manipulation von Zeigern und schützt vor Problemen, die aus der niederleveligen Speicherbearbeitung resultieren, wie das Zugreifen auf freigegebenen Speicher, Dereferenzierung von Nullzeigern und Buffer-Überläufen. Für die Verteilung von Bibliotheken, den Aufbau und das Management von Abhängigkeiten entwickelt sich der Paketmanager Cargo, der es ermöglicht, die benötigten Bibliotheken für das Programm mit einem Klick zu erhalten. Für die Bereitstellung von Bibliotheken wird das Repository crates.io.

Haupt Neuheiten:

  • Im Compiler rustc sicherstellt wird Unterstützung für die Optimierung auf Basis der Profilierungsergebnisse des Codes (PGO, Profile-Guided Optimization) bereitgestellt.
    ermöglicht, optimierten Code auf der Grundlage der im Verlauf der Programmausführung gesammelten Statistiken zu generieren. Für die Erstellung des Profils gibt es das Flag „-C profile-generate“, und zur Verwendung des Profils beim Kompilieren wird „-C profile-use“ empfohlen (zuerst wird das Programm mit dem ersten Flag kompiliert, getestet und nach der Erstellung des Profils erneut mit dem zweiten Flag kompiliert);
  • Bei der Ausführung des Befehls „cargo run“, der sich gut für schnelle Tests von Konsolenanwendungen eignet, wurde die Möglichkeit hinzugefügt, automatisch die ausführbare Datei auszuwählen, falls mehrere ausführbare Dateien im Paket vorhanden sind. Die standardmäßig auszuführende Datei wird über die Direktive default-run im Abschnitt [package] mit Paketparametern definiert, die es ermöglicht, den Dateinamen über das Flag „—bin“ bei jedem Ausführen von „cargo run“ zu umgehen;
  • Der Paketmanager Cargo hat den Befehl „cargo vendor“ integriert, der zuvor als einzelnem Paket bereitgestellt wurde. Das Team ermöglicht die Arbeit mit einer lokalen Kopie der Abhängigkeiten – nach dem Ausführen von „cargo vendor“ werden alle Quelltexte der Abhängigkeiten des Projekts von crates.io in ein lokales Verzeichnis geladen, das dann für die Arbeit ohne Zugriff auf crates.io verwendet werden kann (nach der Ausführung des Befehls wird eine Anleitung zur Anpassung der Konfiguration angezeigt, um das Verzeichnis bei den Builds zu verwenden). Diese Möglichkeit wird bereits genutzt, um die Bereitstellung des Compilers rustc mit allen Abhängigkeiten in einem Archiv mit dem Release zu organisieren;
  • Es gibt jetzt die Möglichkeit, Verweise auf Enumerationen (enum) zu erstellen, indem Typalias verwendet werden (zum Beispiel kann im Funktionskörper „fn increment_or_zero(x: ByteOption)“ „ByteOption::None => 0“ angegeben werden), Typberechnungs-Konstrukte (‹MyType‹..››::variant => N) oder Self-Zugriffe (in Blöcken mit &self kann „Self::Quarter => 25“ angegeben werden);
  • Es wurde die Möglichkeit hinzugefügt, unbenannte Konstanten in Makros zu erstellen. Anstelle der Definition eines Namens für das Element in „const“ kann jetzt das Zeichen „_“ verwendet werden, um einen dynamisch ausgewählten einzigartigen Bezeichner zu ermöglichen, der Namenskonflikte bei erneutem Aufruf des Makros vermeidet;
  • Die Möglichkeit zur Verwendung des Attributs «#[repr(align(N))» mit Aufzählungen (enums) wurde hinzugefügt, wobei eine Syntax verwendet wird, die der Definition der Struktur AlignN‹T› mit Ausrichtung ähnelt und die anschließende Verwendung von AlignN‹MyEnum› ermöglicht.
  • Eine neue Reihe von APIs wurde stabilisiert, einschließlich der Methoden BufReader::buffer, BufWriter::buffer,
    Cell::from_mut,
    Cell::as_slice_of_cells,
    DoubleEndedIterator::nth_back,
    Option::xor,
    {i,u}{8,16,64,128,size}::reverse_bits, Wrapping::reverse_bits und
    slice::copy_within.

speziellen Distribution Beginn der Tests Projekts Async-std, das eine asynchrone Variante der Standardbibliothek von Rust anbietet (eine Portierung der Bibliothek std, in der alle Schnittstellen in der Version mit async bereitgestellt werden und bereit zur Verwendung mit der Syntax async/await sind).

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster