Documentation for a newer release is available. View Latest

C

GCC 10.0.1

GNU 컴파일러 제품군은 버전 10.0.1로 최신화 되었습니다. 사용자의 시각적인 변경 확인은 업스트림 문서를 참고하세요. 페도라 32에 있는 꾸러미는 새로운 컴파일 버전으로 재구축되었습니다.

새로운 기능과 일반적인 개선

  • 새로 구성된 기능:

    • has_builtin 내장된 전처리기 연산자는 GCC와 이를 지원하는 다른 컴파일러에 의해 제공되는 내-장 함수를 위한 지원을 질의하는 데 사용 될 수 있습니다.

    • ISO/IEC TS 18661에서 일치하는 기능을 위한 __builtin_roundeven.

  • 새로운 명령-줄 선택:

    • `-fallocation-dce`는 필요하지 않은 new 와 delete 연산자 쌍을 제거합니다.

    • `-fprofile-partial-training`는 이제 훈련된 실행에 의해 적용되지 않는 코드 경로는 크기에 최적화되지 않는 컴파일러를 알리는 데 사용 할 수 있습니다.

    • `-fprofile-reproducible`은 by -fprofile-generate에 의해 수집된 프로파일의 재현성 수준을 제어합니다. 이는 배포 꾸러미 등의 예로, 유용한 동일 결과로 프로그램을 다시 제작 할 수 있습니다.

  • 절차-간 최적화 개선:

    • 집계에 대한 절차-간 스칼라 대체(IPA-SRA) 패스가 연결-시간에 작동하도록 다시-구현되었습니다.

    • `-finline-functions`은 이제 -O2에서 활성화되었고 더 나은 코드 크기와 동작시간 성능 절-충을 위해 재조정되었습니다. 인라이너 간편추리의 속도는 -flto -O2 컴파일 시간에 부정적인 영향을 피하도록 속도도 크게 향상되었습니다.

    • 내장된 휴리스틱과 함수 복제는 이제 값-범위 자료 사용하여 개별 변환의 효율성을 예측 할 수 있습니다.

    • 연결-시간 최적화 중에 C++ 단일 정의 규칙을 사용하여 유형 기반 별칭 분석의 정밀도를 높입니다.

  • 연결-시간 최적화 개선:

    • 신규 바이너리 lt0-dump가 추가되었습니다. 프로그램은 LTO 바이트코드 객체 파일에 대해 다양한 정보를 덤프 할 수 있습니다.

    • LTO의 병렬 양상은 동작 중인 make의 작업서버를 자동으로 감지하거나 사용 가능한 코어 수로 떨어 트릴 수 있습니다.

    • LTO 바이트코드는 zstd 알고리즘으로 함께 압축 할 수 있습니다. 스크립트가 zstd 지원을 자동으로 탐색 할 수 있도록 구성합니다.

    • 대부분의 --param 값은 이제 번역 단위 세분성에서 지정 할 수 있습니다. 이는 인라이너 및 기타 절차-간 최적화를 제어하는 모든 매개변수를 포함됩니다. 이전 출시와 달리, GCC 10은 연결-시간에서 지정된 최적화를 제어하는 매개변수를 무시하고 최적화 플래그를 위해 실행되는 동일한 방식에서 컴파일-시간에 지정된 매개변수를 적용합니다.

  • 프로파일 중심의 최적화 개선:

    • 프로파일 신규 언어 및 컴파일 중에 언어-지정 `Improvementsmaintenance`과 hot/cold 코드 구획 나누기가 개선되었습니다.

    • -fprofile-values 사용하기, 계측된 바이너리는 예로 여러 값(최대 4개)을 추적 할 수 있습니다. 간접 콜과 보다 정확한 프로파일 정보를 제공합니다.

신규 언어와 언어-상세화 개선

  • OpenACC 상세 버전 2.6 은 이제 C, C++ 및 포트란 컴파일러에서 지원됩니다. 더 많은 정보를 위해 OpenACC 위키 부분에서 구현 상태 부분 및 동작-시간 라이브러리 문서를 참고하세요.

  • OpenMP 및 OpenACC는 이제 AMD Radeon (GCN) GPU로 분담하도록 지원합니다; 3-세대 Fiji (fiji) 및 5-세대 VEGA 10/VEGA 20 (gfx900 또는 gfx906)가 지원되었습니다.

C 계열

  • 신규 속성.

  • 신규 경고.

  • 기존 경고에 대한 개선 사항.

C

  • ISO C 표준의 다가오는 C2X 개정판에서 여러 신규 기능은 -std=c2x 및 `-std=gnu2x`와 함께 지원됩니다. 이들 기능의 일부는 이전 언어 버전을 위해 컴파일 될 때에 확장으로도 지원됩니다. 나열된 기능 외에도, 일부 기능은 이전에 확장으로 지원되었고 이제 C 표준에 추가된 일부 기능은 C2X 방식에서 기본으로 활성화되고 `-std=c2x -Wpedantic`으로 진단되지 않습니다.

  • GCC는 이제 `-fno-common`를 기본으로 합니다. 결과적으로, 전역 변수 접근은 다양한 대상에서 더욱 효율적입니다. C에서, 여러 잠정적 정의를 갖는 전역 변수는 링커 오류로 귀결됩니다. `-fcommon`와 함께 해당 정의는 연결 중에 자동으로 병합됩니다.

C++

  • 여러가지 C++20 기능이 구현되었습니다.

  • 여러가지 C++ Defect 보고가 해결 되었습니다.

  • 신규 경고.

  • G++는 이제 constexpr 평가에서 상수 객체 수정을 감지 할 수 있습니다(정의되지 않은 행위).

  • G++는 더 이상 명시적 예상과 함께 가짜의 -Wsign-conversion 경고를 표시하지 않습니다.

  • 축소는 이제 더 많은 문맥에서 감지되었습니다 (예제: 케이스 값).

  • 컴파일러의 메모리 소비는 constexpr 평가에서 감소되었습니다.

  • `noexcept-specifier`는 이제 `[class.mem]`에 따라 완전한-클래스 문맥으로 적절하게 처리됩니다.

  • deprecated 속성은 이제 또한 이름공간에서도 사용 될 수 있습니다.

실행시간(runtime) 라이브러리 (libstdc++)

  • 다음을 포함하여 향상된 실험적인 C++2a 지원.

  • `std::random_device`에서 RDSEED를 위한 지원.

  • 헤더 종속성을 감소시켜서, 일부 코드의 컴파일 속도를 높입니다.

GNU C 라이브러리 버전 2.31

페도라 32은 GNU C 라이브러리 -glibc - 버전 2.31를 제공합니다. 주목 할만한 변경은 다음을 포함합니다:

신규 기능

  • GNU C 라이브러리는 이제 초안 ISO C2X 표준에서 특성을 활성화하도록 특성 시험 매크로 _ISOC2X_SOURCE를 지원합니다. 이들 초안 표준에서 일부 특성만 GNU C 라이브러리에서 지원되고, 초안이 활발하게 개발 중이므로, 이 매크로에 의해 활성화된 특성 세트는 변경될 수 있습니다. C2X에서 특성은 또한 _GNU_SOURCE, 또는 `gcc -std=gnu2x`와 함께 컴파일하여 활성화되었습니다.

  • 이들 결과를 더 좁은 유형으로 반올림하는 <math.h> 함수는 이제 TS 18661-3에 대한 설명 요청 13의 결의안으로 수정되어 TS 18661-1:2014 및 TS 18661-3:2015에서 정의된 `<tgmath.h>`에서 일치하는 유형-일반 매크로를 갖습니다.

  • 함수 pthread_clockjoin_np`가 지정된 시계로 종료된 쓰레드와 함께 참여 할 수 있도록 추가되었습니다. 이는 CLOCK_MONOTONIC 및 `CLOCK_REALTIME`에 따라 기다리도록 합니다. 이와 같은 함수는 GNU 확장입니다.

  • 신규 로케일이 추가되었습니다: mnw_MM (미얀마에서 말로 사용되는 Mon 언어).

  • DNS stub 해결자는 만약 trust-ad 옵션이 /etc/resolv.conf (또는 만약 `RES_TRUSTAD`가 `_res.options`으로 설정되면)의 옵션 지시문을 통해 설정된 경우라면 질의에서 선택적인 AD(인증된 자료) 비트를 전송합니다. 이와 같은 방식에서 네임서버에 의해 제공하는 AD 비트를 res_search 및 연관련 기능을 호출하는 응용 프로그램에서 사용 할 수 있습니다. 기본 방식에서, AD 비트는 질의로 설정되지 않고, 응답에서 자동으로 제거되고, DNSSEC 검증 부족을 나타냅니다. (그러므로, 네임서버와 및 이들에 대한 네트워크 경로는 신뢰 할 수 없는 것으로 취급됩니다.)

더 이상 사용하지 않고 제거된 기능

  • totalorder 및 totalordermag 함수, 그리고 부동-소수점 유형과 일치하는 함수는, 이제 포인터 인수를 사용하여 인수 전달에서 NaN이 조용한 NaN으로 전환될 수 있는 신호를 방지합니다. 이는 C2X에 적용되는 TS 18661-1에 대한 설명 요청 25의 결의안을 따릅니다. 부동-소수점 인수를 직접 전달하는 기존 바이너리는 동작하도록 유지합니다.

  • 폐기된 함수 stime은 이제 새롭게 연결된 바이너리에서 더 이상 사용 할 수 없고, 이 선언은 <time.h> 에서 제거되었습니다. 시스템 시간에서 설정된 프로그램은 대신에 `clock_settime`을 사용해야 합니다.

  • 우리는 glibc의 미래 버전에서 폐기된 함수 ftime, 그리고 헤더 `<sys/timeb.h>`를 제거하려고 계획합니다. 이와 같은 출시에서, 헤더는 여전히 존재하지만 ftime은 호출하면 컴파일러 경고를 발생합니다. 모든 프로그램은 대신에 gettimeofday 또는 clock_gettime을 사용해야 합니다.

  • gettimeofday 함수는 더 이상 시스템-전반 시간대에 대한 정보를 보고하지 않습니다. 이 4.2-BSD 시대 특성은 세계 시간대의 전체 복잡성을 처리 할 수 없기 때문에, 수년 동안 더 이상 사용되지 않았지만, 지금까지 우리는 최선의-노력을 기초로 지원되었습니다. 32-비트 구조에서 64-비트 time_t를 지원하는 데 필요한 변경은 더 이상 실용적이지 않습니다.

  • settimeofday 함수는 여전히 운영체제가 이를 지원 할 때에 시스템-전반 시간 대역 설정에 사용됩니다. 이는 리눅스 커널이 일부 구조에서 API를 재사용하고, 커널이 유지 관리하는 소프트웨어 시계와, 시스템이 종료될 때 시간을 유지하는 "RTC" 시계 사이의 시스템-전반 시간대와 같은 오프셋을 설명하기 때문입니다.

  • SPARC ISA v7는 더 이상 지원되지 않습니다. v8은 여전히 지원되지만, 선택적은 CAS 명령이 구현될 때만입니다 (예시로, LEON 프로세서는 여전히 지원되지만, SuperSPARC 프로세서는 아닙니다).

  • 만약 지연 바인딩 실패가 dlopen 중에 발생하면, ELF 생성자 실행 중에, 처리는 이제 종료됩니다. 이전에 동적 적재기가 dlerror 통보에서 포착된 지연 바인딩 오류와 함께 dlopen에서 NULL을 반환하였습니다. 일반적으로, 이는 임의의 함수 콜에서 스택을 재설정 하는 것이 불가능하기 때문에 안전하지 않습니다.

  • MIPS 하드웨어-부동 소수점 ABI를 위해, GNU C 라이브러리는 제작시에 최소 커널 버전 4.8 이상을 요구하도록 명시적으로 구성되지 않는 한 실행 할 수 있는 스택이 필요하도록 구성되었습니다. 이는 4.8 이전인 리눅스 커널에서 실행 할 수 없는 스택의 부동-소수점 분기를 실행하여 일부 MIPS 구성을 위한 응용프로그램 충돌이 발생 할 수 있기 때문입니다. 현재 `PT_GNU_STACK`은 MIPS에서 널리 사용되지 않고, GCC의 향후 출시는 기본 값에 의해 `PT_GNU_STACK`과 함께 실행 할 수 없는 스택을 기본으로 활성화하도록 예상되었고 따라서 이전 커널에서 충돌이 발생 할 가능성이 있습니다.

  • 시간 체계를 위한 시스템 콜 wrappers는 이제 가능 할 때에 신규 time64 시스템 콜을 사용 할 수 있습니다. 32-비트 대상에서, 이들 wrapper는 신규 시스템 콜을 우선 호출 할 수 있도록 하고 만약 존재하지 않으면 이전 32-비트 시간 체계 시스템 콜로 되돌아갑니다. 이는 -ENOSYS 반환에 의해 지원되지 않는 시스템 호출을 정상적으로 처리할 수 없는 환경에서 문제가 발생 할 수 있습니다. 이 문제에 의해 Seccomp sandboxes가 영향을 받습니다.

보안과 연관된 변경

  • CVE-2019-19126: ld.so는 `LD_PREFER_MAP_32BIT_EXEC`를 무시하는데 실패함 보안 전환 후에 프로그램 실행하는 도중에 환경 변수, 로컬 공격자가 적재된 라이브러리를 위한 가능 매핑 주소를 제한하고 setuid 프로그램에 대한 ASLR을 우회 할 수 있습니다. Marcin Kościelnicki가 보고했습니다.

glibc-2.31에 대한 상세한 정보를 위해 업스트림 뉴스 문서를 참고하세요; 문서가 계속해서 최신화 되므로 버전 2.31를 찾으려면 상하로 조절 해야 할 필요가 있습니다.

mpfr 4.0.2

페도라 32는 GNU MPFR 라이브러리 버전 4.0.2를 제공합니다. 주목 할만한 변경은 다음을 포함합니다:

  • mpfr은 이제 다중 스레드용 응용프로그램을 위한 공유 캐쉬를 지원하고, 이는 메모리 사용량을 줄여줍니다.

  • 개선된 캐슁: 정밀도가 최소 10% 증가는 너무 많은 재계산을 피하도록 보장해주며, 이는 CPU 사용량을 줄여줍니다.

  • 작은-정밀도의 mpz_t 풀은 메모리 할당 수를 줄여 주고, 이는 CPU 사용량을 감소합니다.

  • 여러 기능은 이제 더 빨라집니다; 예제로 mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_dmpfr_get_d.

  • mpfr_div_ui 기능은 mpfr 3에서 잘못된 반올림 결과를 생성 시킬 수 있습니다; 결정은 mpfr 4에서 수정되었습니다.

더 많은 정보를 위해, 버전 4.0.0, 4.0.1, 그리고 4.0.2용 업스트림 출시 기록을 방문하세요.