Rust für Anfänger: Die Herausforderungen und Vorteile der Programmiersprache

Populärwissenschaftstrends im Rost: Was ist die Schwierigkeit des Rostes? Speed ​​​​Transformation Strategy for Special Language Features in 20 Minutes

This article is object-oriented:

Rust-related Code Repository (e.g.)

Students who want to understand the characteristics of rusted grammar want to expand their knowledge

susping fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire fire

"Ich habe gehört, dass Rusts Lernkurve als steil bekannt ist. Ist es nicht so schwierig, loszulegen?"

Nachteile gegen Vorteile Wo ist der komfortable Ort

Sieh dir diese rote Linie an. Fehlerbenachrichtigungen auf Nanny-Ebenen müssen die Speicherlogik vollständig verarbeiten, wenn der Code erfolgreich kompiliert werden kann. ICes können für eine Stunde objektiv Rostfehlerbenachrichtigungen schreiben, die nicht übersetzt werden können. (Dies ist aufgrund der Eigenschaften der Sprache sehr schwierig)

andere populäre Sprachdesigns für vorhandene Sprachen (Rückkehr zum Himmel/Semikolon des Himmels/Fliegen in den Himmel/Fliegen am Himmel)

verwendet grundlegende Konzeptstapel und Stapel (Stapel) und Runtimes für einzigartige Designs. Der Stapel ist eine normale Struktur mit einer ähnlichen Größe und einem ersten Datenstruktur wie jeder Block, aber die Haufenstruktur ist relativ locker und erfordert eine angemessene Zuordnung bei der Verwendung von Platz.

Es gibt einen Datentyp fester Größe (z. B. int/char), der häufig in der Stapelgröße gespeichert wird, und es besteht nicht erforderlich, den Speicherplatz zu berechnen, der zugewiesen werden muss.

Für einige Datentypen nicht festgelegter Größen (z. B. JavaScript: Objekt/Rost: String) wird der tatsächliche Inhalt dieser Daten im Haufen gespeichert, während die Datenzeiger und andere verwandte Informationen im Stapel gespeichert werden.

JavaScript -Heap und Stapel

Wenn Sie von einem CPU -Cache profitieren, beträgt der Unterschied in der Speicher- und Speicherzugriffsgeschwindigkeit mehr als 10 Mal. Der Zugriff auf Daten im Haufen ist langsamer als der Zugriff auf Daten im Stapel. Dies liegt daran, dass Sie zuerst auf den Stapel zugreifen und dann über den Zeiger des Stacks auf Speicher zugreifen müssen.

Stellen Sie sich vor, wir können die Datenspeicherung auf dem Haufen nicht freigeben und weiterhin unendlich wachsen, unser Programm wird unweigerlich eine Vielzahl ungewöhnlicher Phänomene erleben.

GC (Garbage Collection)

Wenn Sie ein Entwickler mit einigen hochrangigen Programmiersprachen (wie JavaScript/Java/Python) sind, wissen Sie möglicherweise nicht viel über den Mechanismus für die Müllsammlung.

Zum Beispiel hilft Ihnen JavaScript, die JavaScript -Engine zu tun, sodass Entwickler nicht zu viel Aufmerksamkeit auf die Auswirkungen des Speicheraufwands auf Codeebene schenken müssen.

GCs vollständiger Name ist die Garbague -Kollektion. Verwenden Sie den Systemspeicher während des Programmentwicklungsprozesses. Wenn ein bestimmter Speicher verwendet wird, muss er recycelt werden. Wenn es nicht recycelt ist, wird dieser Speicher besetzt und schwerwiegende Speicherlecks können nicht wiederverwendet werden.

Next diagram, JS heap size is ascending stepwise:

3 waste disposal methods

Full automatic recycling: JavaScript/Java/Python [Full freehand]

Manual recycling: C/C ++ [Do it yourself a business scenario significantly reduces the mental burden on developers.

Die zugrunde liegenden technischen Felder (z. B. Audio- und Videofelder/Spielkunden) sind in Richtung Systemebene voreingenommen, wodurch der Speicherverbrauch Overhead für die Optimierung offen bleibt.

C/C ++ ist eine "freie" Speicherverwaltung ist ein rücksichtsloses zweischneidiges Schwert, und "frei" hat unendliche Fehler und hohe Kosten für das Verständnis von Code. Warum nicht Rost versuchen? Rust muss sich nicht an Entwickler anwenden/freigeben, um bessere Leistungsüberlegungen zu erhalten.

Eigentümer

Besitz ist eine Reihe von Regeln, die steuern, wie Rust -Programme den Speicher verwalten.

Die grundlegende Regel für jeden Wert von Rost hat eine variable namens Eigentümer.

Es gibt jeweils nur einen Besitzer.

Dieser Wert wird entfernt, wenn der Eigentümer außerhalb des Bereichs ist.

Diese Regel wird auf einfache Weise erklärt. Der Eigentümer jedes Betrags ist nur der Eigentümer, und wenn der Eigentümer fehlschlägt, besteht dieser Wert nicht mehr.

Schauen wir uns den String -Typ für Rost an. Dies ist spezieller als int/char und andere Typen

fn? hauptsächlich()? {? lassen? S1? =? String :: von? P>

Wenn die oh2e Logik in JS/Java angezeigt wird, ist es ein sehr einfacher Zuordnungsprozess und läuft reibungslos. Rost muss für jede Menge nur einen Besitzer betreiben.

wird als das folgende Diagramm im Diagramm beschrieben. S1 in S1 überträgt das Eigentum an "Hallo" auf S2, und S1 ist ungültig.

Wenn S1 nicht fehlschlägt, werden Sie beim Abrufen von Daten während der Kompilierungsphase feststellen, dass Rust zwei Zeiger auf denselben Speicher hinweist und der Speicher "Index" versehentlich zweimal freigegeben wird. Das zweimalige Ausgeben des gleichen Speichers kann die Gedächtnisverschmutzung verursachen und zu potenziellen Sicherheitslücken führen.

Wenn Sie S1 erfolgreich ausdrucken möchten, müssen Sie "Hallo" wie im folgenden Bild gezeigt kopieren.

Bei Verwendung von Int -Typ -Daten:

fn? hauptsächlich()? {? lassen? X? =? 5; ("x? SONDER_STRING:? & Mut? String)? {

Gleichzeitig können Sie nur eine variable Referenz oder mehrere unveränderliche Referenzen haben (um die absolute Sicherheit zu gewährleisten). Die Zusammenstellung wird erfolgreich sein:

fn? hauptsächlich()? { lassen? Mut? S? =? String :: von ("Hallo"); R1? =? & s; R2? =? & s; hier? R3? =? & Mut? s; Zu diesem Zeitpunkt können Sie die S. ändern Aus räumlichen Gründen werde ich kurz relevantes Wissen über Zitate präsentieren. Ich hoffe, dass mehr Schüler später die detaillierten Lernmaterialien lesen können.

grundlegende Regeln des Lebenszyklus

Der Lebenszyklus ist kurz gesagt ein wirksamer Bereich. In einigen Fällen kann der Compiler es automatisch schätzen, sodass der Lebenszyklus nicht manuell deklariert werden muss.

fn? hauptsächlich()? {{{ println! ("R:? {}", r);? // Der oh2e Code meldet einen Fehler während der Kompilierung. Weil "X" so lange nicht überleben kann.

Der Bereich des Lebenszyklus von der Datennaddefinition bis zum Ende des Klammerpaares (siehe 'A und' B im oben genannten Diagramm). "A ist der Lebenszyklus von R" und B ist der Lebenszyklus von X, und der Lebenszyklus von X ist geringer als der Lebenszyklus von R, so dass wir nach dem Ausführen von r = & x; den Lebenszyklus von X End laufen. Zu diesem Zeitpunkt verweist R auf die Adresse der wiederhergestellten Daten und wird zu einem hängenden Zeiger, was einen Fehler verursacht.

Rost -Compiler ist angespannt als wir, denn wenn ein Funktionsparameter einen Referenztyp hat, sehen Sie möglicherweise einen hängenden Zeiger, wenn Sie nicht aufmerksam sind.

fn? hauptsächlich()? {? lassen? String1? =? String :: von ("lang? String? Long") Gest? String? Ist? {} ",? result);} fn? längste (x:? & str, y:? & str)? -> ) {

Der Grund für diesen Fehler ist, dass Rost nicht erraten kann, welcher der x- und y -Lebenszyklen länger sein werden! ? ? .?

Der Compiler kann sehr intelligent sein, sodass Sie den Lebenszyklus allein in einigen einfachen Szenarien erraten können (wenn nur ein Eintragsparameter ein Referenztyp ist. Wenn Sie erfolgreich kompilieren können, können Sie den Lebenszyklus des Rückkehrwerts nur für diesen Einstiegsparameter relevant sein. <'a>

Es gibt einen Lebenszyklus von x und y, da X-, Y- und Rückgabewerte mindestens' A sind (entweder x oder y). Jetzt modifizieren wir den Beispielcode, so dass String1 und String2 einen Lebenszyklus haben, aber die beiden Parameter als den gleichen Lebenszyklus der längsten Funktion:

fn? Ified Chinese Version

Rost -Tutorial RustCourse

Videomaterial

Das erste Dokument oben erklärt das erste Dokument oben IC)

https://www.bilibili.com/video/ Bv1hp4y1k7sv

Referenz

https://juejin.cn/post/6981588276356317214

Originaltext: https://juejin.cn/post/70993627775621140510

Fünf aufstrebende Kompilierungsprogrammiersprachen

Folgendes ist eine kurze Einführung in fünf neue Kompilierungsprogrammiersprachen.

GO -Sprache:

Entwickler: Google -Team -Funktionen: Funktioniert mit präziser Syntax in C- und CSP -Parallelitätsmodellen, wobei modulare Programmierungen und Speichersicherheit hervorgehoben werden. Anwendung: Es wurde häufig von großen Herstellern wie B Station und Douyin eingesetzt. Es stellte den C -Status in Frage und wurde eine neue Option für C -Programmierer.

Rostsprache:

Entwickler: Mozilla Research Institute. Merkmale: Die Syntax konzentriert sich auf die Sicherheits- und Speicherverwaltung von Parallelität und ist näher an C ++, jedoch mit höherer Speichersicherheit. Anwendung: Es zeigt eine starke Leistung im Bereich der Blockchain -Technologie, schwer zu lernen, hat aber eine hervorragende Leistung.

D Sprache:

Merkmale: Es wird erwartet, dass es C ++ ersetzt und eine breite Palette von Funktionen mit eleganter Grammatik und niedrigen Lernkosten nach der Reparatur der Community aufweist. Für Menschen anwendbar: besonders geeignet für effiziente und sichere Entwickler.

ZIG -Sprache:

Funktion: Das Ziel ist auf die C -Sprache gerichtet, und ihre kompilierten Periodenwerte und funktionalen Eigenschaften machen es äußerst ehrgeizig bei der Leistungsoptimierung. Verfolgung: Das Streben nach Programme auf Systemebene ist auffällig, aber die Grammatik ist relativ kompliziert.

v Sprache:

Funktion: Die Autoren argumentieren, dass es einfach, leicht zu lernen und leistungsfähig ist. Kontroverse: Tatsächliche Leistung und frühe Probleme machen Menschen, die für ihre Zukunft vorbehalten sind, was sehr kontrovers ist.

Wir freuen uns darauf, neue Ideen für die Gestaltung von Konzepten und Leistungsoptimierung, die Bereicherung der Programmiersprache zu entwerfen und die zukünftige Programmiersprache zu führen.

Die Schlüsselstationen des "Blockchain" -Blockchain-Mapankal-Magationsverhältnisses (ii) Open Source Libsnark / Chilsnark / EthSSSNark - ZCCRLAB Implementieren ZCCRLAB von ZCCRLAB -Lösung ZCCRLAB implementiertDie Lösung eignet sich für die Implementierung durch ZCCRLAB. Zokrates: Etherumum Zero: Kenntnis der ZksNark -Toolbox für Projekt App Development Project App Development Project App Development Snarkjs: JavaScript implementieren Bibliothek für Zksarnk -Lösung. CIRCOMPCOME: ZksNark Circuit Beschreibung DSL. Wasmark: Die YKSNARK -Bestimmung der Generation von ZksNark verwendet die Generation von Generationen und Verifizierungstools die native Webably. Wurde entwickelt. GNARK - Die Zksarnk -Implementierung, die durch die Abkürzung des Zksarnkk entwickelt wurde. GOSNARK: ZksNark Development Library verwendet Go Goory. Implementiert. XJSNARK: Das höhere Rahmen für die Entwicklung von ZKKKSNARK -Schaltungen. Bellman: Benutzerdefinierte Bibliothek für ZKKKKSNARK -Schaltkreise. ZksNarkrs - Null Literatur zu erstellen und zu fördern. Implementierung der von Python erstellten ZksNark -Lösung.

Diese Open -Source -Bibliotheken helfen Entwicklern, Innovation und Entwicklung für Innovation und Entwicklung zu fördern.