Utgivelse av programmeringsspråket Go 1.18

Utgivelsen av programmeringsspråket Go 1.18 presenteres, som utvikles av Google med deltakelse fra fellesskapet som en hybridløsning som kombinerer den høye ytelsen til kompilerte språk med slike fordeler med skriptspråk som enkel å skrive kode , utviklingshastighet og feilbeskyttelse. Prosjektkoden distribueres under BSD-lisensen.

Gos syntaks er basert på kjente elementer fra C-språket med noen lån fra Python-språket. Språket er ganske kortfattet, men koden er lett å lese og forstå. Go-kode er kompilert til frittstående binære kjørbare filer som kjører naturlig uten å bruke en virtuell maskin (profilering, feilsøkingsmoduler og andre undersystemer for registrering av kjøretidsproblem er integrert som kjøretidskomponenter), noe som gir mulighet for ytelse som kan sammenlignes med C-programmer.

Prosjektet er i utgangspunktet utviklet med tanke på flertrådsprogrammering og effektiv drift på flerkjernesystemer, inkludert å tilby midler på operatørnivå for å organisere parallell databehandling og interaksjon mellom parallellutførte metoder. Språket gir også innebygd beskyttelse mot overtildelte minneblokker og gir muligheten til å bruke en søppeloppsamler.

Den nye versjonen legger til støtte for generiske funksjoner og typer (generiske), ved hjelp av hvilke en utvikler kan definere og bruke funksjoner designet for å fungere med flere typer samtidig. Det er også mulig å bruke grensesnitt for å lage kombinerte typer som spenner over flere datatyper. Støtte for generikk er implementert uten å bryte bakoverkompatibiliteten med eksisterende kode. // Sum sett verdier, fungerer for int64 og float64 typer func SumIntsOrFloats[K sammenlignbar, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Et annet alternativ med en generisk typedefinisjon: type Number interface { int64 | float64 } func SumTall[K sammenlignbare, V-tall](m kart[K]V) V { var s V for _, v := rekkevidde m { s += v } return s }

Andre forbedringer:

  • Verktøy for fuzzing-kodetesting er integrert i standardverktøysettet. Under fuzzing-testing genereres en strøm av alle mulige tilfeldige kombinasjoner av inngangsdata og mulige feil under behandlingen blir registrert. Hvis en sekvens krasjer eller ikke samsvarer med forventet respons, er det høyst sannsynlig at denne oppførselen indikerer en feil eller sårbarhet.
  • Lagt til støtte for multimodulære arbeidsområder, slik at du kan utføre kommandoer på flere moduler samtidig, slik at du kan bygge og kjøre kode i flere moduler samtidig.
  • Betydelige ytelsesoptimaliseringer er gjort for systemer basert på Apple M1-, ARM64- og PowerPC64-prosessorer. Aktivert muligheten til å bruke registre i stedet for stabelen for å sende argumenter til funksjoner og returnere resultatet. Forbedret inline-utrulling av løkker av kompilatoren. Typekontroll i kompilatoren har blitt fullstendig redesignet. Noen tester viser en 20 % økning i kodeytelse sammenlignet med forrige utgivelse, men selve kompileringen tar omtrent 15 % lengre tid.
  • I løpet av kjøretiden har effektiviteten av å returnere frigjort minne til operativsystemet blitt økt og driften av søppelsamleren har blitt forbedret, hvis oppførsel har blitt mer forutsigbar.
  • Nye pakker net/netip og debug/buildinfo er lagt til standardbiblioteket. Støtte for TLS 1.0 og 1.1 er deaktivert som standard i klientkoden. Krypto/x509-modulen har sluttet å behandle sertifikater signert med SHA-1-hash.
  • Kravene til miljøet i Linux er hevet for å fungere, du må nå ha en Linux-kjerne på minst versjon 2.6.32. I neste utgivelse forventes lignende endringer for FreeBSD (støtte for FreeBSD 11.x-grenen vil bli avviklet) og minst FreeBSD 12.2 vil være nødvendig for å fungere.

Kilde: opennet.ru

Legg til en kommentar