Llançament del llenguatge de programació Go 1.18

Es presenta el llançament del llenguatge de programació Go 1.18, que està sent desenvolupat per Google amb la participació de la comunitat com una solució híbrida que combina l'alt rendiment dels llenguatges compilats amb avantatges dels llenguatges de script com la facilitat de codi d'escriptura, desenvolupament ràpid i protecció contra errors. El codi del projecte es distribueix sota la llicència BSD.

La sintaxi de Go es basa en els elements familiars del llenguatge C amb alguns préstecs del llenguatge Python. El llenguatge és bastant concís, però el codi és fàcil de llegir i entendre. El codi Go es compila en fitxers executables binaris separats que s'executen de manera nativa sense l'ús d'una màquina virtual (perfilatge, depuració i altres subsistemes de detecció de problemes en temps d'execució s'integren com a components en temps d'execució), cosa que permet assolir un rendiment comparable als programes C.

El projecte es desenvolupa inicialment tenint en compte la programació multiprocés i l'operació eficient en sistemes multinúcle, incloent-hi l'aportació de mitjans implementats a nivell d'operador per organitzar la computació paral·lela i la interacció entre mètodes executats en paral·lel. El llenguatge també proporciona una protecció integrada contra els sobrepassos dels blocs de memòria assignats i ofereix la possibilitat d'utilitzar el col·lector d'escombraries.

La nova versió afegeix suport per a funcions i tipus genèrics (genèrics), amb l'ajuda del qual un desenvolupador pot definir i utilitzar funcions dissenyades per treballar amb diversos tipus alhora. També és possible utilitzar interfícies per crear tipus combinats que abasten diversos tipus de dades. El suport per a genèrics s'implementa sense trencar la compatibilitat amb el codi existent. // Suma els valors establerts, funciona per als tipus int64 i float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V per _, v := rang m { s += v } retorn s } // Una altra opció amb una definició de tipus genèric: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Nombre](m mapa[K]V) V { var s V per _, v := rang m { s += v } retorn s }

Altres millores:

  • Al conjunt d'eines estàndard s'integren les utilitats per a les proves de codi fuzzing. Durant les proves de fuzzing, es genera un flux de totes les combinacions aleatòries possibles de dades d'entrada i es registren possibles errors durant el seu processament. Si una seqüència falla o no coincideix amb la resposta esperada, és molt probable que aquest comportament indiqui un error o una vulnerabilitat.
  • S'ha afegit suport per a espais de treball multimodulars, que us permet executar ordres en diversos mòduls alhora, la qual cosa us permet crear i executar codi simultàniament en diversos mòduls.
  • S'han fet importants optimitzacions de rendiment per als sistemes basats en processadors Apple M1, ARM64 i PowerPC64. S'ha habilitat la possibilitat d'utilitzar registres en lloc de la pila per passar arguments a les funcions i retornar el resultat. S'ha millorat el desenrotllament en línia dels bucles pel compilador. La comprovació de tipus al compilador s'ha redissenyat completament. Algunes proves mostren un augment del 20% del rendiment del codi en comparació amb la versió anterior, però la compilació en si mateixa triga aproximadament un 15% més.
  • En temps d'execució, s'ha augmentat l'eficiència de retornar la memòria alliberada al sistema operatiu i s'ha millorat el funcionament del col·lector d'escombraries, el comportament del qual s'ha tornat més previsible.
  • S'han afegit nous paquets net/netip i debug/buildinfo a la biblioteca estàndard. El suport per a TLS 1.0 i 1.1 està desactivat per defecte al codi de client. El mòdul crypto/x509 ha deixat de processar certificats signats amb el hash SHA-1.
  • S'han augmentat els requisits per a l'entorn a Linux; per funcionar, ara cal tenir un nucli Linux d'almenys la versió 2.6.32. En la propera versió, s'esperen canvis similars per a FreeBSD (el suport per a la branca de FreeBSD 11.x s'interromprà) i com a mínim caldrà que FreeBSD 12.2 funcioni.

Font: opennet.ru

Afegeix comentari