Documentation for a newer release is available. View Latest

C

GCC 10.0.1

La suite de compiladores GNU ha sido actualizada a la versión 10.0.1. Consulte la última documentación para los cambios visibles del usuario. Los paquetes en Fedora 32 han sido recompilados con la versión nueva del compilador.

Características nuevas y mejoras generales

  • Funciones incorporadas nuevas:

    • El operador de preprocesador integrado __has_builtin se puede utilizar para consultar el soporte para funciones integradas proporcionadas por GCC y otros compiladores que lo admiten.

    • __builtin_roundeven para la función correspondiente de ISO/IEC TS 18661.

  • Opciones nuevas de línea de comando:

    • -fallocation-dce retira parejas innecesarias de operadores nuevos y borrados.

    • -fprofile-partial-training ahora puede ser utilizado para informar el compilador que rutas de código no cubiertas por la ejecución de cola no sería optimizada para tamaño.

    • -fprofile-reproducible controla nivel de reproducibilidad de perfil recopilado por -fprofile-generate. Esto permite recompilar el programa con el mismo resultado, lo cual resulta útil, por ejemplo, para paquetes de distribución.

  • Mejoras de optimización inter‐procedural:

    • El remplazo inter-procedural para agregados (IPA‐SRA) aprobados fueron re‐implementados para funcionar en tiempo de enlace.

    • -finline-functions ahora está habilitado en -O2 y fue devuelto para tamaño de código mejor en vez del rendimiento en compensaciones en tiempo de ejecución. El alineador heurístico además fue significativamente acelerado para evitar impacto negativo para las veces compiladas en -flto -O2.

    • Heurísticas alineadas y clonación de función ahora pueden utilizar información valor-rango para predecir efectivamente transformaciones individuales.

    • Durante la optimización de enlace-hora la Regla de Definición Única de C++ es utilizada para incrementar precisión de tipo basada en análisis de alias.

  • Optimización mejorada del tiempo de enlace:

    • Ha sido añadido un lto-dump binario nuevo. El programa puede volcar varias informaciones sobre un archivo de objeto bytecode LTO.

    • Fase paralela del LTO automáticamente puede detectar una jobserver de make en ejecución o puede volver al número de cores variables.

    • El bytecode LTO puede ser comprimido con el algoritmo zstd. Configurar el script automáticamente puede detectar el soporte con zstd.

    • La mayoría de los valores de --param ahora pueden estar especificados en granularidad de la unidad de traducción. Esto incluye todos los parámetros que controlan el delineador y otras optimizaciones inter-procedural. A diferencia de lanzamientos anteriores, GCC 10 ignorará los parámetros que controlan las optimizaciones especificadas en tiempo de enlazado en la misma manera que hacer para indicadores de optimización.

  • Perfil de mejoras de optimización conducida:

    • Perfil de Idioma Nuevo e Improvementsmaintenance del Idioma Específico durante compilación y particionado de código caliente/frío ha sido mejorado.

    • Utilizando -fprofile-values, un binario instrumentado puede seguir múltiples valores (hasta 4) para p.ej. invocaciones indirectas y proporcionar más información precisa del perfil.

Idiomas nuevos y mejoras específicas del idioma

  • La versión 2.6 de la especificación de OpenACC ahora es soportada en los compiladores de C, C++ y Fortran. Consulte la sección de estado de la implementación en la página wiki de OpenACC y la documentación de la biblioteca en tiempo de ejecución para más información.

  • Ahora OpenMP y OpenACC admiten carga externa (offliading) para las GPU AMD Radeon (GCN); admitidas son la tercera generación Fijo (fiji) y la quinta generación VEGA 10/VEGA 20 (gfx900 o gfx906).

Familia C

  • Atributos nuevos.

  • Avisos nuevos.

  • Mejoras para avisos existentes.

C

  • Varias características nuevas de la siguiente revisión de C2X del estándar ISO C se mantiene con -std=c2x y -std=gnu2x. Algunos de estas características son también admitidos como extensiones cuando compila para versiones de lengua más antigua. Además de las características listaron, algunos consta anteriormente mantenidos como prórrogas y ahora añadidos al C nivel está habilitado por defecto en C2X modo y no diagnosticado con -std=c2x -Wpedantic.

  • Ahora GCC por defecto a -fno-common. Como resultado, los accesos variables globales son más eficaces en varios objetivos. En C, variables globales con definiciones provisionales múltiples ahora resultado en errores de linker. Con -fcommon tales definiciones son silenciosamente fusionadas durante enlazar.

C++

  • Varias características de C++20 han sido implementadas.

  • Varios informes C++ Defect han sido resueltos.

  • Avisos nuevos.

  • G++ ahora puede detectar modificar objetos constantes en evaluación de constexpr (lo cuál es comportamiento indefinido).

  • G++ ya no emits avisos -Wsign-conversion bogus con los cast explícitos.

  • El estrechamiento ahora es detectado en más contextos (p.ej., valores de case).

  • Ha sido reducido el consumo de memoria del compilados en evaluación constexpr.

  • Ahora el noexcept-specifier es tratado como un contexto de clase completa como por [class.mem].

  • El atributo obsoleto ahora puede ser también utilizado en los espacios de nombres.

Biblioteca en tiempo de ejecución (libstdc++)

  • Mantenimiento experimental de C++2a mejorado, incluyendo.

  • Admite para RDSEED en std::random_device.

  • Dependencias de cabecera reducida, cabecera para compilación más rápida para algún código.

La Biblioteca GNU C versión 2.31

Fedora 32 proporciona la GNU C Library: glibc - versión 2.31. Cambios notables incluyen:

Características nuevas

  • La GNU C Library ahora soporta una característica de prueba de macro _ISOC2X_SOURCE para habilitar características desde el borrador de ISO X2X estándar. Solo algunas características desde este estándar del borrador está mantenidos por la GNU C Library, y como el borrador está bajo desarrollo activo, el conjunto de características habilitadas por esta macro es propenso a cambiar. Las características desde C2X también son habilitadas por _GNU_SOURCE, o compilando con gcc -std=gnu2x.

  • Las funciones de <math.h> que enmarcan sus resultados a un tipo más estrecho ahora tiene macros de tipo genérico correspondiente en <tgmath.h>, como fue definido en TS 18661-1:2014 y TS 18661-3:2015 como enmendado por la resolución de Solicitud de Aclaración 13 a TS 18661-3.

  • La función pthread_clockjoin_np ha sido añadida, habilitando unión con un hilo terminado con un reloj concreto. Concede esperar frente a CLOCK_MONOTONIC y CLOCK_REALTIME. Esta función es una extensión de GNU.

  • Se añadieron localización nueva: mnw_MM (Idioma Mon hablado en Mytanmar).

  • La resolución de DNS opcionalmente enviará el bit de AD (dato autenticado) en consultas si la opción de ad-confiado está puesta por medio de la directiva en /etc/resolv.conf (o si RES_TRUSTAD está puesto en _res.options). En este modo, el bit de AD, como proporcionado por el servidor de nombre, es disponible a aplicaciones qué llamada res_search y narró funciones. En el default modo, el bit de AD no es puesto en consultas, y es automáticamente aclarado en respuestas, indicando una carencia de DNSSEC validación. (Por tanto, los servidores de nombre y la ruta de red a ellos está tratada como no confiado.)

Características obsoletas y retiradas

  • Las funciones 'totalorder' y 'totalordermag', así como las funciones correspondientes para otros tipos de punto flotante, ahora aceptan argumentos de puntero para evitar que los NaN se conviertan en NaN silenciosos durante el paso de argumentos. Esto se ajusta a la resolución de la Solicitud de Aclaración 25 de la norma TS 18661-1, aplicada a C2X. Los binarios existentes que pasan argumentos de punto flotante directamente seguirán funcionando.

  • La función stime obsoleta ya no está disponible más para binarios nuevamente enlazados, y su declaración ha sido retirada desde <time.h>. Los programas que establecen el tiempo del sistema utilicen clock_settime en su lugar.

  • Planeamos retirar la función obsoleta ftime, y la cabecera <sys/timeb.h>, en una versión futura de glibc. En esta versión, la cabecera aún existe para invocar ftime causará una advertencia del compilador. En su lugar todos los programas utilizarían gettimeofday o clock_gettime.

  • La función gettimeofday ya no reporta más información sobre una zona horaria por todo el sistema. Esta característica de la era 4.2-BSD ha sido obsoleta por muchos años, como no puede manipular la complejidad completa de las zonas horarias del mundo, pero hasta ahora hemos estado manteniéndolo en una base con el mejor esfuerzo. Los cambios requeridos para mantener time_t de 64-bit en las arquitecturas de 32-bit han hecho esto es prácticamente inviable.

  • La función settimeofday aún puede ser utilizada para establecer una zona horaria por todo el sistema cuando el sistema operativo lo admita. Esto es porque el kenrel Linux reutilizaba el API, en algunas arquitecturas, para describir un desplazamiento similar a la zona horaria por todo el sistema entre el mantenedor del reloj de software por el kernel, y el reloj “RTC” que mantiene la hora cuando el sistema está apagado.

  • El ISA v7 de SPARC ya no estás mantenido. v8 aún está admitido, pero solo si la instrucción opcional CAS está implementada (por instancia, procesador LEON aún son mantenidos, pero los procesadores SuperSPARC no).

  • Si sucede que falla un vínculo vago durante dlopen, durante la ejecución de un constructor ELF, ahora el proceso está terminado. Previamente, el cargador dinámico devolvería NULL desde dlopen, con el error de vínculo capturado en un mensaje de dlerror. En general, esto es inseguro porque restablecer la pila en una función arbitraria la invocación no es posible.

  • Para las ABI de punto flotante de MIPS, la biblioteca C de GNU se configurará para necesitar una pila ejecutable a menos que se configure explícitamente en tiempo de compilación para requerir una versión mínima del kernel 4.8 o posterior. Esto se debe a que la ejecución de bifurcaciones de punto flotante en una pila no ejecutable en núcleos Linux anteriores a la versión 4.8 puede provocar fallos en las aplicaciones para algunas configuraciones MIPS. Si bien actualmente PT_GNU_STACK no se usa ampliamente en MIPS, se espera que las futuras versiones de GCC habiliten la pila no ejecutable de forma predeterminada con PT_GNU_STACK, lo que probablemente provoque un fallo en núcleos más antiguos.

  • Los adaptadores de llamadas al sistema para las llamadas al sistema time ahora usan las nuevas invocaciones al sistema time64 cuando están disponibles. En sistemas de 32-bit, estos adaptadores intentan llamar primero a las nuevas llamadas al sistema y, si no están presentes, recurren a las llamadas al sistema time de 32-bit anteriores. Esto puede causar incidencias en entornos que no pueden gestionar correctamente las llamadas al sistema no compatibles devolviendo -ENOSYS. Los entornos aislados de Seccomp se ven afectados por esta incidencia.

Cambios relativos a la seguridad

  • CVE-2019-19126: ld.so incorrecta al ignorar el LD_PREFER_MAP_32BIT_EXEC variable de entorno durante la ejecución del programa tras una transición de seguridad, que permite a atacantes locales restringir las posibles direcciones de distribución para las bibliotecas cargadas y, por lo tanto, eludir ASLR para un programa setuid. Informado por Marcin Kościelnicki.

Para obtener información detallada sobre glibc-2.31, consulte el siguiente enlace documento NEWS original; tenga en cuenta que es posible que deba desplazarse hacia abajo para encontrar la versión 2.31, ya que el documento se actualiza continuamente.

mpfr 4.0.2

FEdora 32 proporciona la versión 4.0.2 de la biblioteca GNU MPFR. Cambios notables incluyen:

  • mpfr ahora admite cachés compartidas para aplicaciones multi-hilo, por tanto reduciendo uso de memoria.

  • Improved caching: a minimum of 10% increase of the precision is guaranteed to avoid too many recomputations, thereby reducing CPU usage.

  • A small-precision mpz_t pool is used to reduce the number of memory allocations, thereby reducing CPU usage.

  • Several functions are now faster; e.g., mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_d, and mpfr_get_d.

  • The mpfr_div_ui function could produce incorrectly rounded results in mpfr 3; the bug has been fixed in mpfr 4.

Para obtener más información, consulte las notas de la versión upstream para la versión 4.0.0, 4.0.1, y 4.0.2.