Go-Programmiersprachenversion 1.14

Eingereicht von Veröffentlichung einer Programmiersprache Gehe 1.14, 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.14:

  • Das neue Modulsystem im Befehl „go“ wird für die allgemeine Verwendung als bereit erklärt, standardmäßig aktiviert und anstelle von GOPATH für die Abhängigkeitsverwaltung empfohlen. 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.
  • Hinzugefügt von Unterstützung für die Einbettung von Schnittstellen mit einem überlappenden Satz von Methoden. Methoden einer integrierten Schnittstelle können jetzt dieselben Namen und Signaturen haben wie Methoden in vorhandenen Schnittstellen. Explizit deklarierte Methoden bleiben nach wie vor eindeutig.
  • Die Leistung des „defer“-Ausdrucks wurde verbessert, sodass er fast so schnell ist wie der direkte Aufruf einer verzögerten Funktion, wodurch eine verzögerte Funktionsausführung in leistungsempfindlichem Code ermöglicht wird.
  • Es wird eine asynchrone Bevorrechtigung von Coroutinen (Goroutinen) bereitgestellt – Schleifen, die keine Funktionsaufrufe enthalten, können nun möglicherweise zu einem Deadlock des Schedulers führen oder den Start der Garbage Collection verzögern.
  • Die Effizienz des Speicherseitenzuordnungssystems wurde verbessert und es gibt jetzt deutlich weniger Sperrkonflikte in Konfigurationen mit großen GOMAXPROCS-Werten. Das Ergebnis ist eine reduzierte Latenz und ein erhöhter Durchsatz bei gleichzeitiger intensiver Verteilung großer Speicherblöcke.
  • Die Sperrung wurde optimiert und die Anzahl der Kontextwechsel wurde reduziert, wenn interne Timer ausgeführt werden, die in den Funktionen time.After, time.Tick und net.Conn.SetDeadline verwendet werden.
  • Im Befehl go ist das Flag „-mod=vendor“ standardmäßig aktiviert, wenn im Stammverzeichnis ein Anbieterverzeichnis vorhanden ist, das für die Bereitstellung externer Abhängigkeiten gedacht ist, die an einen bestimmten Anbieter gebunden sind. Es wurde ein separates „-mod=mod“-Flag hinzugefügt, um Module aus dem Modul-Cache statt aus dem „vendor“-Verzeichnis zu laden. Wenn die Datei go.mod schreibgeschützt ist, ist das Flag „-mod=readonly“ standardmäßig gesetzt, wenn kein oberstes „vendor“-Verzeichnis vorhanden ist. Flag „-modfile=file“ hinzugefügt, um eine alternative go.mod-Datei anstelle der Datei im Stammverzeichnis des Moduls anzugeben.
  • Die Umgebungsvariable GOINSECURE wurde hinzugefügt. Wenn sie festgelegt ist, erfordert der Befehl go nicht die Verwendung von HTTPS und überspringt die Zertifikatsprüfung, wenn Module direkt geladen werden.
  • Der Compiler hat das standardmäßig aktivierte Flag „-d=checkptr“ hinzugefügt, um den Code auf Übereinstimmung mit den Regeln für die sichere Verwendung von unsafe.Pointer zu überprüfen.
  • Im Lieferumfang ist ein neues Paket enthalten Hash/Mapash mit nicht-kryptografischen Hash-Funktionen zum Erstellen von Hash-Tabellen für beliebige Bytesequenzen oder Strings.
  • Experimentelle Unterstützung für die 64-Bit-RISC-V-Plattform unter Linux hinzugefügt.
  • Unterstützung für FreeBSD auf 64-Bit-ARM-Systemen hinzugefügt.

Source: opennet.ru

Kommentar hinzufügen