Go-Programmiersprachenversion 1.13

Eingereicht von Veröffentlichung einer Programmiersprache Gehe 1.13, das von Google unter Beteiligung der Community als Hybridlösung entwickelt wird, die die hohe Leistung kompilierter Sprachen mit den Vorteilen von Skriptsprachen wie einfacher Code-Schreibbarkeit, Entwicklungsgeschwindigkeit und Fehlerschutz kombiniert. Projektnummer vertrieben von unter der BSD-Lizenz.

Die Syntax von Go basiert auf bekannten Elementen der C-Sprache mit einigen Anleihen aus der Python-Sprache. Die Sprache ist recht prägnant, aber der Code ist leicht zu lesen und zu verstehen. Go-Code wird in eigenständige ausführbare Binärdateien kompiliert, die nativ ohne Verwendung einer virtuellen Maschine ausgeführt werden (Profilerstellung, Debugging und andere Subsysteme zur Erkennung von Laufzeitproblemen sind als integriert). Laufzeitkomponenten), wodurch Sie eine mit C-Programmen vergleichbare Leistung erzielen können.

Das Projekt wird zunächst mit Blick auf Multithread-Programmierung und effizienten Betrieb auf Multi-Core-Systemen entwickelt, einschließlich der Bereitstellung von Mitteln auf Bedienerebene zur Organisation paralleler Berechnungen und Interaktion zwischen parallel ausgeführten Methoden. Die Sprache bietet außerdem einen integrierten Schutz vor überbelegten Speicherblöcken und bietet die Möglichkeit, einen Garbage Collector zu verwenden.

Haupt- Innovationeneingeführt in der Go-Version 1.13:

  • Für das Paket crypto/tls ist die Protokollunterstützung standardmäßig aktiviert TLS 1.3. Neues Paket „crypto/ed25519“ mit Unterstützung für digitale Ed25519-Signaturen hinzugefügt;
  • Unterstützung für neue numerische Literalpräfixe zur Definition von Binärzahlen (z. B. 0b101), oktalen (0o377), imaginären (2.71828i) und hexadezimalen Gleitkommazahlen (0x1p-1021) sowie die Möglichkeit, das Zeichen „_“ zur visuellen Trennung von Ziffern zu verwenden, hinzugefügt in großer Zahl (1_000_000);
  • Die Beschränkung, bei Schichtoperationen nur Zähler ohne Vorzeichen zu verwenden, wurde entfernt, wodurch unnötige Konvertierungen in den Typ uint vor der Verwendung der Operatoren „‹‹“ und „››“ vermieden werden.
  • Unterstützung für die Illumos-Plattform hinzugefügt (GOOS=illumos). Die Kompatibilität mit der Android 10-Plattform wurde sichergestellt. Die Anforderungen für die Mindestversionen von FreeBSD (11.2) und macOS (10.11 „El Capitan“) wurden erhöht.
  • Weiterentwicklung des neuen Modulsystems, das alternativ zu GOPATH eingesetzt werden kann. Im Gegensatz zu zuvor angekündigten Plänen in Go 1.13 ist dieses System nicht standardmäßig aktiviert und erfordert die Aktivierung über die Variable GO111MODULE=on oder die Verwendung eines Kontexts, in dem Module automatisch angewendet werden. Das neue Modulsystem bietet integrierte Versionierungsunterstützung, Funktionen zur Paketzustellung und ein verbessertes Abhängigkeitsmanagement. Mit Modulen sind Entwickler nicht mehr an die Arbeit innerhalb eines GOPATH-Baums gebunden, können explizit versionierte Abhängigkeiten definieren und wiederholbare Builds erstellen.

    Im Gegensatz zu früheren Versionen funktioniert die automatische Anwendung des neuen Systems jetzt, wenn eine go.mod-Datei im aktuellen Arbeitsverzeichnis oder übergeordneten Verzeichnis vorhanden ist, wenn der Befehl go ausgeführt wird, auch wenn sie sich im Verzeichnis GOPATH/src befindet. Neue Umgebungsvariablen wurden hinzugefügt: GOPRIVATE, das die Pfade öffentlich zugänglicher Module definiert, und GOSUMDB, das Zugriffsparameter auf die Prüfsummendatenbank für Module angibt, die nicht in der Datei go.sum aufgeführt sind;

  • Der Befehl „go“ lädt standardmäßig Module und überprüft ihre Integrität mithilfe der von Google verwalteten Modulspiegel- und Prüfsummendatenbank (proxy.golang.org, sum.golang.org und index.golang.org);
  • Die Unterstützung nur für Binärpakete wurde eingestellt. Das Erstellen eines Pakets im Modus „//go:binary-only-package“ führt jetzt zu einem Fehler.
  • Unterstützung für das Suffix „@patch“ zum Befehl „go get“ hinzugefügt, was angibt, dass das Modul auf die neueste Wartungsversion aktualisiert werden sollte, ohne jedoch die aktuelle Haupt- oder Nebenversion zu ändern;
  • Beim Abrufen von Modulen aus Quellcodeverwaltungssystemen führt der Befehl „go“ jetzt eine zusätzliche Prüfung der Versionszeichenfolge durch und versucht, Pseudoversionsnummern mit Metadaten aus dem Repository abzugleichen.
  • Unterstützung hinzugefügt Fehlerinspektion (Error Wrapping) durch die Erstellung von Wrappern, die die Verwendung von Standard-Fehlerhandlern ermöglichen. Zum Beispiel, Fehler „e“ kann durch die Bereitstellung einer Methode um den Fehler „w“ gewickelt werden Auspacken, gibt „w“ zurück. Sowohl die Fehler „e“ als auch „w“ sind im Programm verfügbar und Entscheidungen werden auf der Grundlage des Fehlers „w“ getroffen, aber „e“ stellt zusätzlichen Kontext zu „w“ bereit oder interpretiert ihn anders;
  • Die Leistung der Laufzeitkomponenten wurde optimiert (eine Geschwindigkeitssteigerung von bis zu 30 % wurde festgestellt) und eine aggressivere Rückgabe des Speichers an das Betriebssystem wurde implementiert (zuvor wurde der Speicher nach fünf oder mehr Minuten zurückgegeben, jetzt jedoch sofort nach Reduzierung der Heap-Größe).

Source: opennet.ru

Kommentar hinzufügen