Gehen Sie durch die Augen eines Rust-Programmierers: erste Eindrücke

Im Vorfeld des Kursbeginns erstellte "Golang Developer" eine Übersetzung von interessantem Material. Was war dein erster Eindruck von Go?




In den letzten Wochen konnte ich Go in meiner Arbeit verwenden. Ich habe Go zuerst für ein mehr oder weniger großes und ernstes Projekt verwendet. Vorher habe ich viel über Go gelesen und Beispiele und kleine Programme geübt, während ich die Fähigkeiten von Rust erkundet habe , aber echte Programmierung ist eine ganz andere Sache.

Ich dachte, Sie könnten daran interessiert sein, von meinen Eindrücken zu hören. Ich werde versuchen, nicht in Vergleichen mit Rust hängen zu bleiben, aber da dies meine Hauptsprache ist, können sie nicht vermieden werden. Ich muss Sie vor einer starken Neigung zu Rust warnen, aber ich werde mein Bestes tun, um objektiv zu sein.

Allgemeine Eindrücke


Go Programmieren ist schön. Die Bibliotheken hatten alles, was ich brauchte, ohne zu viele Mängel. Lernen war auch eine angenehme Erfahrung - es ist eine gut durchdachte und praktische Sprache. Wenn Sie beispielsweise die Syntax lernen, werden Sie feststellen, dass viele Redewendungen aus anderen Sprachen nach Go migriert wurden. Sobald Sie den Go-Teil beherrschen, können Sie seine Fähigkeiten leicht vorhersagen. Mit etwas Erfahrung in anderen Sprachen konnte ich Go-Code ohne spezielle Google-Hilfe lesen und verstehen.

Ich habe viel weniger Frustration und viel mehr Produktivität festgestellt als mit C / C ++, Java, Python usw. Go wird jedoch immer noch als Teil dieser Sprachgeneration empfunden. Er hat von ihnen gelernt, und ich denke, dies ist wahrscheinlich die beste Sprache dieser Generation; aber er ist definitiv ein Teil dieser Generation. Es ist eher eine inkrementelle Verbesserung als etwas grundlegend Neues (es sollte beachtet werden, dass dies kein Werturteil ist - Inkrementierung ist in der Welt der Softwareentwicklung oft von Vorteil). Ein gutes Beispiel dafür ist Null: Sprachen wie Rust und Swift beseitigen das Nullparadigma und eliminieren so eine ganze Klasse von Fehlern. Go macht es weniger gefährlich: keine Nullwerte; Abgrenzung von nil und 0. Die Grundidee ist jedoch immer noch vorhanden, ebenso wie der weit verbreitete Laufzeitfehler, einen Nullzeiger zu dereferenzieren.

Einfache Entwicklung


Go ist unglaublich einfach zu lernen. Ich weiß, dass dies ein propagierter Werbeslogan ist, aber ich war sehr überrascht, wie schnell ich das Produktivitätsniveau erreichen konnte. Dank der Dokumentation, der Tools und der Sprache selbst begann ich in nur zwei Tagen, informativen, Commit-freundlichen Code zu schreiben.

Mehrere Faktoren für das Lernen:

  • Geh klein. Viele Sprachen versuchen klein zu sein, während Go tatsächlich eine ist. (Grundsätzlich ist das gut und ich bin beeindruckt von der Disziplin, die dafür erforderlich war).
  • Die Standardbibliothek ist gut (und wieder auch klein). Das Finden und Verwenden von Bibliotheken in einem Ökosystem ist sehr einfach.
  • Die Sprache hat sehr wenig, was nicht in anderen Sprachen ist. Go erbt viele Bits von anderen etablierten Sprachen, poliert sie und verbindet sie ordentlich. Er vermeidet sorgfältig Neuheiten.


Code-Routine


Go-Code wiederholt sich sehr schnell. Es fehlen Mechanismen wie Makros oder Generika, um Wiederholungen zu reduzieren (Schnittstellen sind gut für Abstraktionen, aber nicht so gut für die Reduzierung von Codeduplizierungen). Ich sammle oft eine große Anzahl von Funktionen, die bis auf Typen identisch sind.

Die Fehlerbehandlung trägt auch zur Wiederholung bei. Viele Funktionen haben mehr Vorlagen if err != nil { return err }als der ursprüngliche Code.

Die Verwendung von Generika oder Makros zur Reduzierung der Code-Routine wird manchmal wegen des Kompromisses mit ihrer Lesbarkeit kritisiert. Aber im Fall von Go würde ich ihnen nicht zustimmen. Das Kopieren und Einfügen von Code ist schnell und einfach, aber das Lesen von Go-Code kann frustrierend sein, da Sie das meiste davon ignorieren oder nach subtilen Unterschieden suchen müssen.

Was mir gefallen hat


  • . ; Rust. , ( , C/C ++ , - ).
  • . Go — . , , , .
  • . , , .
  • if ...; ... { }Syntax. Die Möglichkeit, den Umfang von Variablen auf den Hauptteil von if-Anweisungen zu beschränken, ist gut. Dies ist vergleichbar mit dem Einlassen von Swift und Rust, jedoch allgemeiner (Go hat kein passendes Muster wie Swift und Rust, kann also nicht verwendet werden, wenn es zugelassen wird).
  • Test- und Dock-Kommentare sind einfach zu verwenden.
  • Das Go-Tool ist nett - alles auf einmal an einem Ort, ohne dass viele Tools über die Befehlszeile verbunden werden müssen
  • Auf Lager Müllsammler (GC)! Die Notwendigkeit, sich nicht um die Speicherverwaltung zu kümmern, erleichtert die Programmierung wirklich
  • Varargs.


Was mir nicht gefallen hat


Die Reihenfolge spielt keine Rolle.

  • Nullscheiben - Nullscheiben, Nullscheiben und leere Scheiben sind alles verschiedene Dinge. Ich bin mir mehr als sicher, dass Sie nur zwei brauchen, nicht alle drei.
  • Keine Grundschulklassen. Die Verwendung von Konstanten ist ungewöhnlich.
  • . , ( , , , , ).
  • switch
  • for ... range /. ( ), . -, , .
  • :
    • .
    • ( , , ); , , .
    • , return.
    • (type struct).
    • public private. , .
  • . , , , , , , , .
  • Sie können keine Funktionen mit einem Empfänger in ein anderes Paket schreiben. Selbst wenn Schnittstellen implizit typisiert werden, können sie daher nicht für höhere Typen implementiert werden, was sie viel weniger nützlich macht.

Ich habe oben bereits den Mangel an Generika und Makros erwähnt.

Kohärenz


Als Sprachentwickler und Programmierer war ich wahrscheinlich am meisten überrascht von der Tatsache, dass Go häufig auf ein Missverhältnis zwischen dem, was integriert ist und dem, was den Benutzern zur Verfügung steht, stößt. Die Aufgabe vieler Sprachen ist es, so viel Magie wie möglich zu zerstreuen und den Benutzern integrierte Funktionen zur Verfügung zu stellen. Das Überladen von Operatoren ist ein einfaches, aber kontroverses Beispiel. Go hat viel Magie! Und Sie stoßen sehr leicht auf eine Wand der Unfähigkeit, das zu tun, was eingebaute Dinge tun können.

Einige Punkte, die besonders auffallen:

  • , , .
  • for ... range , , .
  • , len append, , . . , Go !
  • . ==, , map, . .



Go ist eine einfache, kompakte und unterhaltsame Sprache. Es hat ein paar scharfe Ecken, aber meistens ist es gut gestaltet. Er ist unglaublich schnell zu lernen und vermeidet alle Funktionen, die in anderen Sprachen nicht bekannt sind.

Im Vergleich zu Rust ist Go eine völlig andere Sprache. Obwohl beide grob als Systemsprachen oder „Ersatz“ für C beschrieben werden können, haben sie unterschiedliche Ziele und Anwendungen, Sprachdesignstile und Prioritäten. Müllabfuhr ist wirklich ein großer Unterschied. Mit GC in Go wird die Sprache viel einfacher und kleiner und leichter zu verstehen. Das Fehlen von GC in Rust macht es sehr schnell (insbesondere wenn Sie eine deutliche Verzögerung und nicht nur eine hohe Bandbreite benötigen) und bietet Funktionen und Programmiermuster, die in Go unmöglich sind (zumindest ohne Leistungseinbußen).

Go ist eine kompilierte Sprache mit einer gut implementierten Laufzeit. Er ist schnell. Rust wird ebenfalls kompiliert, hat aber eine viel kleinere Laufzeit. Er ist sehr schnell. Unter der Annahme, dass es keine anderen Einschränkungen gibt, denke ich, dass die Wahl zwischen Go und Rust ein Kompromiss zwischen einer viel kürzeren Lernkurve und einfacheren Programmen (was eine schnellere Entwicklung bedeutet) und seitens Rust einem schnelleren und ausdrucksstärkeren System ist Typen (was Ihre Programme sicherer macht und das Debuggen und die Fehlerbehebung beschleunigt).



Die Übersetzung ist abgeschlossen und wir laden Sie zu einer kostenlosen praktischen Online-Lektion ein, in der Sie lernen, wie Sie in 60 Minuten einen vollständig getesteten http-Dienst von Grund auf ohne Abhängigkeiten von Drittanbietern erstellen.



All Articles