Vrijgave van de Go-programmeertaal 1.14

Geïntroduceerd vrijgave van programmeertaal Ga 1.14, 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.14-release:

  • Het nieuwe modulesysteem in de opdracht "go" is gereed verklaard voor algemeen gebruik, standaard ingeschakeld en aanbevolen voor afhankelijkheidsbeheer in plaats van GOPATH. 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.
  • Toegevoegd ondersteuning voor het inbedden van interfaces met een overlappende reeks methoden. Methoden uit een ingebouwde interface kunnen nu dezelfde namen en handtekeningen hebben als methoden in bestaande interfaces. Expliciet gedeclareerde methoden blijven net als voorheen uniek.
  • De prestaties van de uitdrukking "defer" zijn verbeterd, waardoor deze bijna net zo snel is als het rechtstreeks aanroepen van een uitgestelde functie, waardoor uitgestelde functie-uitvoering in prestatiegevoelige code mogelijk is.
  • Er is voorzien in asynchrone voorrang op coroutines (goroutines) - lussen die geen functieaanroepen bevatten, kunnen nu potentieel leiden tot een impasse in de planner of de start van de garbagecollection vertragen.
  • De efficiëntie van het toewijzingssysteem voor geheugenpagina's is verbeterd en er zijn nu aanzienlijk minder vergrendelingsconflicten in configuraties met grote GOMAXPROCS-waarden. Het resultaat is een lagere latentie en een hogere doorvoer, terwijl tegelijkertijd grote geheugenblokken intensief worden gedistribueerd.
  • De vergrendeling is geoptimaliseerd en het aantal contextwisselingen is verminderd bij het uitvoeren van interne timers die worden gebruikt in de functies time.After, time.Tick, net.Conn.SetDeadline.
  • In het go-commando is de vlag “-mod=vendor” standaard ingeschakeld als er een leveranciersmap in de root aanwezig is, bedoeld voor het leveren van externe afhankelijkheden die aan een specifieke leverancier zijn gekoppeld. Een aparte vlag "-mod=mod" toegevoegd om modules uit de modulecache te laden in plaats van uit de map "vendor". Als het bestand go.mod alleen-lezen is, wordt de vlag “-mod=readonly” standaard ingesteld als er geen bovenste “vendor”-directory is. Vlag "-modfile=file" toegevoegd om een ​​alternatief go.mod-bestand op te geven in plaats van dat in de hoofdmap van de module.
  • De omgevingsvariabele GOINSECURE is toegevoegd. Indien ingesteld, vereist de opdracht go niet het gebruik van HTTPS en wordt de certificaatcontrole overgeslagen bij het rechtstreeks laden van modules.
  • De compiler heeft de vlag “-d=checkptr” toegevoegd, die standaard is ingeschakeld, om te controleren of de code voldoet aan de regels voor veilig gebruik van unsafe.Pointer.
  • Bij de levering is een nieuw pakket inbegrepen hash/maphash met niet-cryptografische hashfuncties om hashtabellen te maken voor willekeurige bytereeksen of strings.
  • Experimentele ondersteuning toegevoegd voor het 64-bit RISC-V-platform op Linux.
  • Ondersteuning toegevoegd voor FreeBSD op 64-bit ARM-systemen.

Bron: opennet.ru

Voeg een reactie