Documentation for a newer release is available. View Latest

C

GCC 10.0.1

La suite de compiladors GNU s’ha actualitzat a la versió 10.0.1. Consulteu la documentació upstream per veure els canvis visibles per a l’usuari. Els paquets a Fedora 32 s’han reconstruït amb la nova versió del compilador.

Noves característiques i millores generals

  • Noves funcions incorporades:

    • L’operador de preprocessador incorporat __has_builtin es pot utilitzar per consultar el suport per a funcions incorporades proporcionades per GCC i altres compiladors que ho admetin.

    • __builtin_roundeven per a la funció corresponent d’ISO/IEC TS 18661.

  • Noves opcions de línia d’ordres:

    • -fallocation-dce elimina parells innecessaris d’operadors new i delete.

    • -fprofile-partial-training ara es pot utilitzar per informar el compilador que els camins de codi no coberts per l’execució d’entrenament no s’han d’optimitzar per mida.

    • -fprofile-reproducible controla el nivell de reproductibilitat del perfil recopilat per -fprofile-generate. Això fa possible reconstruir el programa amb el mateix resultat, la qual cosa és útil, per exemple, per als paquets de distribució.

  • Millores d’optimització inter-procedimental:

    • El pas de substitució escalar inter-procedimental per a agregats (IPA-SRA) s’ha reimplementat per funcionar en temps d’enllaç.

    • -finline-functions ara està habilitat a -O2 i s’ha ajustat per a un millor compromís entre mida de codi i rendiment d’execució. L’heurística del inliner també s’ha accelerat significativament per evitar un impacte negatiu en els temps de compilació -flto -O2.

    • L’heurística del inliner i la clonació de funcions ara poden utilitzar informació de rang de valors per predir l’efectivitat de les transformacions individuals.

    • Durant l’optimització en temps d’enllaç, la Regla d’Una Definició de C++ s’utilitza per augmentar la precisió de l’anàlisi d’àlies basat en tipus.

  • Millores d’optimització en temps d’enllaç:

    • S’ha afegit un nou binari lto-dump. El programa pot bolcar informació diversa sobre un fitxer objecte de bytecode LTO.

    • La fase paral·lela de l’LTO pot detectar automàticament un jobserver de make en execució o recórrer al nombre de nuclis disponibles.

    • El bytecode LTO es pot comprimir amb l’algorisme zstd. L’script de configuració pot detectar automàticament el suport zstd.

    • La majoria dels valors --param ara es poden especificar a nivell de unitat de traducció. Això inclou tots els paràmetres que controlen el inliner i altres optimitzacions inter-procedimentals. A diferència de versions anteriors, GCC 10 ignorarà els paràmetres que controlen optimitzacions especificats en temps d’enllaç i aplicarà els paràmetres especificats en temps de compilació de la mateixa manera que es fa per a les banderes d’optimització.

  • Millores d’optimització guiades per perfil:

    • S’han millorat el Improvementsmaintenance de nous llenguatges de perfil i específiques del llenguatge durant la compilació i la partició de codi calent/fred.

    • Utilitzant -fprofile-values, un binari instrumentat pot fer un seguiment de múltiples valors (fins a 4) per a p. ex. crides indirectes i proporcionar informació de perfil més precisa.

Nous llenguatges i millores específiques del llenguatge

  • La versió 2.6 de l’especificació OpenACC ara és compatible amb els compiladors C, C++ i Fortran. Consulteu la secció d’estat de la implementació a la pàgina wiki d’OpenACC i la documentació de la biblioteca d’execució per a més informació.

  • OpenMP i OpenACC ara admeten la descàrrega a GPUs AMD Radeon (GCN); s’admeten la tercera generació Fiji (fiji) i la cinquena generació VEGA 10/VEGA 20 (gfx900 o gfx906).

Família C

  • Nous atributs.

  • Nous avisos.

  • Millores als avisos existents.

C

  • Diverses noves característiques de la propera revisió C2X de l’estàndard ISO C són compatibles amb -std=c2x i -std=gnu2x. Algunes d’aquestes característiques també són compatibles com a extensions quan es compila per a versions de llenguatge més antigues. A més de les característiques llistades, algunes característiques anteriorment compatibles com a extensions i ara afegides a l’estàndard C estan habilitades per defecte en el mode C2X i no es diagnostiquen amb -std=c2x -Wpedantic.

  • GCC ara utilitza -fno-common per defecte. Com a resultat, els accessos a variables globals són més eficients en diversos objectius. En C, les variables globals amb múltiples definicions provisionals ara donen lloc a errors d’enllaçador. Amb -fcommon aquestes definicions es fusionen silenciosament durant l’enllaç.

C++

  • S’han implementat diverses característiques de C++20.

  • S’han resolt diversos informes de defectes de C++ Defect.

  • Nous avisos.

  • G++ ara pot detectar la modificació d’objectes constants en l’avaluació de constexpr (que és un comportament indefinit).

  • G++ ja no emet avisos -Wsign-conversion falsos amb conversions explícites.

  • L’estrenyiment es detecta ara en més contextos (p. ex., valors de case).

  • El consum de memòria del compilador s’ha reduït en l’avaluació de constexpr.

  • El noexcept-specifier ara es tracta correctament com un context de classe completa segons [class.mem].

  • L’atribut deprecated ara es pot utilitzar també en espais de noms.

Biblioteca d’execució (libstdc++)

  • Suport experimental millorat per a C++2a, incloent.

  • Suport per a RDSEED en std::random_device.

  • Dependències de capçalera reduïdes, la qual cosa porta a una compilació més ràpida per a algun codi.

La Biblioteca C de GNU versió 2.31

Fedora 32 proporciona la Biblioteca C de GNU - glibc - versió 2.31. Els canvis notables inclouen:

Noves característiques

  • La Biblioteca C de GNU ara admet una macro de prova de característiques _ISOC2X_SOURCE per habilitar característiques de l’esborrany de l’estàndard ISO C2X. Només algunes característiques d’aquest esborrany d’estàndard són compatibles amb la Biblioteca C de GNU, i com que l’esborrany està en desenvolupament actiu, el conjunt de característiques habilitades per aquesta macro és susceptible de canviar. Les característiques de C2X també s’habiliten per _GNU_SOURCE, o compilant amb gcc -std=gnu2x.

  • Les funcions <math.h> que arrodoneixen els seus resultats a un tipus més estret ara tenen macros genèriques de tipus corresponents a <tgmath.h>, tal com es defineix a TS 18661-1:2014 i TS 18661-3:2015 esmenats per la resolució de la Sol·licitud d’Aclariment 13 a TS 18661-3.

  • S’ha afegit la funció pthread_clockjoin_np, que permet unir-se amb un fil acabat amb un rellotge específic. Permet esperar contra CLOCK_MONOTONIC i CLOCK_REALTIME. Aquesta funció és una extensió GNU.

  • Nova configuració regional afegida: mnw_MM (idioma Mon parlat a Myanmar).

  • El solucionador stub de DNS enviarà opcionalment el bit AD (dades autenticades) a les consultes si l’opció trust-ad està establerta mitjançant la directiva d’opcions a /etc/resolv.conf (o si RES_TRUSTAD està establert a _res.options). En aquest mode, el bit AD, tal com el proporciona el servidor de noms, està disponible per a les aplicacions que criden res_search i funcions relacionades. En el mode predeterminat, el bit AD no s’estableix a les consultes, i s’esborra automàticament a les respostes, indicant una manca de validació DNSSEC. (Per tant, els servidors de noms i el camí de xarxa cap a ells es tracten com a no fiables.)

Funcions obsoletes i eliminades

  • Les funcions totalorder i totalordermag, i les funcions corresponents per a altres tipus de coma flotant, ara prenen arguments de punter per evitar que els NaNs senyalitzats es converteixin possiblement en NaNs silenciosos en el pas d’arguments. Això està d’acord amb la resolució de la Sol·licitud d’Aclariment 25 a TS 18661-1, aplicat per a C2X. Els binaris existents que passen arguments de coma flotant directament continuaran funcionant.

  • La funció obsoleta stime ja no està disponible per als binaris recentment enllaçats, i la seva declaració s’ha eliminat de <time.h>. Els programes que estableixen l’hora del sistema haurien d’utilitzar clock_settime en el seu lloc.

  • Planegem eliminar la funció obsoleta ftime, i la capçalera <sys/timeb.h>, en una versió futura de glibc. En aquesta versió, la capçalera encara existeix però cridar ftime provocarà un avís del compilador. Tots els programes haurien d’utilitzar gettimeofday o clock_gettime en el seu lloc.

  • La funció gettimeofday ja no informa informació sobre una zona horària de tot el sistema. Aquesta característica de l’era 4.2-BSD ha estat desaprovada durant molts anys, ja que no pot gestionar tota la complexitat de les zones horàries del món, però fins ara l’hem mantingut com hem pogut. Els canvis necessaris per donar suport a time_t de 64 bits en arquitectures de 32 bits han fet que això ja no sigui pràctic.

  • La funció settimeofday encara es pot utilitzar per establir una zona horària de tot el sistema quan el sistema operatiu ho admet. Això és perquè el nucli de Linux va reutilitzar l’API, en algunes arquitectures, per descriure un desplaçament semblant a una zona horària de tot el sistema entre el rellotge de programari mantingut pel nucli i el rellotge "RTC" que manté l’hora quan el sistema està apagat.

  • SPARC ISA v7 ja no és compatible. v8 encara és compatible, però només si s’implementa la instrucció opcional CAS (per exemple, els processadors LEON encara són compatibles, però els processadors SuperSPARC no).

  • Si es produeix un error d’enllaç mandrós durant dlopen, durant l’execució d’un constructor ELF, el procés ara finalitza. Anteriorment, el carregador dinàmic retornava NULL des de dlopen, amb l’error d’enllaç mandrós capturat en un missatge dlerror. En general, això és insegur perquè restablir la pila en una crida de funció arbitrària no és possible.

  • Per a les ABI de coma flotant de maquinari MIPS, la Biblioteca C de GNU es configurarà per necessitar una pila executable tret que es configuri explícitament en temps de compilació per requerir la versió mínima del nucli 4.8 o més nova. Això és perquè executar branques de coma flotant en una pila no executable en nuclis de Linux anteriors a 4.8 pot portar a fallades d’aplicació per a algunes configuracions MIPS. Encara que actualment PT_GNU_STACK no s’utilitza àmpliament a MIPS, s’espera que futures versions de GCC habilitin la pila no executable per defecte amb PT_GNU_STACK per defecte i per tant és probable que provoquin una fallada en nuclis més antics.

  • Els embolcalls de crida al sistema per a crides al sistema de temps ara utilitzen les noves crides al sistema time64 quan estan disponibles. En objectius de 32 bits, aquests embolcalls intenten cridar les noves crides al sistema primer i recorren a les antigues crides al sistema de temps de 32 bits si no estan presents. Això pot causar problemes en entorns que no poden gestionar crides al sistema no compatibles amb gràcia retornant -ENOSYS. Els sandboxes de Seccomp es veuen afectats per aquest problema.

Canvis relacionats amb la seguretat

  • CVE-2019-19126: ld.so no va ignorar la LD_PREFER_MAP_32BIT_EXEC variable d’entorn durant l’execució del programa després d’una transició de seguretat, permetent als atacants locals restringir les possibles adreces de mapatge per a biblioteques carregades i així evitar ASLR per a un programa setuid. Informat per Marcin Kościelnicki.

Per obtenir informació detallada sobre glibc-2.31 consulteu el document de NOTÍCIES upstream; tingueu en compte que potser haureu de desplaçar-vos cap avall per trobar la versió 2.31 a mesura que el document continua actualitzant-se.

mpfr 4.0.2

Fedora 32 proporciona la biblioteca GNU MPFR versió 4.0.2. Els canvis notables inclouen:

  • mpfr ara admet cachés compartits per a aplicacions multithread, reduint així l’ús de memòria.

  • Memòria cau millorada: es garanteix un augment mínim del 10% de la precisió per evitar massa recompues, reduint així l’ús de CPU.

  • S’utilitza una piscina mpz_t de petita precisió per reduir el nombre d’assignacions de memòria, reduint així l’ús de CPU.

  • Diverses funcions ara són més ràpides; p. ex., mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_d i mpfr_get_d.

  • La funció mpfr_div_ui podria produir resultats arrodonits incorrectament a mpfr 3; l’error s’ha corregit a mpfr 4.

Per obtenir més informació, visiteu les notes de la versió upstream per a la versió 4.0.0, 4.0.1 i 4.0.2.