Frigivelse af Go-programmeringssproget 1.18

Udgivelsen af ​​programmeringssproget Go 1.18 præsenteres, som udvikles af Google med deltagelse af fællesskabet som en hybridløsning, der kombinerer den høje ydeevne af kompilerede sprog med sådanne fordele ved scriptsprog som let at skrive kode , udviklingshastighed og fejlbeskyttelse. Projektkoden distribueres under BSD-licensen.

Go's syntaks er baseret på velkendte elementer fra C-sproget med nogle lån fra Python-sproget. Sproget er ret kortfattet, men koden er let at læse og forstå. Go-koden er kompileret til selvstændige binære eksekverbare filer, der kører indbygget uden brug af en virtuel maskine (profilering, fejlfindingsmoduler og andre undersystemer til registrering af runtime-problem er integreret som runtime-komponenter), hvilket giver mulighed for ydeevne, der kan sammenlignes med C-programmer.

Projektet er oprindeligt udviklet med henblik på multi-threaded programmering og effektiv drift på multi-core systemer, herunder at give operatør-niveau midler til at organisere parallel computing og interaktion mellem parallel-eksekverede metoder. Sproget giver også indbygget beskyttelse mod overallokerede hukommelsesblokke og giver mulighed for at bruge en skraldeopsamler.

Den nye version tilføjer understøttelse af generiske funktioner og typer (generiske), ved hjælp af hvilke en udvikler kan definere og bruge funktioner designet til at arbejde med flere typer på én gang. Det er også muligt at bruge grænseflader til at skabe kombinerede typer, der spænder over flere datatyper. Understøttelse af generiske stoffer er implementeret uden at bryde bagudkompatibiliteten med eksisterende kode. // Sum sæt værdier, virker for int64 og float64 typer func SumIntsOrFloats[K sammenlignelig, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // En anden mulighed med en generisk typedefinition: type Number interface { int64 | float64 } func SumNumbers[K sammenlignelige, V-tal](m kort[K]V) V { var s V for _, v := interval m { s += v } return s }

Andre forbedringer:

  • Hjælpeprogrammer til fuzzing-kodetest er integreret i standardværktøjssættet. Under fuzzing-testning genereres en strøm af alle mulige tilfældige kombinationer af inputdata, og mulige fejl under deres behandling registreres. Hvis en sekvens går ned eller ikke stemmer overens med det forventede svar, er det højst sandsynligt, at denne adfærd indikerer en fejl eller sårbarhed.
  • Tilføjet understøttelse af multi-modulære arbejdsområder, så du kan udføre kommandoer på flere moduler på én gang, så du samtidig kan bygge og køre kode i flere moduler.
  • Der er foretaget betydelige ydelsesoptimeringer for systemer baseret på Apple M1, ARM64 og PowerPC64 processorer. Aktiverede muligheden for at bruge registre i stedet for stakken til at sende argumenter til funktioner og returnere resultatet. Forbedret inline-udrulning af loops af compileren. Typekontrol i compileren er blevet fuldstændig redesignet. Nogle test viser en stigning på 20 % i kodeydeevne sammenlignet med den tidligere udgivelse, men selve kompileringen tager omkring 15 % længere tid.
  • I runtime er effektiviteten af ​​at returnere frigjort hukommelse til operativsystemet blevet øget, og betjeningen af ​​skraldeopsamleren er blevet forbedret, hvis adfærd er blevet mere forudsigelig.
  • Nye pakker net/netip og debug/buildinfo er blevet tilføjet til standardbiblioteket. Understøttelse af TLS 1.0 og 1.1 er som standard deaktiveret i klientkoden. Krypto/x509-modulet er stoppet med at behandle certifikater, der er signeret ved hjælp af SHA-1-hash.
  • Kravene til miljøet i Linux er blevet hævet for at fungere, du skal nu have en Linux-kerne på mindst version 2.6.32. I den næste udgivelse forventes lignende ændringer for FreeBSD (understøttelse af FreeBSD 11.x-grenen vil blive afbrudt), og mindst FreeBSD 12.2 vil være påkrævet for at fungere.

Kilde: opennet.ru

Tilføj en kommentar