Сідаєш з ШІ-шкою й усім своїм багатолітнім досвідом за прогу на C++, просираєш чотири години… Результат: вдалося нарешті підключити сторонню лібу для парсингу KDL так, щоб вона зібралася без помилок. Вельми очевидно й прямолінійно все: Xmake качає з ґітгаба архів релізу, розпаковує, знаходить там
CMakeLists.txt, накладає на нього щойно написану латку, без котрої ніц не працювало, збирає CMakeʼом і вуаля — магія!Потім, правда, виявилося, що бібліотека для всіх рядків використовує виключно
std::u8string — такий новий сучасний тип для UTF-8 з C++20. Чудово, що в C++ нарешті його додали, бо як же без UTF-8 у 20-х роках. Щоправда… схоже, вони забули додати ще дещо. Наприклад, бодай якісь функції чи типи, які б з ним працювали‽!! Може
std::u8stringstream? Ні, для потоків є тільки спеціалізації для char та wchar_t, а тут char8_t — він того ж розміру, вирівнювання й знаку, що й unsigned char, але все-таки окремий. Ну може тоді хоча б std::ifstream/std::ofstream? Нє, теж ні. Файли нам читати-писати не треба, як я бачу, ок. Ну, принаймні std::filesystem::path з такого можна сконструювати.Доведеться, видно, рядки туди-сюди між типами ганяти. Яке щастя, що в Qt є
QString, який всередині використовує char16_t, але дозволяє конвертувати з або в std::string. А для конвертації між std::string та std::u8string є чудові стандартні функції з красномовними назвами std::mbrtoc8 та std::c8rtomb (пропонуйте ваші варіанти, що це може значити). Враховуючи, що в моїй програмі все одно є вбудований рушій 💻, я, якщо чесно, вже думав, чи не буде легше просто там той 🤗 парсити 😆
І наостанок тримайте ще історію про 🦶. Треба було мені того тижня зробити одну хєрню, і єдина тулза для цього, котру я знайшов, була написана якимсь нонеймом на колінці 10 років тому якраз мовою Go в ґіт-сховищі на декілька зірок. Тільки версія під macOS з релізів у мене не запрацювала, бо, підозрюю, що вона досі 32-бітна може бути абощо. То я стягнув собі репозиторій, щоб зібрати власноруч. Не знаю, яка там версія компілятора чи бібліотек була 10 років тому в чувака, але в мене-то найсвіжіша! Запускаю
go build і… нуль помилок. Усе працює 🙂Треба зменшувати використання сі-плас-пластика & Go touch grass.