מאז הקמתה, C++ הייתה הבחירה העיקרית לבניית יישומים עתירי ביצועים. אבל השפה עדיין כוללת כמה פרקטיקות מיושנות שנגרמו מ"עיצובה על ידי ועדה".
ב-19 ביולי 2022, במהלך ועידת CPP North C++ בטורונטו, מהנדס גוגל צ'נדלר קארות' הציג את Carbon.
גלה מה זה פחמן וכיצד הוא מתכוון להצליח ב-C++.
מה זה פחמן?
מהנדסי גוגל פיתחו את פַּחמָן שפת תכנות כדי לטפל בחסרונות של C++.
רבים קיימים שפות כמו גולנג ו-Rust כבר קיימים שמשקפים את הביצועים של C++ ללא החסרונות שלו. לרוע המזל, שפות אלו מציגות מחסומים משמעותיים להגירה של בסיסי קוד C++ קיימים.
פחמן שואף להיות מה זה TypeScript ל-JavaScript, וקוטלין הוא לג'אווה. זה לא תחליף, אלא שפה יורשת שתוכננה סביב יכולת פעולה הדדית עם C++. הוא מכוון לאימוץ והעברה בקנה מידה גדול עבור בסיסי קוד ומפתחים קיימים.
תכונות עיקריות של פחמן
חלק מתכונות המפתח של Carbon כוללות יכולת פעולה הדדית של C++, גנריות מודרניות ובטיחות זיכרון.
יכולת פעולה הדדית עם C++
Carbon שואפת לספק עקומת למידה עדינה למפתחי C++, עם סט סטנדרטי ועקבי של בניית שפה.
לדוגמה, קח את הקוד הזה C++:
// C++:
#לִכלוֹל
#לִכלוֹל
#לִכלוֹל
#לִכלוֹלstructמעגל {
לָצוּף ר;
};בָּטֵלPrintTotalArea(סטד::לְהַקִיף
מעגלים) {
לָצוּף אזור = 0;ל (const Circle&c: מעגלים) {
אזור += M_PI * c.r * c.r;
}סטד::cout << "שטח כולל: " << אזור << endl;
}אוטומטירָאשִׁי(int argc, לְהַשְׁחִיר** argv) ->; int {
סטד::וֶקטוֹרמעגלים = {{1.0}, {2.0}};
// בונה באופן מרומז `span` מ`וקטור`.
PrintTotalArea (מעגלים);
לַחֲזוֹר0;
}
בתרגום לפחמן, זה הופך ל:
// פחמן:
חֲבִילָה גיאומטריה API;
יְבוּאמתמטיקה;מעמדמעגל{
var r: f32;
}fn PrintTotalArea(מעגלים: פרוסה (מעגל)) {
var שטח: f32 = 0;עבור (ג: עיגול במעגלים) {
אזור += מתמטיקה.Pi * c.r * c.r;
}הדפס("שטח כולל: {0}", אזור);
}fn רָאשִׁי() ->; i32 {
// מערך בגודל דינמי, כמו `std:: vector`.
var מעגלים: מַעֲרָך(מעגל) = ({.r = 1.0}, {.r = 2.0});
// בונה באופן מרומז `Slice` מתוך `Array`.
PrintTotalArea (מעגלים);
לַחֲזוֹר0;
}
אתה יכול גם להעביר ספריית C++ יחידה ל-Carbon בתוך יישום או להוסיף קוד Carbon חדש על קוד C++ הקיים. לדוגמה:
// קוד C++ בשימוש גם ב-Carbon וגם ב-C++:
structמעגל {
לָצוּף ר;
};// פחמן חושף פונקציה עבור C++:
חבילת API של גיאומטריה;
יְבוּא ספריית Cpp "מעגל.h";
יְבוּא מתמטיקה;fn PrintTotalArea(מעגלים: פרוסה (Cpp. מעגל)){
אזור var: f32 = 0;ל (ג: Cpp. מעגל במעגלים) {
אזור += מתמטיקה. Pi * c.r * c.r;
}Print("שטח כולל: {0}", אזור);
}// C++ קורא לפחמן:
#לִכלוֹל
#לִכלוֹל "מעגל.ח"
#לִכלוֹל "geometry.carbon.h"אוטומטירָאשִׁי(int argc, לְהַשְׁחִיר** argv) ->; int {
סטד::וֶקטוֹרמעגלים = {{1.0}, {2.0}};
// `Slice` של Carbon תומך בבנייה מרומזת מ`std:: vector`,
// בדומה ל-`std:: span`.
גיאומטריה:: PrintTotalArea (מעגלים);
לַחֲזוֹר0;
}
מערכת גנרית מודרנית
Carbon מספקת מערכת גנרית מודרנית עם הגדרות מסומנות. אבל הוא עדיין תומך בתבניות הצטרפות עבור יכולת פעולה הדדית חלקה של C++.
מערכת גנרית זו מספקת הרבה יתרונות לתבניות C++:
- בדיקת סוגים להגדרות כלליות. זה מונע את עלות זמן ההידור של בדיקה מחדש של הגדרות עבור כל מופע.
- ממשקים חזקים ומבדקים. אלה מפחיתים תלות מקרית בפרטי יישום ויוצרים חוזה מפורש יותר.
בטיחות זיכרון
Carbon מבקש לטפל בבטיחות הזיכרון, בעיה מרכזית שמטרידה את C++, על ידי:
- מעקב טוב יותר אחר מצבים לא מאותחלים, הגברת האכיפה של האתחול והקשחה מפני באגי אתחול.
- עיצוב ממשקי API וניבים בסיסיים כדי לתמוך בבדיקות גבולות דינמיות ב-debug ו-builds מוקשחים.
- בעל מצב בנייה ברירת מחדל של ניפוי באגים שהוא מקיף יותר ממצבי הבנייה הקיימים של C++.
תחילת העבודה עם פחמן
אתה יכול לחקור את Carbon עכשיו על ידי בדיקת בסיס הקוד ושימוש ב-Carbon Explorer:
# התקן bazelisk באמצעות Homebrew.
$ brew install bazelisk# התקן את Clang/LLVM באמצעות Homebrew.
# מהדורות רבות של Clang/LLVM אינן בנויות עם אפשרויות שאנו מסתמכים עליהן.
$ brew להתקין llvm
$ יְצוּא PATH="$(brew --prefix llvm)/bin:${PATH}"# הורד את הקוד של Carbon.
$ git שיבוט https://github.com/carbon-language/carbon-lang
$ CD פחמן-לנג
# בנה והפעל את הסייר.
$ bazel run //explorer -- ./explorer/testdata/הדפס/format_only.carbon
מפת הדרכים של קרבון חושפת חשיבה ארוכת טווח
על פי מפת הדרכים של Carbon, גוגל תהפוך את הניסוי לפומבי עם שחרור גרסת הליבה (0.1) עד סוף 2022. הם מתכננים לעקוב אחר זה עם גרסת 0.2 בשנת 2023 ושחרור 1.0 מלא בשנים 2024–2025.
אם גוגל תצליח לשחזר את ההצלחה של השפות האחרות שלהם, גולנג וקוטלין, נותר לראות.