Vrijgave van de Go-programmeertaal 1.18

De release van de programmeertaal Go 1.18 wordt gepresenteerd, die door Google wordt ontwikkeld met deelname van de gemeenschap als een hybride oplossing die de hoge prestaties van gecompileerde talen combineert met dergelijke voordelen van scripttalen als het gemak van het schrijven van code , snelheid van ontwikkeling en foutbescherming. De projectcode wordt gedistribueerd onder de 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, foutopsporingsmodules en andere subsystemen voor het detecteren van runtime-problemen zijn geïntegreerd als runtime-componenten), wat prestaties mogelijk maakt die vergelijkbaar zijn met die van 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 nieuwe versie voegt ondersteuning toe voor generieke functies en typen (generics), met behulp waarvan een ontwikkelaar functies kan definiëren en gebruiken die zijn ontworpen om met meerdere typen tegelijk te werken. Het is ook mogelijk om interfaces te gebruiken om gecombineerde typen te creëren die meerdere gegevenstypen omvatten. Ondersteuning voor generieke geneesmiddelen wordt geïmplementeerd zonder de achterwaartse compatibiliteit met bestaande code te verbreken. // Sum set-waarden, werkt voor int64- en float64-typen func SumIntsOrFloats[K vergelijkbaar, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Een andere optie met een generieke typedefinitie: type Number interface { int64 | float64 } func SumNumbers[K vergelijkbaar, V Getal](m map[K]V) V { var s V voor _, v := bereik m { s += v } return s }

Andere verbeteringen:

  • Hulpprogramma's voor het testen van fuzzing-codes zijn geïntegreerd in de standaardtoolkit. Tijdens fuzzing-testen wordt een stroom van alle mogelijke willekeurige combinaties van invoergegevens gegenereerd en worden mogelijke fouten tijdens de verwerking ervan geregistreerd. Als een reeks crasht of niet overeenkomt met de verwachte reactie, duidt dit gedrag zeer waarschijnlijk op een bug of kwetsbaarheid.
  • Ondersteuning toegevoegd voor multi-modulaire werkruimten, waardoor u opdrachten op meerdere modules tegelijk kunt uitvoeren, waardoor u tegelijkertijd code in meerdere modules kunt bouwen en uitvoeren.
  • Er zijn aanzienlijke prestatie-optimalisaties doorgevoerd voor systemen op basis van Apple M1-, ARM64- en PowerPC64-processors. De mogelijkheid ingeschakeld om registers te gebruiken in plaats van de stapel om argumenten door te geven aan functies en het resultaat te retourneren. Verbeterd inline afrollen van lussen door de compiler. Typecontrole in de compiler is volledig opnieuw ontworpen. Sommige tests laten een toename van de codeprestaties met 20% zien vergeleken met de vorige release, maar het compileren zelf duurt ongeveer 15% langer.
  • Tijdens runtime is de efficiëntie van het retourneren van vrijgemaakt geheugen naar het besturingssysteem verhoogd en is de werking van de garbage collector verbeterd, waarvan het gedrag voorspelbaarder is geworden.
  • Nieuwe pakketten net/netip en debug/buildinfo zijn toegevoegd aan de standaardbibliotheek. Ondersteuning voor TLS 1.0 en 1.1 is standaard uitgeschakeld in clientcode. De crypto/x509-module is gestopt met het verwerken van certificaten die zijn ondertekend met de SHA-1-hash.
  • De eisen aan de omgeving in Linux zijn verhoogd; om te kunnen werken heb je nu een Linux-kernel van minimaal versie 2.6.32 nodig. In de volgende release worden soortgelijke veranderingen verwacht voor FreeBSD (ondersteuning voor de FreeBSD 11.x branch zal worden stopgezet) en op zijn minst zal FreeBSD 12.2 nodig zijn om te werken.

Bron: opennet.ru

Voeg een reactie