GCC 15.1 קופץ ל-C23 ומוסיף שיפורים, אופטימיזציות ועוד ב-C++.

gcc

לאחר שנה של פיתוח אינטנסיבי, הוכרזה יציאת הגרסה החדשה של «GCC 15.1», אשר ממוקמת כגרסה היציבה הראשונה בתוך ענף 15.x החדש של חבילת מהדרים בקוד פתוח פופולרית זו.

מהדורה זו לא רק משיקה רשמית את סדרת GCC 15 החדשה, אלא גם מסמנת את תחילת ההכנות לפיתוח GCC 16, שכן ענף 16.0 פורס במקביל ותניח את היסודות למהדורה הגדולה הבאה, GCC 16.1.

GCC 15.1 תכונות חדשות עיקריות

אחד השינויים הבולטים ביותר בגרסה החדשה הזו הוא ש-GCC 15.1 מאמץ את תקן C23 כברירת מחדל להידור קוד C, באמצעות האפשרות -std=gnu23. עדכון זה מחליף את התקן הקודם ששימש כברירת מחדל, C17 (-std=gnu17), ומציג מספר תכונות חדשות של התקן החדש. ביניהם נמצא ה- הקבוע nullptr, הסוג _BitInt(n), ומילות המפתח bool, true ו-false, מה שעלול לגרום להתנגשויות עם מזהים קיימים בקוד מדור קודם.

תכונה חדשה נוספת ש-GCC 15.1 משלבת היא ה- #embed הנחיה להטמעת נתונים בינאריים, ותכונות כגון לא רצף וניתן לשחזור, המספקות שליטה רבה יותר על סדר הביצוע וקביעת תוצאות עקביות. בנוסף, יושמו אלמנטים של תקן C2Y העתידי, כגון משתנים המוצהרים בתוך תנאי if, טווחי ערכים במשפטי case, סיומות דמיוניות i ו-j, ותמיכה באופרטורים ++ ו- — שהוחלו על מספרים מרוכבים.

שיפורים ב-C++ וב-C++26 העתידי

במקרה של שפת ++C, הגרסה החדשה של GCC 15.1 מיישם תכונות הנידונות עבור תקן C++26, ככל שמוצגות תכונות חדשות כגון האופרטור "friend", השימוש ב-constexpr עם גרסאות של האופרטור החדש, ושיפורים בתחביר עבור קישורים מובנים ותכונות כגון musttail עבור רקורסיה של זנב מובטחת.

התמיכה ב-C++23 הורחבה גם כן עם כללים חדשים לשימוש בייצוא, שיפורים בטיפול באובייקטים זמניים, ויישום ניסיוני של המודולים std ו-std.compat ב-libstdc++. בנוסף, האבטחה מתחזקת לאתחול איחוד וקומפילציית קוד משופרת הודות למערכת גיבוב יעילה יותר של תבניות.

אזהרות ושיפורים חדשים בניתוח סטטי

מערכת ניתוח סטטי קיבל עיצוב מחדש ויזואלי אשר מדגיש בעיות באמצעות סמלים, טיפים למעבר ל-C23, וספריית libgdiagnostics חדשה מה שמאפשר שימוש חוזר בלוגיקה אבחונית בפרויקטים אחרים. כמו כן, הוצגה תמיכה ביצירת דוחות בפורמט SARIF, מה שמקל על שילוב עם כלי ניתוח קוד מודרניים.

ב אזהרות קיימות מתווספות לאזהרות חדשות, כמו -Wanalyzer-undefined-behavior-ptrdiff כדי לזהות חיסורים בין מצביעים שאינם קשורים, –רווח לבן נגרר W ורווח לבן מוביל -W כדי לציין רווחים לבנים מיותרים, ו- –שומר חיטה כדי לזהות שגיאות בהגנות על הכללת כותרות.

אופטימיזציות ותמיכה

בין האופטימיזציות הבולטות, כלול מצב קומפילציה מצטבר עבור LTO (אופטימיזציית זמן קישור), שנועד להאיץ עבודות קומפילציה מחדש כאשר השינויים מינימליים. גַם וקטוריזציה של לולאה משופרת, אפילו במקרים בהם גודל המערכים אינו ידוע בזמן הקומפילציה, ומגביר את מהירות הקומפילציה של קבצים גדולים מאוד.

בצד התמיכה, נוספו הרחבות ARMv64 ל-AArch8, תמיכה במעבדים חדשים כמו Apple M3, Cortex-X925 ו-NVIDIA Grace, ומרחיב את פלטפורמת MinGW. יצירת קוד עבור מעבדי GPU של AMD Radeon מתחזקת עם תמיכה ניסיונית בסדרות GFX9, GFX10.3 ו-GFX11 החדשות. עבור ארכיטקטורת x86, תמיכה ב-AVX10.2 ובהוראות AMX חדשות מופעלת, והתמיכה ב-Xeon Phi Knights הופסקה.

בנוסף, GCC 15.1 מציגה מהדר עבור COBOL ‏(gcobol), עם תמיכה בארכיטקטורות x86-64 ו-AArch64, ויישום מעודכן של שפת D (גרסה 2.111.0). נוספה תמיכה במספרים שלמים לא חתומים ב-Fortran, ואימוץ OpenMP 5.0 עד 6.0 קדמה, כולל שיפורי יכולת פעולה הדדית ושימוש מאוחד בזיכרון במעבדים גרפיים.