Lansering av Go 1.22

UtgÄvan av programmeringssprÄket Go 1.22 har presenterats, vilket utvecklas av Google i samarbete med communityn som en hybridlösning, som kombinerar den höga prestandan hos kompilatorbaserade sprÄk med sÄdana fördelar som enkla kodscript, snabb utveckling och skydd mot fel. Koden i projektet distribueras under BSD-licensen.

Go:s syntax Àr baserad pÄ bekanta element frÄn C-sprÄket, med vissa lÄn frÄn Oberon-sprÄket. SprÄket Àr tillrÀckligt koncist, men koden Àr lÀttlÀst och förstÄelig. Kod pÄ Go kompileras till fristÄende binÀra körbara filer som körs nativt, utan nÄgon virtuell maskin (profileringsmoduler, felsökningsverktyg och andra systemkomponenter som identifierar problem under körning integreras som runtime-komponenter), vilket gör att man uppnÄr prestanda som Àr jÀmförbar med program skrivna i C.

Projektet utvecklas ursprungligen med fokus pÄ flertrÄdning och effektiv anvÀndning pÄ flerkÀrniga system, och tillhandahÄller ocksÄ realiserade operatörsbaserade medel för att organisera parallella berÀkningar och interaktion mellan parallellt körande metoder. SprÄket tillhandahÄller ocksÄ inbyggda medel för att skydda mot att man gÄr utanför tillÄtna omrÄden av allokerade minnesblock och ger möjlighet att anvÀnda en skrÀpsamlare.

Bland förÀndringarna i den nya versionen:

  • I for-loopar har stöd för att definiera intervall av heltal lagts till, till exempel för att iterera över vĂ€rden frĂ„n 0 till 9 kan man nu anvĂ€nda loopen "for i := range 10 {...}".
  • I for-loopar har experimentellt (GOEXPERIMENT=rangefunc) stöd för funktionsintervall lagts till, vilket tillĂ„ter att ange en funktion som iterator. Till exempel, "for i, x := range slices.Backward(s) {...}".
  • Ett lĂ„ngvarigt problem med for-loopar har Ă„tgĂ€rdats, vilket ledde till gemensam anvĂ€ndning av loopvariabler i olika iterationer vid anrop av goroutines. Till exempel kommer koden values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } nu att skriva ut "a", "b" och "c", istĂ€llet för endast "c" som det var tidigare.
  • Arbetet med att optimera minnesanvĂ€ndningen under körning har genomförts, vilket har lett till en prestandaförbĂ€ttring pĂ„ 1-3% och en minskning av minnesförbrukningen i de flesta applikationer med 1%.
  • Arbetet med att implementera optimeringar baserade pĂ„ profilering av kod (PGO - Profile-guided optimization) i kompilatorn fortsĂ€tter, vilket gör det möjligt att beakta egenskaper som definieras under programmets körning. I den nya versionen har verktyg för devirtualisering anvĂ€nts för att ersĂ€tta indirekta anrop av olika metoder med exekvering av utvecklade inline-block.
  • Med aktiverad PGO har den tillagda Ă€ndringen lett till en prestandaförbĂ€ttring för de flesta program med 2-14%.
  • En experimentell (GOEXPERIMENT=newinliner) förbĂ€ttrad implementering av mekanismen för inlining av anrop har lagts till i kompilatorn, som anvĂ€nder heuristik för att separera viktiga och sekundĂ€ra operationer.
  • Till standardbiblioteket har paketet «math/rand/v2» lagts till, dĂ€r en mer heltĂ€ckande API har föreslagits och snabbare algoritmer för generering av pseudo-slumptal har anvĂ€nts.
  • I paketet net/http.ServeMux har möjligheten att ange metoder och masker i mallar lagts till, till exempel kommer mallen «GET /static/{id}/» att tillĂ€mpas pĂ„ begĂ€rningar med HTTP-metoden «GET» och behĂ„lla vĂ€rdet av den andra sektionen av den begĂ€rda vĂ€gen i identifieraren «id».
  • I paketet database/sql har stöd för typen Null[T] lagts till, vilket gör det möjligt att skanna kolumner som kan ta vĂ€rdet NULL. I paketet slices har funktionen Concat lagts till för att sammanfoga flera skivor av vilken typ som helst.
  • I kommandon för att arbeta med arbetsytor (modulkollektioner) har det blivit möjligt att anvĂ€nda katalogen «vendor», som innehĂ„ller beroenden till innehĂ„llet i arbetsytan. Katalogen skapas nĂ€r kommandot «go work vendor» körs och anvĂ€nds i byggkommandon vid angivande av alternativet "-mod=vendor" (aktiveras som standard om katalogen vendor finns).

Ändringar i beteendet hos verktygen.

  • go get stöds inte lĂ€ngre utanför modulen i det avvecklade GOPATH-lĂ€get (det vill sĂ€ga med GO111MODULE=off). Andra byggkommandon, som go build och go test, kommer att fortsĂ€tta fungera för avvecklade GOPATH-program under obestĂ€md tid.
  • go mod init försöker inte lĂ€ngre importera modulkrav frĂ„n konfigurationsfiler för andra leverantörsverktyg (sĂ„som Gopkg.lock).
  • go test -cover skriver nu ut sammanstĂ€llande tĂ€ckningsdata för tĂ€ckta paket som inte har egna testfiler. Fram till Go 1.22 rapporterade go test -cover för ett sĂ„dant paket? mymod/mypack [inga testfiler]

    och nu med Go 1.22 betraktas funktioner i paketet som otÀckta: mymod/mypack tÀckning: 0,0 % av uttalanden. Observera: om paketet helt saknar körbar kod kan vi inte rapportera om en meningsfull andel tÀckning; för sÄdana paket kommer go test fortsatt att rapportera att det saknas testfiler.

  • WebbgrĂ€nssnittet för trace-verktyget har uppdaterats nĂ„got i samband med stödet för den nya spĂ„raren, vissa problem har Ă„tgĂ€rdats och lĂ€sbarheten pĂ„ olika sidor har förbĂ€ttrats. WebbgrĂ€nssnittet stöder nu att utforska spĂ„rningar i ett strömriktat format. Trace-visaren visar nu ocksĂ„ den totala varaktigheten för alla systemanrop. Dessa förbĂ€ttringar gĂ€ller endast vid visning av spĂ„rningar skapade av program som skapades med Go 1.22 eller senare. I en kommande version kommer nĂ„gra av dessa förbĂ€ttringar att införas i spĂ„rningar som skapats av Ă€ldre versioner av Go.
  • Körningsmiljön lagrar nu skrĂ€pupplysningar baserat pĂ„ typer nĂ€rmare varje objekt i heapen. Denna förĂ€ndring sĂ€nker ocksĂ„ minneskostnaderna för de flesta Go-program med cirka 1 % tack vare deduplicering av överflödiga metadata. I vissa program kan förbĂ€ttringen vara mindre, eftersom denna förĂ€ndring justerar grĂ€nserna för klassstorlek i minnesallokatorn, vilket innebĂ€r att vissa objekt kan flyttas till en högre klassstorlek. Konsekvensen av denna förĂ€ndring Ă€r att adresser till vissa objekt, som tidigare alltid har varit förstĂ„dda som justerade mot 16 bytes (eller mer), nu endast kommer att justeras mot 8 bytes. Vissa program som anvĂ€nder assemblerinstruktioner och krĂ€ver att minnesadresser justeras mot storlekar större Ă€n 8 bytes och förlitar sig pĂ„ det tidigare beteendet hos minnesallokatorn kan misslyckas, men vi förvĂ€ntar oss att sĂ„dana program kommer att vara sĂ€llsynta. SĂ„dana program kan skapas med GOEXPERIMENT=noallocheaders som ger möjlighet att Ă„tergĂ„ till den gamla metadata-modellen och Ă„terstĂ€lla det tidigare justeringsbeteendet, men paketĂ€gare bör uppdatera sin assemblerkod för att undvika antaganden om justering, eftersom denna genvĂ€g kommer att tas bort i en framtida release.
  • Som nĂ€mndes i versionsnoterna för Go 1.20, krĂ€ver Go 1.22 nu en slutversion av Go 1.20 eller nyare för initial byggnation. Vi förvĂ€ntar oss att Go 1.24 kommer att krĂ€va en slutversion av Go 1.22 eller en senare version för initial byggnation.
    Originalet (go.dev)

KĂ€lla: linux.org.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster