Utgivning av programmeringsspråket Go 1.18

Utgivningen av programmeringsspråket Go 1.18 presenteras, som utvecklas av Google med deltagande av communityn som en hybridlösning som kombinerar den höga prestandan hos kompilerade språk med sådana fördelar med skriptspråk som att det är lätt att skriva kod , utvecklingshastighet och felskydd. Projektkoden distribueras under BSD-licensen.

Gos syntax är baserad på välbekanta delar av C-språket med några lån från Python-språket. Språket är ganska kortfattat, men koden är lätt att läsa och förstå. Go-koden kompileras till fristående binära körbara filer som körs inbyggt utan att använda en virtuell maskin (profilering, felsökningsmoduler och andra delsystem för upptäckt av runtimeproblem är integrerade som runtime-komponenter), vilket möjliggör prestanda jämförbar med C-program.

Projektet är initialt utvecklat med sikte på flertrådad programmering och effektiv drift på flerkärniga system, inklusive tillhandahållande av medel implementerade på operatörsnivå för att organisera parallell beräkning och interaktion mellan parallellt exekverade metoder. Språket ger också inbyggt skydd mot överskridningar av tilldelade minnesblock och ger möjlighet att använda sopsamlaren.

Den nya versionen lägger till stöd för generiska funktioner och typer (generics), med hjälp av vilka en utvecklare kan definiera och använda funktioner utformade för att fungera med flera typer samtidigt. Det är också möjligt att använda gränssnitt för att skapa kombinerade typer som spänner över flera datatyper. Stöd för generika implementeras utan att bryta bakåtkompatibiliteten med befintlig kod. // Summängdsvärden, fungerar för typerna int64 och float64 func SumIntsOrFloats[K jämförbar, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Ett annat alternativ med en generisk typdefinition: typ Number interface { int64 | float64 } func SumNumbers[K jämförbara, V Number](m map[K]V) V { var s V för _, v := intervall m { s += v } return s }

Andra förbättringar:

  • Verktyg för fuzzing-kodtestning är integrerade i standardverktygslådan. Under fuzzing-testning genereras en ström av alla möjliga slumpmässiga kombinationer av indata och möjliga fel under deras bearbetning registreras. Om en sekvens kraschar eller inte stämmer överens med det förväntade svaret, är det mycket troligt att detta beteende indikerar en bugg eller sårbarhet.
  • Lade till stöd för multimodulära arbetsytor, så att du kan köra kommandon på flera moduler samtidigt, så att du kan bygga och köra kod i flera moduler samtidigt.
  • Betydande prestandaoptimeringar har gjorts för system baserade på Apple M1-, ARM64- och PowerPC64-processorer. Aktiverade möjligheten att använda register istället för stacken för att skicka argument till funktioner och returnera resultatet. Förbättrad inline-upprullning av loopar av kompilatorn. Typkontroll i kompilatorn har gjorts om helt. Vissa tester visar en 20% ökning av kodprestanda jämfört med den tidigare utgåvan, men själva kompileringen tar cirka 15% längre tid.
  • Under körning har effektiviteten för att återföra frigjort minne till operativsystemet ökats och driften av sopsamlaren har förbättrats, vars beteende har blivit mer förutsägbart.
  • Nya paket net/netip och debug/buildinfo har lagts till i standardbiblioteket. Stöd för TLS 1.0 och 1.1 är inaktiverat som standard i klientkoden. Krypto/x509-modulen har slutat bearbeta certifikat som signerats med SHA-1-hash.
  • Kraven på miljön i Linux har höjts, för att fungera behöver du nu ha en Linuxkärna på minst version 2.6.32. I nästa utgåva förväntas liknande förändringar för FreeBSD (stöd för FreeBSD 11.x-grenen kommer att upphöra) och åtminstone FreeBSD 12.2 kommer att krävas för att fungera.

Källa: opennet.ru

Lägg en kommentar