GCC 9 ಕಂಪೈಲರ್ ಸೂಟ್‌ನ ಬಿಡುಗಡೆ

ಅಭಿವೃದ್ಧಿಯ ಒಂದು ವರ್ಷದ ನಂತರ ಪ್ರಕಟಿಸಲಾಗಿದೆ ಕಂಪೈಲರ್‌ಗಳ ಉಚಿತ ಸೆಟ್ ಬಿಡುಗಡೆ GCC 9.1, ಹೊಸ GCC 9.x ಶಾಖೆಯಲ್ಲಿ ಮೊದಲ ಪ್ರಮುಖ ಬಿಡುಗಡೆ. ಅನುಗುಣವಾಗಿ ಹೊಸ ಯೋಜನೆ ಬಿಡುಗಡೆ ಸಂಖ್ಯೆಗಳು, ಆವೃತ್ತಿ 9.0 ಅನ್ನು ಅಭಿವೃದ್ಧಿ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಬಳಸಲಾಯಿತು, ಮತ್ತು GCC 9.1 ಬಿಡುಗಡೆಗೆ ಸ್ವಲ್ಪ ಮೊದಲು, GCC 10.0 ಶಾಖೆಯು ಈಗಾಗಲೇ ಕವಲೊಡೆಯಿತು, ಅದರ ಆಧಾರದ ಮೇಲೆ ಮುಂದಿನ ಮಹತ್ವದ ಬಿಡುಗಡೆಯಾದ GCC 10.1 ರಚನೆಯಾಗುತ್ತದೆ.

GCC 9.1 C++17 ಸ್ಟ್ಯಾಂಡರ್ಡ್‌ಗೆ ಬೆಂಬಲವನ್ನು ಸ್ಥಿರಗೊಳಿಸಲು ಗಮನಾರ್ಹವಾಗಿದೆ, ಭವಿಷ್ಯದ C++20 ಮಾನದಂಡದ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಮುಂದುವರಿಯುತ್ತದೆ (C++2a ಸಂಕೇತನಾಮ), D ಭಾಷೆಗೆ ಮುಂಭಾಗದಲ್ಲಿ ಸೇರ್ಪಡೆ, OpenMP 5.0 ಗಾಗಿ ಭಾಗಶಃ ಬೆಂಬಲ , OpenACC 2.5 ಗಾಗಿ ಬಹುತೇಕ ಸಂಪೂರ್ಣ ಬೆಂಬಲ, ಬೈಂಡಿಂಗ್ ಹಂತದಲ್ಲಿ ಇಂಟರ್‌ಪ್ರೊಸೆಡರಲ್ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳು ಮತ್ತು ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳ ಸ್ಕೇಲೆಬಿಲಿಟಿಯನ್ನು ಹೆಚ್ಚಿಸಿ, ರೋಗನಿರ್ಣಯದ ಪರಿಕರಗಳ ವಿಸ್ತರಣೆ ಮತ್ತು ಹೊಸ ಎಚ್ಚರಿಕೆಗಳ ಸೇರ್ಪಡೆ, OpenRISC, C-SKY V2 ಮತ್ತು AMD GCN GPU ಗಾಗಿ ಬ್ಯಾಕೆಂಡ್‌ಗಳು.

ಮುಖ್ಯ ಬದಲಾವಣೆಗಳನ್ನು:

  • D ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ. GCC ಕಂಪೈಲರ್‌ನೊಂದಿಗೆ ಮುಂಭಾಗವನ್ನು ಒಳಗೊಂಡಿದೆ ಜಿಡಿಸಿ (Gnu D Compiler) ಮತ್ತು ರನ್‌ಟೈಮ್ ಲೈಬ್ರರಿಗಳು (libphobos), ಇದು D ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯಲ್ಲಿ ಪ್ರೋಗ್ರಾಮ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಮಾಣಿತ GCC ಅನ್ನು ಬಳಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. GCC ನಲ್ಲಿ D ಭಾಷಾ ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಪ್ರಕ್ರಿಯೆ ಶುರುವಾಗಿದೆ ಮತ್ತೆ 2011 ರಲ್ಲಿ, ಆದರೆ ಎಳೆದಾಡಿದರು GCC ಅವಶ್ಯಕತೆಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ಕೋಡ್ ಅನ್ನು ತರುವ ಅಗತ್ಯತೆ ಮತ್ತು ಡಿ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಯನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತಿರುವ ಡಿಜಿಟಲ್ ಮಾರ್ಸ್‌ಗೆ ಬೌದ್ಧಿಕ ಆಸ್ತಿ ಹಕ್ಕುಗಳ ವರ್ಗಾವಣೆಯ ಸಮಸ್ಯೆಗಳ ಕಾರಣದಿಂದಾಗಿ;
  • ಕೋಡ್ ಜನರೇಟರ್‌ಗೆ ಸುಧಾರಣೆಗಳನ್ನು ಮಾಡಲಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ಸಂದರ್ಭಗಳಿಗೆ ಅನುಗುಣವಾಗಿ ಸ್ವಿಚ್ ಅಭಿವ್ಯಕ್ತಿಗಳನ್ನು (ಜಂಪ್ ಟೇಬಲ್, ಬಿಟ್ ಟೆಸ್ಟ್, ಡಿಸಿಷನ್ ಟ್ರೀ) ವಿಸ್ತರಿಸಲು ವಿಭಿನ್ನ ತಂತ್ರಗಳ ಬಳಕೆಯನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ. "-ftree-switch-conversion" ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ವಿಚ್ ಅಭಿವ್ಯಕ್ತಿಯನ್ನು ಒಳಗೊಂಡಿರುವ ರೇಖಾತ್ಮಕ ಕಾರ್ಯಗಳನ್ನು ಪರಿವರ್ತಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ (ಉದಾಹರಣೆಗೆ, "ಕೇಸ್ 2: ಹೇಗೆ = 205; ಬ್ರೇಕ್; ಕೇಸ್ 3: ಹೇಗೆ = 305; ಬ್ರೇಕ್ ನಂತಹ ಷರತ್ತುಗಳ ಒಂದು ಸೆಟ್ ;” ಅನ್ನು "100 * ಹೇಗೆ + 5" ಗೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತದೆ;
  • ಸುಧಾರಿತ ಇಂಟರ್ಪ್ರೊಸಿಡರಲ್ ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳು. ಇನ್‌ಲೈನ್ ನಿಯೋಜನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಆಧುನಿಕ C++ ಕೋಡ್‌ಬೇಸ್‌ಗಳಿಗೆ ಅಳವಡಿಸಲಾಗಿದೆ ಮತ್ತು ಹೊಸ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳೊಂದಿಗೆ ವಿಸ್ತರಿಸಲಾಗಿದೆ max-inline-insns-small, max-inline-insns-size, uninlined-function-insns, uninlined-function-time, uninlined-thunk-insns ಮತ್ತು ಅನ್‌ಲೈನ್ಡ್ -ಥಂಕ್-ಟೈಮ್. ಶೀತ/ಹಾಟ್ ಕೋಡ್ ಬೇರ್ಪಡಿಕೆಯ ಸುಧಾರಿತ ನಿಖರತೆ ಮತ್ತು ಆಕ್ರಮಣಶೀಲತೆ. ಬಹಳ ದೊಡ್ಡದಕ್ಕಾಗಿ ಸುಧಾರಿತ ಸ್ಕೇಲೆಬಿಲಿಟಿ ಅನುವಾದ ಘಟಕಗಳು (ಉದಾಹರಣೆಗೆ, ದೊಡ್ಡ ಕಾರ್ಯಕ್ರಮಗಳಿಗೆ ಲಿಂಕ್ ಮಾಡುವ ಹಂತದಲ್ಲಿ ಆಪ್ಟಿಮೈಸೇಶನ್ ಅನ್ನು ಅನ್ವಯಿಸುವಾಗ);
  • ಕೋಡ್ ಪ್ರೊಫೈಲಿಂಗ್ (PGO - ಪ್ರೊಫೈಲ್-ಗೈಡೆಡ್ ಆಪ್ಟಿಮೈಸೇಶನ್) ಫಲಿತಾಂಶಗಳ ಆಧಾರದ ಮೇಲೆ ಆಪ್ಟಿಮೈಸೇಶನ್ ಕಾರ್ಯವಿಧಾನವನ್ನು ಸುಧಾರಿಸಲಾಗಿದೆ, ಇದು ಕೋಡ್ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಗುಣಲಕ್ಷಣಗಳ ವಿಶ್ಲೇಷಣೆಯ ಆಧಾರದ ಮೇಲೆ ಹೆಚ್ಚು ಸೂಕ್ತವಾದ ಕೋಡ್ ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಸಾರಾಂಶ ಆಯ್ಕೆ "-fprofile-ಬಳಕೆ" ಈಗ ಆಪ್ಟಿಮೈಸೇಶನ್ ಮೋಡ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ಮತ್ತು "-ftree-loop-distribution". ಫೈಲ್‌ಗಳಲ್ಲಿ ಕೌಂಟರ್‌ಗಳೊಂದಿಗೆ ಹಿಸ್ಟೋಗ್ರಾಮ್‌ಗಳ ಸೇರ್ಪಡೆಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ, ಇದು ಪ್ರೊಫೈಲ್‌ಗಳೊಂದಿಗೆ ಫೈಲ್‌ಗಳ ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ (ಲಿಂಕಿಂಗ್ ಸಮಯದಲ್ಲಿ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ ಹಿಸ್ಟೋಗ್ರಾಮ್‌ಗಳನ್ನು ಈಗ ಫ್ಲೈನಲ್ಲಿ ರಚಿಸಲಾಗುತ್ತದೆ);
  • ವರ್ಧಿತ ಲಿಂಕ್ ಮಾಡುವ ಸಮಯ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳು (LTO). ಫಲಿತಾಂಶವನ್ನು ಉತ್ಪಾದಿಸುವ ಮೊದಲು ವಿಧಗಳ ಸರಳೀಕರಣವನ್ನು ಒದಗಿಸಲಾಗಿದೆ, ಇದು LTO ಆಬ್ಜೆಕ್ಟ್ ಫೈಲ್‌ಗಳ ಗಾತ್ರವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡಲು, ಬೈಂಡಿಂಗ್ ಹಂತದಲ್ಲಿ ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಕಾರ್ಯಾಚರಣೆಗಳ ಸಮಾನಾಂತರತೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಾಧ್ಯವಾಗಿಸಿತು. ವಿಭಾಗಗಳ ಸಂಖ್ಯೆಯನ್ನು (-param lto-partitions) 32 ರಿಂದ 128 ಕ್ಕೆ ಹೆಚ್ಚಿಸಲಾಗಿದೆ, ಇದು ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ CPU ಥ್ರೆಡ್‌ಗಳನ್ನು ಹೊಂದಿರುವ ಸಿಸ್ಟಮ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ. ಆಪ್ಟಿಮೈಜರ್ ಪ್ರಕ್ರಿಯೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಪ್ಯಾರಾಮೀಟರ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ
    "-ಪಾರಂ ಎಲ್ಟು-ಮ್ಯಾಕ್ಸ್-ಸ್ಟ್ರೀಮಿಂಗ್-ಪ್ಯಾರಲಲಿಸಮ್";

    ಪರಿಣಾಮವಾಗಿ, GCC 8.3 ಗೆ ಹೋಲಿಸಿದರೆ, GCC 9 ರಲ್ಲಿ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳನ್ನು ಪರಿಚಯಿಸಲಾಗಿದೆ ಅನುಮತಿಸಲಾಗಿದೆ Firefox 5 ಮತ್ತು LibreOffice 66 ರ ಸಂಕಲನ ಸಮಯವನ್ನು ಸುಮಾರು 6.2.3% ರಷ್ಟು ಕಡಿಮೆ ಮಾಡಿ. ಆಬ್ಜೆಕ್ಟ್ ಫೈಲ್‌ಗಳ ಗಾತ್ರವು 7% ರಷ್ಟು ಕಡಿಮೆಯಾಗಿದೆ. 8-ಕೋರ್ CPU ನಲ್ಲಿ ಬೈಂಡಿಂಗ್ ಸಮಯವು 11% ರಷ್ಟು ಕಡಿಮೆಯಾಗಿದೆ. ಲಿಂಕ್ ಮಾಡುವ ಹಂತದ ಅನುಕ್ರಮ ಆಪ್ಟಿಮೈಸೇಶನ್ ಹಂತವು ಈಗ 28% ವೇಗವಾಗಿದೆ ಮತ್ತು 20% ಕಡಿಮೆ ಮೆಮೊರಿಯನ್ನು ಬಳಸುತ್ತದೆ. LTO ಯ ಸಮಾನಾಂತರ ಹಂತದ ಪ್ರತಿ ಪ್ರೊಸೆಸರ್ನ ಮೆಮೊರಿ ಬಳಕೆ 30% ರಷ್ಟು ಕಡಿಮೆಯಾಗಿದೆ;

  • ಹೆಚ್ಚಿನ ಸಮಾನಾಂತರ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ವಿವರಣೆಯನ್ನು C, C++ ಮತ್ತು Fortran ಭಾಷೆಗಳಿಗೆ ಅಳವಡಿಸಲಾಗಿದೆ OpenACC 2.5, ಇದು GPU ಗಳು ಮತ್ತು NVIDIA PTX ನಂತಹ ವಿಶೇಷ ಪ್ರೊಸೆಸರ್‌ಗಳಲ್ಲಿ ಆಫ್‌ಲೋಡ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಗಾಗಿ ಪರಿಕರಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ;
  • C ಮತ್ತು C++ ಗಾಗಿ ಮಾನದಂಡಕ್ಕೆ ಭಾಗಶಃ ಬೆಂಬಲವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ ಓಪನ್ ಎಂಪಿ 5.0 (ಓಪನ್ ಮಲ್ಟಿ-ಪ್ರೊಸೆಸಿಂಗ್), ಇದು API ಮತ್ತು C, C++ ಮತ್ತು Fortran ಭಾಷೆಗಳಿಗೆ ಸಮಾನಾಂತರ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ವಿಧಾನಗಳನ್ನು ಅನ್ವಯಿಸುವ ವಿಧಾನಗಳನ್ನು ಮಲ್ಟಿ-ಕೋರ್ ಮತ್ತು ಹೈಬ್ರಿಡ್ (CPU+GPU/DSP) ಸಿಸ್ಟಮ್‌ಗಳಲ್ಲಿ ಹಂಚಿಕೆಯ ಮೆಮೊರಿ ಮತ್ತು ವೆಕ್ಟರೈಸೇಶನ್ ಘಟಕಗಳೊಂದಿಗೆ (SIMD) ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ;
  • ಸಿ ಭಾಷೆಗೆ ಹೊಸ ಎಚ್ಚರಿಕೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ: "-ವಡ್ರೆಸ್-ಆಫ್-ಪ್ಯಾಕ್ಡ್-ಸದಸ್ಯ" (ರಚನೆ ಅಥವಾ ಒಕ್ಕೂಟದ ಪ್ಯಾಕ್ ಮಾಡಿದ ಸದಸ್ಯರಿಗೆ ಜೋಡಿಸದ ಪಾಯಿಂಟರ್ ಮೌಲ್ಯ) ಮತ್ತು
    «-ವ್ಯಾಪಕ-ಮೌಲ್ಯ" (ಸಂಪೂರ್ಣ ಮೌಲ್ಯವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಕಾರ್ಯಗಳನ್ನು ಪ್ರವೇಶಿಸುವಾಗ, ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ವಾದಕ್ಕೆ ಹೆಚ್ಚು ಸೂಕ್ತವಾದ ಕಾರ್ಯವಿದ್ದರೆ, ಉದಾಹರಣೆಗೆ, abs (3.14) ಬದಲಿಗೆ fabs (3.14) ಅನ್ನು ಬಳಸಬೇಕು. C++ ಗೆ ಹೊಸ ಎಚ್ಚರಿಕೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-wredundant-move", "-Wpessimizing-move" ಮತ್ತು "-Wclass-conversion". ಹಿಂದೆ ಲಭ್ಯವಿರುವ ಹಲವು ಎಚ್ಚರಿಕೆಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ;

  • ಭವಿಷ್ಯದ C ಭಾಷಾ ಮಾನದಂಡದ ಭಾಗಕ್ಕೆ ಪ್ರಾಯೋಗಿಕ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, C2x ಸಂಕೇತನಾಮ. C2x ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, "-std=c2x" ಮತ್ತು "-std=gnu2x" ಆಯ್ಕೆಗಳನ್ನು ಬಳಸಿ (GNU ವಿಸ್ತರಣೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು). ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಇನ್ನೂ ಅಭಿವೃದ್ಧಿಯ ಆರಂಭಿಕ ಹಂತದಲ್ಲಿದೆ, ಆದ್ದರಿಂದ, ಅದರ ಸಾಮರ್ಥ್ಯಗಳಲ್ಲಿ, ಒಂದು ವಾದದೊಂದಿಗೆ _Static_assert ಅಭಿವ್ಯಕ್ತಿ ಮಾತ್ರ ಬೆಂಬಲಿತವಾಗಿದೆ (ಎರಡು ವಾದಗಳೊಂದಿಗೆ _Static_assert C11 ನಲ್ಲಿ ಪ್ರಮಾಣೀಕರಿಸಲ್ಪಟ್ಟಿದೆ);
  • C++17 ಸ್ಟ್ಯಾಂಡರ್ಡ್‌ಗೆ ಬೆಂಬಲವನ್ನು ಸ್ಥಿರವೆಂದು ಘೋಷಿಸಲಾಗಿದೆ. ಮುಂಭಾಗದಲ್ಲಿ, C++17 ನ ಭಾಷಾ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಅಳವಡಿಸಲಾಗಿದೆ, ಮತ್ತು libstdc++ ನಲ್ಲಿ, ಸ್ಟ್ಯಾಂಡರ್ಡ್‌ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಲೈಬ್ರರಿ ಕಾರ್ಯಗಳು ಪೂರ್ಣ ಅನುಷ್ಠಾನಕ್ಕೆ ಹತ್ತಿರದಲ್ಲಿವೆ;
  • ಮುಂದುವರೆಯಿತು ಅನುಷ್ಠಾನ ಭವಿಷ್ಯದ C++2a ಮಾನದಂಡದ ಅಂಶಗಳು. ಉದಾಹರಣೆಗೆ, ಪ್ರಾರಂಭದ ಸಮಯದಲ್ಲಿ ಶ್ರೇಣಿಗಳನ್ನು ಸೇರಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಲ್ಯಾಂಬ್ಡಾ ಅಭಿವ್ಯಕ್ತಿಗಳಿಗೆ ವಿಸ್ತರಣೆಗಳನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ, ಡೇಟಾ ರಚನೆಗಳ ಖಾಲಿ ಸದಸ್ಯರಿಗೆ ಬೆಂಬಲ ಮತ್ತು ಸಂಭವನೀಯ/ಅಸಂಭವವಾದ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಷರತ್ತುಬದ್ಧ ಅಭಿವ್ಯಕ್ತಿಗಳಲ್ಲಿ ವರ್ಚುವಲ್ ಕಾರ್ಯಗಳನ್ನು ಕರೆಯುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಒದಗಿಸಲಾಗಿದೆ. , ಇತ್ಯಾದಿ
    C++2a ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, "-std=c++2a" ಮತ್ತು "-std=gnu++2a" ಆಯ್ಕೆಗಳನ್ನು ಬಳಸಿ. C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ಮತ್ತು std::type_identity traits::std pointerp:sd , std::bind_front,
    std::visit, std::is_constant_evaluated ಮತ್ತು std::assume_aligned, char8_t ಪ್ರಕಾರಕ್ಕೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಸ್ಟ್ರಿಂಗ್‌ಗಳ ಪೂರ್ವಪ್ರತ್ಯಯ ಮತ್ತು ಪ್ರತ್ಯಯವನ್ನು ಪರಿಶೀಲಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ (starts_with, ends_with);

  • ಹೊಸ ARM ಪ್ರೊಸೆಸರ್‌ಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ
    ಕಾರ್ಟೆಕ್ಸ್-A76, ಕಾರ್ಟೆಕ್ಸ್-A55, ಕಾರ್ಟೆಕ್ಸ್-A76 DynamIQ big.LITTLE ಮತ್ತು ನಿಯೋವರ್ಸ್ N1. ಸಂಕೀರ್ಣ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು Armv8.3-A ನಲ್ಲಿ ಪರಿಚಯಿಸಲಾದ ಸೂಚನೆಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಹುಸಿ-ಯಾದೃಚ್ಛಿಕ ಸಂಖ್ಯೆ ಉತ್ಪಾದನೆ (rng) ಮತ್ತು ಮೆಮೊರಿ ಟ್ಯಾಗಿಂಗ್ (memtag), ಹಾಗೆಯೇ ಊಹಾತ್ಮಕ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆ ಮತ್ತು ಶಾಖೆಯ ಭವಿಷ್ಯ ಘಟಕದ ಕಾರ್ಯಾಚರಣೆಗೆ ಸಂಬಂಧಿಸಿದ ದಾಳಿಗಳನ್ನು ತಡೆಯುವ ಸೂಚನೆಗಳು . AArch64 ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಾಗಿ, ಒಂದು ರಕ್ಷಣೆ ಮೋಡ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ ಸ್ಟಾಕ್ ಮತ್ತು ರಾಶಿಯ ಛೇದಕಗಳು ("-fstack-clash-protection"). Armv8.5-A ಆರ್ಕಿಟೆಕ್ಚರ್‌ನ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸಲು, “-march=armv8.5-a” ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ

  • ಇದು GCN ಮೈಕ್ರೊ ಆರ್ಕಿಟೆಕ್ಚರ್‌ನ ಆಧಾರದ ಮೇಲೆ AMD GPU ಗಳಿಗಾಗಿ ಕೋಡ್ ಅನ್ನು ಉತ್ಪಾದಿಸುವ ಬ್ಯಾಕೆಂಡ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಅನುಷ್ಠಾನವು ಪ್ರಸ್ತುತ ಏಕ-ಥ್ರೆಡ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಸಂಕಲನಕ್ಕೆ ಸೀಮಿತವಾಗಿದೆ (ಓಪನ್‌ಎಂಪಿ ಮತ್ತು ಓಪನ್‌ಎಸಿಸಿ ಮೂಲಕ ಬಹು-ಥ್ರೆಡ್ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಕೈಗೊಳ್ಳಲು ಬೆಂಬಲವನ್ನು ನಂತರ ನೀಡಲಾಗುವುದು) ಮತ್ತು ಜಿಪಿಯು ಫಿಜಿ ಮತ್ತು ವೆಗಾ 10 ಗೆ ಬೆಂಬಲ;
  • ಪ್ರೊಸೆಸರ್‌ಗಳಿಗೆ ಹೊಸ ಬ್ಯಾಕೆಂಡ್ ಸೇರಿಸಲಾಗಿದೆ OpenRISC;
  • ಪ್ರೊಸೆಸರ್‌ಗಳಿಗೆ ಬ್ಯಾಕೆಂಡ್ ಸೇರಿಸಲಾಗಿದೆ C-SKY V2, ವಿವಿಧ ಗ್ರಾಹಕ ಸಾಧನಗಳಿಗಾಗಿ ಅದೇ ಹೆಸರಿನ ಚೈನೀಸ್ ಕಂಪನಿಯಿಂದ ತಯಾರಿಸಲ್ಪಟ್ಟಿದೆ;
  • ಬೈಟ್ ಮೌಲ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಎಲ್ಲಾ ಆಜ್ಞಾ ಸಾಲಿನ ಆಯ್ಕೆಗಳು kb, KiB, MB, MiB, GB ಮತ್ತು GiB ಪ್ರತ್ಯಯಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತವೆ;
  • ಅಳವಡಿಸಲಾಗಿದೆ “-flive-patching=[inline-only-static|inline-clone]” ಆಯ್ಕೆಯು ಇಂಟರ್‌ಪ್ರೊಸೆಡ್ಯುರಲ್ ಬಳಕೆಯ ಮೇಲೆ ಬಹು-ಹಂತದ ನಿಯಂತ್ರಣದಿಂದಾಗಿ ಲೈವ್-ಪ್ಯಾಚಿಂಗ್ ಸಿಸ್ಟಮ್‌ಗಳಿಗೆ ಸುರಕ್ಷಿತ ಸಂಕಲನವನ್ನು ಸಾಧಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ (ಐಪಿಎ) ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳು;
  • ಬ್ಯಾಷ್ ಅನ್ನು ಬಳಸುವಾಗ ಆಯ್ಕೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವಿಕೆಯ ಸೂಕ್ಷ್ಮ-ಧಾನ್ಯದ ನಿಯಂತ್ರಣಕ್ಕಾಗಿ "--ಪೂರ್ಣಗೊಳಿಸುವಿಕೆ" ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ;
  • ರೋಗನಿರ್ಣಯದ ಪರಿಕರಗಳು ಲೈನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೂಚಿಸುವ ಮೂಲ ಪಠ್ಯದ ಉದ್ಧರಣಗಳ ಪ್ರದರ್ಶನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ ಮತ್ತು ಒಪೆರಾಂಡ್ ಪ್ರಕಾರಗಳಂತಹ ಸಂಬಂಧಿತ ಮಾಹಿತಿಯನ್ನು ದೃಷ್ಟಿಗೋಚರವಾಗಿ ಗುರುತಿಸುತ್ತದೆ. ಸಾಲು ಸಂಖ್ಯೆಗಳು ಮತ್ತು ಲೇಬಲ್‌ಗಳ ಪ್ರದರ್ಶನವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು, "-fno-ಡಯಾಗ್ನೋಸ್ಟಿಕ್ಸ್-ಶೋ-ಲೈನ್-ಸಂಖ್ಯೆಗಳು" ಮತ್ತು "-fno-ಡಯಾಗ್ನೋಸ್ಟಿಕ್ಸ್-ಶೋ-ಲೇಬಲ್‌ಗಳು" ಆಯ್ಕೆಗಳನ್ನು ಒದಗಿಸಲಾಗಿದೆ;

    GCC 9 ಕಂಪೈಲರ್ ಸೂಟ್‌ನ ಬಿಡುಗಡೆ

  • ವಿಸ್ತರಿಸಲಾಗಿದೆ ಸಿ ++ ಕೋಡ್‌ನಲ್ಲಿ ದೋಷಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಉಪಕರಣಗಳು, ದೋಷಗಳ ಕಾರಣಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿಯ ಸುಧಾರಿತ ಓದುವಿಕೆ ಮತ್ತು ಸಮಸ್ಯಾತ್ಮಕ ನಿಯತಾಂಕಗಳನ್ನು ಹೈಲೈಟ್ ಮಾಡುವುದು;

    GCC 9 ಕಂಪೈಲರ್ ಸೂಟ್‌ನ ಬಿಡುಗಡೆ

  • "-fdiagnostics-format=json" ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ಇದು ಯಂತ್ರ-ಓದಬಲ್ಲ ಸ್ವರೂಪದಲ್ಲಿ (JSON) ರೋಗನಿರ್ಣಯದ ಔಟ್‌ಪುಟ್ ಅನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತದೆ;
  • ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬೇಕಾದ ಮೂಲ ಫೈಲ್‌ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲು "-fprofile-filter-files" ಮತ್ತು "-fprofile-exclude-files" ಹೊಸ ಪ್ರೊಫೈಲಿಂಗ್ ಆಯ್ಕೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ;
  • ಅಡ್ರೆಸ್ ಸ್ಯಾನಿಟೈಜರ್ ಸ್ವಯಂಚಾಲಿತ ವೇರಿಯೇಬಲ್‌ಗಳಿಗಾಗಿ ಹೆಚ್ಚು ಕಾಂಪ್ಯಾಕ್ಟ್ ಪರಿಶೀಲನಾ ಕೋಡ್‌ನ ಉತ್ಪಾದನೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇದು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿರುವ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಫೈಲ್‌ನ ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ;
  • ರಲ್ಲಿ ಸುಧಾರಿತ ಔಟ್ಪುಟ್ "-fopt-ಮಾಹಿತಿ» (ಸೇರಿಸಿದ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳ ಬಗ್ಗೆ ವಿವರವಾದ ಮಾಹಿತಿ). ಹಿಂದೆ ಲಭ್ಯವಿರುವ ಪೂರ್ವಪ್ರತ್ಯಯ "ಟಿಪ್ಪಣಿ" ಜೊತೆಗೆ "ಆಪ್ಟಿಮೈಸ್ಡ್" ಮತ್ತು "ಮಿಸ್ಡ್" ಹೊಸ ಪೂರ್ವಪ್ರತ್ಯಯಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಇನ್‌ಲೈನ್-ಅನಾವರಣ ಮತ್ತು ಚಕ್ರಗಳ ವೆಕ್ಟರೈಸೇಶನ್‌ನಲ್ಲಿ ನಿರ್ಧಾರ ತೆಗೆದುಕೊಳ್ಳುವ ಬಗ್ಗೆ ಮಾಹಿತಿಯ ಔಟ್‌ಪುಟ್ ಸೇರಿಸಲಾಗಿದೆ;
  • "-fsave-optimization-record" ಆಯ್ಕೆಯನ್ನು ಸೇರಿಸಲಾಗಿದೆ, ನಿರ್ದಿಷ್ಟಪಡಿಸಿದಾಗ, GCC ಕೆಲವು ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳ ಬಳಕೆಯ ನಿರ್ಧಾರಗಳ ವಿವರಣೆಯೊಂದಿಗೆ SRCFILE.opt-record.json.gz ಫೈಲ್ ಅನ್ನು ಉಳಿಸುತ್ತದೆ. ಹೊಸ ಆಯ್ಕೆಯು ಹೆಚ್ಚುವರಿ ಮೆಟಾಡೇಟಾವನ್ನು ಸೇರಿಸುವ ಮೂಲಕ "-fopt-info" ಮೋಡ್‌ನಿಂದ ಭಿನ್ನವಾಗಿದೆ, ಉದಾಹರಣೆಗೆ ಪ್ರೊಫೈಲ್ ಮತ್ತು ಇನ್‌ಲೈನ್ ಸರಪಳಿಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿ;
  • ಸ್ಟಾಕ್ ಜೋಡಣೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು "-fipa-stack-alignment" ಮತ್ತು "-fipa-reference-addressable" ಆಯ್ಕೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ ಮತ್ತು ಇಂಟರ್ಪ್ರೊಸಿಡರಲ್ ಆಪ್ಟಿಮೈಸೇಶನ್‌ಗಳ ಸಮಯದಲ್ಲಿ ಸ್ಥಿರ ವೇರಿಯಬಲ್‌ಗಳಿಗಾಗಿ ವಿಳಾಸ ವಿಧಾನಗಳ ಬಳಕೆ (ಬರೆಯಲು-ಮಾತ್ರ ಅಥವಾ ಓದಲು-ನಿಖರವಾಗಿದೆ);
  • ಗುಣಲಕ್ಷಣ ಬೈಂಡಿಂಗ್ ಮತ್ತು ಶಾಖೆಯ ಭವಿಷ್ಯ ಮತ್ತು ಊಹಾತ್ಮಕ ಸೂಚನೆಯ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಗೆ ಸಂಬಂಧಿಸಿದ ನಡವಳಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಹೊಸ ಅಂತರ್ನಿರ್ಮಿತ ಕಾರ್ಯಗಳನ್ನು ಪರಿಚಯಿಸಲಾಗಿದೆ: "__ಬಿಲ್ಟಿನ್_ಗುಣಲಕ್ಷಣವನ್ನು ಹೊಂದಿದೆ«,«ಸಂಭವನೀಯತೆಯೊಂದಿಗೆ_ನಿರ್ಮಾಣ_ನಿರೀಕ್ಷೆ" ಮತ್ತು "__builtin_speculation_safe_value". ಕಾರ್ಯಗಳು, ವೇರಿಯಬಲ್‌ಗಳು ಮತ್ತು ಪ್ರಕಾರಗಳಿಗೆ ಹೊಸ ಗುಣಲಕ್ಷಣವನ್ನು ಸೇರಿಸಲಾಗಿದೆ ಪ್ರತಿಯನ್ನು;
  • ಫೋರ್ಟ್ರಾನ್ ಭಾಷೆಗೆ ಅಸಮಕಾಲಿಕ ಇನ್‌ಪುಟ್/ಔಟ್‌ಪುಟ್‌ಗೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ;
  • Solaris 10 (*-*-solaris2.10) ಮತ್ತು ಸೆಲ್/BE (ಸೆಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಎಂಜಿನ್ SPU) ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ಅಸಮ್ಮತಿಸಲಾಗಿದೆ ಮತ್ತು ಮುಂದಿನ ಪ್ರಮುಖ ಬಿಡುಗಡೆಯಲ್ಲಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. Armv2, Armv3, Armv5 ಮತ್ತು Armv5E ಆರ್ಕಿಟೆಕ್ಚರ್‌ಗಳಿಗೆ ಬೆಂಬಲವನ್ನು ನಿಲ್ಲಿಸಲಾಗಿದೆ. Intel MPX (ಮೆಮೊರಿ ಪ್ರೊಟೆಕ್ಷನ್ ವಿಸ್ತರಣೆಗಳು) ಗಾಗಿ ಬೆಂಬಲವನ್ನು ನಿಲ್ಲಿಸಲಾಗಿದೆ.

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ