11 feb 2023·1 min leestijd

Go 1.20 introduceert preview voor profielgestuurde optimalisatie en taalverbeteringen

Go 1.20, de laatste update van de door Google ontwikkelde open source taal, bevat een preview voor profielgestuurde optimalisatie (PGO) en taalverbeteringen. PGO verbetert de prestaties met 3% tot 4% met inlining optimalisatie, terwijl andere optimalisaties in de pijplijn zitten.

Go 1.20 introduceert preview voor profielgestuurde optimalisatie en taalverbeteringen

Go 1.20, de productierelease van de door Google gecreëerde open-source taal die geroemd wordt om zijn eenvoud, concurrency en functionele programmeerfuncties, is geïntroduceerd, met een preview van profielgestuurde optimalisatie (PGO) voor de compiler. Go 1.20 kan worden gedownload van de officiële go.dev website.

Met de preview van PGO in Go 1.20 kan de compiler toolchain applicatie- en werklastspecifieke optimalisaties uitvoeren, afhankelijk van runtime profielinformatie. De huidige compiler ondersteunt pprof CPU-profielen, die kunnen worden verzameld met behulp van de pakketten runtime/pprof of net/http/pprof.

PGO, ook bekend als feedback-gerichte optimalisatie, houdt in dat profielgegevens van representatieve runs van de toepassing worden teruggekoppeld naar de compiler voor de volgende build van de toepassing. Door deze informatie te gebruiken kan de compiler beter geïnformeerde optimalisatiebeslissingen nemen. Benchmarks voor een representatieve set Go-programma's laten zien dat het inschakelen van PGO inlining optimalisatie de prestaties met ongeveer 3% tot 4% verbetert. Toekomstige versies zullen naar verwachting meer PGO optimalisaties introduceren.

Naast de introductie van PGO brengt Go 1.20 ook vier veranderingen in de taal. Ten eerste, de mogelijkheid om een slice te converteren naar een array pointer, geïntroduceerd in 2021's Go 1.17, wordt nu uitgebreid naar conversies van een slice naar een array. Ten tweede bevat het onveilige pakket drie nieuwe functies: SliceData, String en StringData. Deze functies bieden de volledige mogelijkheid om slice- en stringwaarden te construeren en te deconstrueren, ongeacht hun exacte representatie.

Ten derde bepaalt de specificatie nu dat struct-waarden één veld per keer worden vergeleken, waarbij rekening wordt gehouden met velden in de volgorde waarin ze voorkomen in de struct-type-definitie, en wordt gestopt bij de eerste wanverhouding. Ten vierde kunnen vergelijkbare types zoals gewone interfaces voldoen aan vergelijkbare beperkingen, zelfs als de type-argumenten niet strikt vergelijkbaar zijn. Dit maakt de instantiëring mogelijk van een typeparameter beperkt door vergelijkbare beperkingen met een niet strikt vergelijkbaar type-argument, zoals een interfacetype of een samengesteld type dat een interfacetype bevat.

Naast deze taalveranderingen komt Go 1.20 met diverse andere verbeteringen, zoals ondersteuning voor het verzamelen van code coverage profielen voor programma's, inclusief applicaties en integratietesten. De directory $GOROOT/pkg bewaart niet langer voorgecompileerde pakketactiviteiten voor de standaardbibliotheek, wat de grootte van de Go-distributie vermindert en scheefgroei van de C-toolchain voor cgo-pakketten voorkomt. Bovendien is de implementatie van go test -json versterkt om de robuustheid te vergroten, terwijl het commando go version -m nu een breder scala aan Go-binaire bestanden leest, waaronder Windows DLL's en Linux-binaire bestanden zonder execute-toestemming.

Go 1.20 biedt ook experimentele ondersteuning voor FreeBSD op RISC-V en schakelt cgo standaard uit op systemen zonder C toolchain. Go 1.20 zal echter de laatste uitgave zijn die macOS 10.13 High Sierra en 10.14 Mojave ondersteunt; Go 1.21 vereist macOS 10.15 Catalina of later.

No-code platform als AppMaster.io kan sterk profiteren van de integratie van nieuw geoptimaliseerde talen als Go 1.20. Door dergelijke krachtige tools voor web-, mobiele en back-endtoepassingen te integreren, kunnen bedrijven aanzienlijke verbeteringen realiseren op het gebied van productiviteit, gebruikerservaring en schaalbaarheid. Leer meer over no-code en low-code app-ontwikkeling om de technologiecurve voor te blijven.

Easy to start
Create something amazing

Experiment with AppMaster with free plan.
When you will be ready you can choose the proper subscription.

Get Started