Vrijgave van de Go-programmeertaal 1.13

Geïntroduceerd vrijgave van programmeertaal Ga 1.13, dat door Google met medewerking van de gemeenschap wordt ontwikkeld als een hybride oplossing die de hoge prestaties van gecompileerde talen combineert met de voordelen van scripttalen zoals het gemak van het schrijven van code, de snelheid van ontwikkeling en foutbescherming. Projectcode gedistribueerd door onder BSD-licentie.

De syntaxis van Go is gebaseerd op bekende elementen van de C-taal, met enkele ontleningen aan de Python-taal. De taal is vrij beknopt, maar de code is gemakkelijk te lezen en te begrijpen. Go-code wordt gecompileerd in zelfstandige binaire uitvoerbare bestanden die native worden uitgevoerd zonder gebruik te maken van een virtuele machine (profilering, foutopsporing en andere subsystemen voor het detecteren van runtime-problemen zijn geïntegreerd als runtime-componenten), waarmee u prestaties kunt behalen die vergelijkbaar zijn met C-programma's.

Het project is in eerste instantie ontwikkeld met het oog op multi-threaded programmering en efficiënte werking op multi-core systemen, inclusief het bieden van middelen op operatorniveau voor het organiseren van parallel computergebruik en interactie tussen parallel uitgevoerde methoden. De taal biedt ook ingebouwde bescherming tegen overmatig toegewezen geheugenblokken en biedt de mogelijkheid om een ​​garbage collector te gebruiken.

De belangrijkste innovatiesgeïntroduceerd in de Go 1.13-release:

  • Voor het crypto/tls-pakket is protocolondersteuning standaard ingeschakeld TLS 1.3. Nieuw pakket "crypto/ed25519" toegevoegd met ondersteuning voor digitale handtekeningen van Ed25519;
  • Ondersteuning toegevoegd voor nieuwe numerieke letterlijke voorvoegsels om binaire getallen (bijv. 0b101), octale (0o377), imaginaire (2.71828i) en hexadecimale drijvende komma (0x1p-1021) te definiëren, en de mogelijkheid om het teken "_" te gebruiken om cijfers visueel te scheiden in grote aantallen (1_000_000);
  • De beperking op het gebruik van alleen niet-ondertekende tellers in ploegendiensten is verwijderd, waardoor onnodige conversies naar het uint-type worden vermeden voordat de operatoren “‹‹” en “››” worden gebruikt;
  • Ondersteuning toegevoegd voor het Illumos-platform (GOOS=illumos). Er is gezorgd voor compatibiliteit met het Android 10-platform. De vereisten voor de minimale versies van FreeBSD (11.2) en macOS (10.11 “El Capitan”) zijn verhoogd.
  • Verdere ontwikkeling van het nieuwe modulesysteem, dat als alternatief voor GOPATH kan worden gebruikt. In tegenstelling tot eerder aangekondigde plannen in Go 1.13 is dit systeem niet standaard ingeschakeld en vereist activering via de GO111MODULE=on variabele of het gebruik van een context waarin modules automatisch worden toegepast. Het nieuwe modulesysteem biedt geïntegreerde versiebeheerondersteuning, mogelijkheden voor pakketlevering en verbeterd afhankelijkheidsbeheer. Met modules zijn ontwikkelaars niet langer gebonden aan het werken binnen een GOPATH-boom, kunnen ze expliciet versiegebonden afhankelijkheden definiëren en herhaalbare builds maken.

    In tegenstelling tot eerdere releases werkt de automatische toepassing van het nieuwe systeem nu wanneer er een go.mod-bestand aanwezig is in de huidige werkmap of bovenliggende map wanneer het go-commando wordt uitgevoerd, ook wanneer het zich in de GOPATH/src-map bevindt. Er zijn nieuwe omgevingsvariabelen toegevoegd: GOPRIVATE, dat de paden van publiek toegankelijke modules definieert, en GOSUMDB, dat toegangsparameters specificeert tot de checksum-database voor modules die niet in het go.sum-bestand staan;

  • Het commando "go" laadt standaard modules en controleert hun integriteit met behulp van de modulespiegel en checksum-database die wordt onderhouden door Google (proxy.golang.org, sum.golang.org en index.golang.org);
  • Ondersteuning voor alleen binaire pakketten is stopgezet; het bouwen van een pakket in de “//go:binary-only-package”-modus resulteert nu in een fout;
  • Ondersteuning toegevoegd voor het achtervoegsel "@patch" aan de opdracht "go get", wat aangeeft dat de module moet worden bijgewerkt naar de nieuwste onderhoudsrelease, maar zonder de huidige hoofd- of secundaire versie te wijzigen;
  • Bij het ophalen van modules uit broncontrolesystemen voert het commando "go" nu een extra controle uit op de versiereeks, waarbij wordt geprobeerd pseudo-versienummers te matchen met metagegevens uit de repository;
  • Ondersteuning toegevoegd foutinspectie (error packing) door het creëren van wrappers die het gebruik van standaard foutafhandelaars mogelijk maken. Bijvoorbeeld, fout 'e' kan om fout 'w' worden gewikkeld door een methode op te geven Uitpakken, waarbij "w" wordt geretourneerd. Zowel fouten "e" als "w" zijn beschikbaar in het programma en beslissingen worden genomen op basis van fout "w", maar "e" geeft extra context aan "w" of interpreteert deze anders;
  • De prestaties van runtime-componenten zijn geoptimaliseerd (er is een snelheidsverhoging tot 30% opgemerkt) en er is een agressievere terugkeer van geheugen naar het besturingssysteem geïmplementeerd (voorheen werd geheugen na vijf of meer minuten geretourneerd, maar nu onmiddellijk na het verkleinen van de hoopgrootte).

Bron: opennet.ru

Voeg een reactie