גרסה חדשה , ודברים חדשים !
אייזה חיים טובים יש לנו עם c++26, הדברים הבאים הם חשובים בשבילי, לאו דווקא בשבילכם, אבל עבורי זה הולך לעשות חיים קלים יותר, זה גם יאפשר לי לשנות שיטות עבודה ישנות, בגישות נוחות וטובות יותר. מתי זה יגיע ? אני מקווה שעד סוף השנה או השנה הבאה יהיו גרסת Visual Studio ו G++ שייתמכו בזה.
אייזה חיים טובים יש לנו עם c++26, הדברים הבאים הם חשובים בשבילי, לאו דווקא בשבילכם, אבל עבורי זה הולך לעשות חיים קלים יותר, זה גם יאפשר לי לשנות שיטות עבודה ישנות, בגישות נוחות וטובות יותר. מתי זה יגיע ? אני מקווה שעד סוף השנה או השנה הבאה יהיו גרסת Visual Studio ו G++ שייתמכו בזה.
הדוגמאות פה, אינן שלי, אבל אני משתמש בהם להראות את הדברים שחשובים עבורי.
עכשיו היה לנו משהוא דומה שהיה אפשר לעשות לפני כן, אבל עכשיו אפשר לעשות את הדבר המגניב הבא:
_binary_<name>_start ו _binary_<name>_end.עכשיו , הגישה עם ה embed היא הרבה יותר נוחה, פשוטה וחלק מהשפה במקום שימוש ב ld בשביל לגשת לדברים הללו.
עכשיו יש לנו אפשרות לזרוק exception מתוך constexpr :
עכשיו היה לנו משהוא דומה שהיה אפשר לעשות לפני כן, אבל עכשיו אפשר לעשות את הדבר המגניב הבא:
template <std::size_t I, typename Tup>
constexpr auto structured_binding_element_at(Tup tp_tuple)
{
auto [...elems] = tp_tuple;
return elems...[I];
}
struct A { bool a ; int b};
static_assert(structured_binding_element_at<1>(A{false,42}) == 42 ) ;
עכשיו, יש עוד משהוא מגניב גם ה embed:
const unsigned char blob_key[] =
{
#embed "res/public_key.asc"
};
נכון , שהיינו עושים זאת עם #include אבל זה היה תקף רק לקוד שמאפשר קומפילציה, פה יש לנו קריאה בינארית ! וכן אני גם מכיר את השיטה הישנה והטובה בה היינו מייצרים מהמידע הבינארי object עם ld ואז שימוש ב _binary_<name>_start ו _binary_<name>_end.עכשיו , הגישה עם ה embed היא הרבה יותר נוחה, פשוטה וחלק מהשפה במקום שימוש ב ld בשביל לגשת לדברים הללו.
עכשיו יש לנו אפשרות לזרוק exception מתוך constexpr :
constexpr double divide(double n , double d ) {
if (0.0 == d ) { throw std::invalid_argument { "div by zero would freeze an F16!"};};
return n/d;
}
עכשיו יש לנו גם אפשרות מדהימה לדעת עם הסביבה שלנו תומכת ב UTF8 ! , על ידי שימוש ב std::text_encoding, אז אנחנו יכולים לזרוק את קוד ה win32 שאנחנו משתמשים בו בשביל לבצע את הפעולות הללו.יש הוספת ספרייה שלמה שמטפלת באלגברה ליניארית, אז ספריות שלמות שייצרנו כבר לא צריך , זה חלק מהשפה, כמובן שלא נעבור ישר לזה, אבל כן , מקטעים שלמים של קוד לא נחוצים יותר כי זה הופך להיות חלק מהשפה, וכן זה הולך לעשות המון עבודה.
ועל הדרך פוסטים מגניבים שראיתי שמסבירים יותר יפה ממני, כמו למשל הייכולת לטעון קבצי json ולבצע סריאליזציה בזמן קומפילציה, זה מתבסס על יכולת ה reflection שהזכרתי קודם לכן, ממה שאני מבין כרגע הקוד אינו חלק מהספרייה התקנית והייתי אומר חבל, כי זה היה מאפשר לי לזרוק את ה json פרסר שכתבתי בזמנו בשפת C , ולהשתמש בספרייה תקנית של C++.
ועל הדרך פוסטים מגניבים שראיתי שמסבירים יותר יפה ממני, כמו למשל הייכולת לטעון קבצי json ולבצע סריאליזציה בזמן קומפילציה, זה מתבסס על יכולת ה reflection שהזכרתי קודם לכן, ממה שאני מבין כרגע הקוד אינו חלק מהספרייה התקנית והייתי אומר חבל, כי זה היה מאפשר לי לזרוק את ה json פרסר שכתבתי בזמנו בשפת C , ולהשתמש בספרייה תקנית של C++.
אין תגובות:
הוסף רשומת תגובה