uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

C++ Academy

C++ Academy

Відкрити в Telegram

По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ

Показати більше

📈 Аналітичний огляд Telegram-каналу C++ Academy

Канал C++ Academy (@cpluspluc) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 15 508 підписників, посідаючи 8 308 місце в категорії Технології та додатки та 42 224 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 15 508 підписників.

За останніми даними від 27 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на 8, а за останні 24 години на -12, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 16.51%. Протягом перших 24 годин після публікації контент зазвичай збирає 6.74% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 2 560 переглядів. Протягом першої доби публікація в середньому набирає 1 045 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 26.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як c++, github, linux, api, архитектура.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“По всем вопросам- @workakkk РКН: clck.ru/3FmxJF #VRHSZ”

Завдяки високій частоті оновлень (останні дані отримано 28 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

15 508
Підписники
-1224 години
-227 днів
+830 днів
Залучення підписників
жовт '26
жовтень '26
+114
в 37 каналах
вересень '26
+112
в 31 каналах
Get PRO
серпень '26
+118
в 40 каналах
Get PRO
липень '26
+82
в 42 каналах
Get PRO
червень '26
+56
в 1 каналах
Get PRO
травень '26
+130
в 3 каналах
Get PRO
квітень '26
+49
в 0 каналах
Get PRO
березень '26
+92
в 21 каналах
Get PRO
лютий '26
+93
в 44 каналах
Get PRO
січень '26
+437
в 110 каналах
Get PRO
грудень '25
+66
в 2 каналах
Get PRO
листопад '25
+217
в 44 каналах
Get PRO
жовтень '25
+81
в 15 каналах
Get PRO
вересень '25
+116
в 38 каналах
Get PRO
серпень '25
+291
в 9 каналах
Get PRO
липень '25
+518
в 77 каналах
Get PRO
червень '25
+347
в 73 каналах
Get PRO
травень '25
+82
в 5 каналах
Get PRO
квітень '25
+105
в 27 каналах
Get PRO
березень '25
+120
в 1 каналах
Get PRO
лютий '25
+175
в 40 каналах
Get PRO
січень '25
+175
в 47 каналах
Get PRO
грудень '24
+585
в 58 каналах
Get PRO
листопад '24
+1 337
в 186 каналах
Get PRO
жовтень '24
+2 234
в 75 каналах
Get PRO
вересень '24
+848
в 203 каналах
Get PRO
серпень '24
+580
в 42 каналах
Get PRO
липень '24
+837
в 52 каналах
Get PRO
червень '24
+2 266
в 64 каналах
Get PRO
травень '24
+498
в 39 каналах
Get PRO
квітень '24
+571
в 47 каналах
Get PRO
березень '24
+653
в 20 каналах
Get PRO
лютий '24
+907
в 5 каналах
Get PRO
січень '24
+705
в 42 каналах
Get PRO
грудень '23
+447
в 39 каналах
Get PRO
листопад '23
+162
в 31 каналах
Get PRO
жовтень '23
+224
в 0 каналах
Get PRO
вересень '23
+385
в 0 каналах
Get PRO
серпень '23
+2 329
в 0 каналах
Get PRO
липень '23
+498
в 1 каналах
Get PRO
червень '23
+565
в 0 каналах
Get PRO
травень '23
+5 320
в 0 каналах
Get PRO
квітень '23
+126
в 0 каналах
Get PRO
березень '23
+422
в 0 каналах
Get PRO
лютий '23
+707
в 0 каналах
Дата
Залучення підписників
Згадування
Канали
28 жовтня+2
27 жовтня0
26 жовтня+4
25 жовтня+1
24 жовтня0
23 жовтня+3
22 жовтня+6
21 жовтня+2
20 жовтня0
19 жовтня+6
18 жовтня+19
17 жовтня+18
16 жовтня+2
15 жовтня+4
14 жовтня+7
13 жовтня0
12 жовтня+5
11 жовтня+5
10 жовтня+3
09 жовтня+1
08 жовтня+3
07 жовтня+4
06 жовтня+7
05 жовтня+8
04 жовтня+3
03 жовтня0
02 жовтня0
01 жовтня+1
Дописи каналу
Роб Пайк написал движок регулярных выражений примерно в 30 строк C – за час-два. В 1998 году Брайану Кернигану понадобился пр
Роб Пайк написал движок регулярных выражений примерно в 30 строк C – за час-два. В 1998 году Брайану Кернигану понадобился пример для книги: достаточно полезный, чтобы показать настоящие регулярные выражения, и достаточно короткий, чтобы поместиться на одной странице. Пайк вернулся с реализацией на указателях и рекурсии, поддерживающей: - ^ – начало строки. - $ – конец строки. - . – любой символ. - * – ноль или больше повторений предыдущего символа. Например, шаблон ^a.*b$ проверяет, что строка начинается с a и заканчивается на b. Весь механизм разделён на три функции: `match` выбирает начальную позицию поиска, `matchhere` проверяет совпадение с неё, `matchstar` перебирает число повторений. Особенно изящная деталь: обработка * сначала проверяет ноль повторений, затем одно, два и дальше – пока оставшаяся часть шаблона не совпадёт. Позже Керниган разобрал этот код в Beautiful Code. Здесь нет групп, альтернатив и классов символов, зато весь механизм можно изучить за один присест.

2
Вектор в C++ (std::vector): полное руководство с примерами 2026 - добавление, удаление, сортировка Вектор в C++ (std::vector)
Вектор в C++ (std::vector): полное руководство с примерами 2026 - добавление, удаление, сортировка Вектор в C++ (std::vector) с примерами: как создать, добавить и удалить элемент, узнать размер, отсортировать, найти элемент, двумерный вектор и ошибки. https://uproger.com/vektor-v-cpp-std-vector/
1 306
3
«what the fu**?»: самый странный комментарий в игровом коде Одна строка из Quake III заменяет деление и корень сдвигом битов
«what the fu**?»: самый странный комментарий в игровом коде Одна строка из Quake III заменяет деление и корень сдвигом битов и магическим числом 0x5f3759df. Покажу на примере, как это работает, и посчитаю погрешность: 3.44% до уточнения и 0.175% после одного шага Ньютона. А кто на самом деле придумал трюк, вы вряд ли угадаете. https://youtube.com/shorts/oIpqqzNNCHo
1 503
4
Алгоритм is_partitioned Алгоритм is_partitioned — это алгоритм из стандартной библиотеки algorithm, который проверяет, разбит
Алгоритм is_partitioned Алгоритм is_partitioned — это алгоритм из стандартной библиотеки algorithm, который проверяет, разбит ли диапазон элементов определенным образом. Принимает три параметра: — Два итератора, задающих проверяемый диапазон. — Предикат (функцию или функтор), определяющий разбиение. Возвращает bool значение — true если диапазон разбит согласно предикату и false в противном случае. Этот алгоритм предпочтительнее цикла, т. к. проще в использовании и читабельнее, ведь он эффективно проверяет условие за один проход по последовательности. В примере мы определяем предикат isEven для проверки четности числа, передаем его в is_partitioned вместе с вектором v и выводим результат. #это_база
1 822
5
✔️ В C++26 появились контракты. Но проверка условия ещё не гарантирует оптимизацию Контракты позволяют задавать предусловия и
✔️ В C++26 появились контракты. Но проверка условия ещё не гарантирует оптимизацию Контракты позволяют задавать предусловия и постусловия функции. Например, потребовать, чтобы делитель был ненулевой степенью двойки: uint32_t ring_index(uint32_t i, uint32_t n) pre(n && (n & (n - 1)) == 0) { return i % n; } Для таких беззнаковых чисел i % n можно заменить на более дешёвое i & (n - 1). Однако в примере автора GCC 16 не выполняет эту оптимизацию автоматически. Поддержка контрактов включается через -fcontracts. В режиме enforce нарушение вызывает обработчик и завершение программы. Поведение зависит от выбранного режима проверки. Документация GCC -https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html . Атрибут C++23 [[assume(условие)]] даёт оптимизатору дополнительную информацию, но не проверяет условие. Если оно ложно, поведение программы не определено.
2 034
6
🌟 SonicBoom: движок инференса без Python HardenedVault, которая специализируется на безопасности Linux и компиляторов, вылож+2
🌟 SonicBoom: движок инференса без Python HardenedVault, которая специализируется на безопасности Linux и компиляторов, выложила среду исполнения SonicBoom, написанной с нуля на C++ и CUDA. Python ей не нужен ни для работы, ни для сборки. Цель проекта – локальный запуск языковых моделей на потребительских видеокартах. Всё упаковано в одну библиотеку libsonicboom.so, которую можно подключить из любого языка через стандартный интерфейс C, основным языком для работы с ней авторы выбрали Scheme в реализации GNU Guile. SonicBoom загружает модели в GGUF, генерирует текст на процессоре или видеокарте и поднимает локальный сервер, совместимый с API OpenAI. Если новый запрос начинается с того же текста, что и предыдущий, заново обрабатывается только добавленная часть, и результат до токена совпадает с полным пересчётом. 🟡Механика Скорость вывода дают уровни над вычислительными ядрами, а не сами ядра. Умножение квантованных матриц и токенизаторы частично перенесены из llama.cpp. Над ними работает планировщик, который до запуска переписывает граф модели целиком, сливает соседние операции и записывает весь шаг генерации токена в один CUDA Graph, т. е. в готовую последовательность команд для видеокарты. Ещё выше стоит компилятор на базе MLIR. Он сам генерирует часть ядер для GPU, в том числе для механизма внимания, и при первом запуске подбирает самый быстрый вариант под конкретную карту. 🟡Тесты На RTX 3050 с 8 ГБ памяти сравнили SonicBoom и llama.cpp на одних и тех же моделях. Gemma 4 E4B через SonicBoom дала генерацию в 53 токена в секунду против 44,8 у llama.cpp. У Qwen2.5-0.5B вышло 344,7 токена в секунду против 307,6. Когда контекст дорастает до 512 токенов, SonicBoom на Qwen уже чуть отстаёт. Единственный сторонний результат на RTX 4060 Ti оказался хуже llama.cpp, 73,6 токена в секунду против 78, но его получили на сборке, ещё не настроенной под эту видеокарту. Пока проверены только две модели, Gemma 4 E4B-it и Qwen2.5-0.5B-Instruct, и только видеокарты серии RTX 30. Модель всегда выбирает самый вероятный токен, температуру и другие настройки случайности задать нельзя. Следующими в планах стоят модели Llama и Mistral, работа через Vulkan, генерация ядер для видеокарт других производителей и диффузионные модели. Дальше SonicBoom планирует вырасти в фреймворк в духе PyTorch, где модель пишут на Scheme и компилируют в граф вычислений. Прототип этого режима уже обучает небольшой трансформер. 📌Лицензирование: GPL-3.0 🖥Github @ai_machinelearning_big_data #AI #ML #LLM #InferenceEngine #SonicBoom
1 718
7
🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++. Принцип довольно элегантный: для+1
🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++. Принцип довольно элегантный: для каждого вертикального столбца экрана выпускается один луч через карту, а пересечения со стенами ищутся через DDA - Digital Differential Analysis. Ключевой трюк: deltaDist = abs(1 / rayDir) После попадания в стену используется не обычная длина луча, а перпендикулярное расстояние до стены — это убирает характерное fish-eye искажение. Дальше всё почти классически: * рассчитывается высота стены на экране; * выбирается текстура; * вычисляется точка попадания; * рисуется вертикальная полоса пикселей. Минимум кода и уже получается полноценная псевдо-3D графика в стиле первых Wolfenstein/Doom-подобных движков. Отличный проект, чтобы реально понять raycasting, DDA и основы старой 3D-графики.
1 916
8
Виртуальных агентов обсудят на митапе «Русское техно 2» от MWS 23 октября. ⚡ Успейте зарегистрироваться. В программе доклады
Виртуальных агентов обсудят на митапе «Русское техно 2» от MWS 23 октября. ⚡ Успейте зарегистрироваться. В программе доклады и дискуссии по темам: — Как построить control plane для персональных ИИ-агентов на Kubernetes. — Как построить агентный производственный процесс в связке с Harness. — Подходы к управлению командами с ИИ-агентами. Как меняются метпроцессы внутри команды? — Когда ИИ-агент становится экономически оправданным. А также участников ждет битва промптов и нетворкинг. Когда: 23 октября Формат: офлайн в Москве и онлайн Зарегистрироваться
1 148
9
🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++. Принцип довольно элегантный: для+1
🎮 Оказывается, Wolfenstein 3D-подобный raycaster можно собрать примерно в 250 строках C++. Принцип довольно элегантный: для каждого вертикального столбца экрана выпускается один луч через карту, а пересечения со стенами ищутся через DDA - Digital Differential Analysis. Ключевой трюк: deltaDist = abs(1 / rayDir) После попадания в стену используется не обычная длина луча, а перпендикулярное расстояние до стены — это убирает характерное fish-eye искажение. Дальше всё почти классически: * рассчитывается высота стены на экране; * выбирается текстура; * вычисляется точка попадания; * рисуется вертикальная полоса пикселей. Минимум кода и уже получается полноценная псевдо-3D графика в стиле первых Wolfenstein/Doom-подобных движков. Отличный проект, чтобы реально понять raycasting, DDA и основы старой 3D-графики.
109
10
🧠 TIL: SQLite превращает числа в текст сразу по две цифры Обычно integer → string делают циклом: / 10 → берём цифру % 10 → о
🧠 TIL: SQLite превращает числа в текст сразу по две цифры Обычно integer → string делают циклом: / 10 → берём цифру % 10 → остаток и повторяем снова. SQLite идёт хитрее. В исходниках есть строка на 200 символов, содержащая все пары от 00 до 99: 000102030405...979899 При преобразовании числа SQLite обрабатывает его по две цифры за раз и просто берёт нужную пару символов по индексу. То есть вместо множества операций /10 и %10: делим на 100 → получаем две цифры → копируем готовую пару. Маленькая оптимизация, но именно из таких деталей и состоит быстрый системный код. Исходник: sqlite/src/util.c
2 320
11
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажется. Собрал папки и каналы, где можн
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажется. Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре. AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii DevOps: t.me/DevOPSitsec Docker: https://t.me/+90Z5TAyfuNU5YmRi Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_ci Java: t.me/javatg JavaScript: t.me/javascriptv React: t.me/react_tg Frontend: t.me/front PHP: t.me/phpshka Android: t.me/android_its Мобильная разработка: t.me/mobdevelop Базы данных: t.me/sqlhub Data Science: t.me/data_analysis_ml Big Data: t.me/bigdatai Математика: t.me/data_math Физика: t.me/fizmat Kubernetes: t.me/kubernetc GameDev: https://t.me/gamedev Haskell: t.me/haskell_tg Собеседования и карьера: DS собеседования: t.me/machinelearning_interview Python собеседования: t.me/python_job_interview Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy Полезное сверху: ИТ-мемы: t.me/memes_prog Английский для программистов: t.me/english_forprogrammers ИИ и технологии: t.me/vistehno 954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy Max Ai: https://max.ru/ai_machinelearning_big_data Max python: https://max.ru/pythonl ТЕХНО: https://max.ru/vistehno Max Go: https://max.ru/Golang_google Max Linux: https://max.ru/linuxkalii Devops: https://max.ru/DevOPSitsec C#: https://max.ru/csharp_ci C++: https://max.ru/cpluspluc SQL: https://max.ru/sqlhub Java: https://max.ru/javatg Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
2 014
12
Немає тексту...
2 834
13
🛋 C++ реалистично симулирует взрослую жизнь: решил сэкономить на переезде, а всё равно заплатил за копию. const Sofa mySofa;
🛋 C++ реалистично симулирует взрослую жизнь: решил сэкономить на переезде, а всё равно заплатил за копию. const Sofa mySofa; Sofa newApartment = std::move(mySofa); Кажется, диван должен «переехать». Но вызывается конструктор копирования 🤡 Подвох: `std::move` не перемещает объект и не снимает `const`. Здесь он даёт const Sofa&&, а конструктору перемещения Sofa(Sofa&&) нужна ссылка без const. Зато конструктор копирования Sofa(const Sofa&) подходит. Даже компилятор знает: переезд без неожиданных расходов не бывает.
2 501
14
Для работы с ИИ полезно иметь несколько моделей под рукой. Но держать ради этого несколько подписок удобно не всем. Особенно когда сегодня нужен Claude для кода, завтра GPT для другой задачи, а команде ещё нужны общий баланс и понятные расходы. Для такого сценария есть RouterAI, российская альтернатива OpenRouter. ChatGPT, Claude, Gemini, Grok и сотни других моделей доступны через один веб-чат и OpenAI-совместимый API. Сервис работает без VPN, есть Telegram-бот. Для разработки предусмотрены инструкции по подключению Claude Code, Codex, Cline и Cursor. Если провайдер модели недоступен, запрос автоматически направляется резервному. Оплата за использование, без обязательной подписки. Пополнить баланс можно в рублях российской картой или через СБП. Для бизнеса есть оплата по счёту, договор и закрывающие документы. Командам доступны роли, лимиты и статистика расходов. По данным RouterAI, платформой пользуются десятки тысяч пользователей, включая разработчиков и компании. На сторонних площадках сотни положительных отзывов с оценками около 4,9–5 из 5: например, на Startpack сейчас 372 отзыва и рейтинг 4,9. Практичный способ попробовать разные модели на своих задачах и платить за фактическую работу. https://routerai.ru/l/c #реклама О рекламодателе erid: 2W5zFJoafmB
1 965
15
🎲 Генератор случайных чисел всего в три строки В 2003 году George Marsaglia предложил семейство генераторов Xorshift — один
🎲 Генератор случайных чисел всего в три строки В 2003 году George Marsaglia предложил семейство генераторов Xorshift — один из самых простых и быстрых PRNG. Для xorshift32 достаточно буквально трёх операций: state ^= state << 13; state ^= state >> 17; state ^= state << 5; Новое значение state становится следующим псевдослучайным числом. Почему это интересно: - почти нет вычислительных затрат; - используются только битовые сдвиги и XOR; - период для ненулевого state — до 2³² − 1; - отлично подходит для игр, симуляций и других задач, где важна скорость. Но есть важный нюанс: Xorshift не криптографически стойкий. Для токенов, паролей и security-задач его использовать нельзя. Красивый пример того, как всего несколько битовых операций превращаются в полноценный генератор псевдослучайных чисел.
2 528
16
🔥Приглашаем на бесплатный открытый вебинар курса «Электроника и электротехника»: «Беспроводные STM32. Разрабатываем плату дл
🔥Приглашаем на бесплатный открытый вебинар курса «Электроника и электротехника»: «Беспроводные STM32. Разрабатываем плату для микроконтроллеров с радиоинтерфейсом» 📆Когда: 21 октября 2026, 20:00 (мск) Многие разработчики сталкиваются с ситуацией: плата с Bluetooth «работает, но не летает» — дальность связи в разы меньше заявленной в даташите. Что будет на вебинаре: • Почему плата с Bluetooth работает на 5 метров, хотя в даташите обещают 50? • Что такое согласование антенны и почему без него теряется половина мощности? • Можно ли соединять вывод RF микроконтроллера напрямую с антенной или нужна обвязка? • Практические рекомендации по трассировке радиочастотных трактов. • Как адаптировать референс-дизайн под свой стек печатной платы. Зарегистрируйтесь https://otus.pw/5jPS/?erid=2W5zFGxaSRP Бесплатное занятие приурочено к курсу «Электроника и электротехника» Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1 047
17
🖥 C++: объект уничтожен, а 16 МиБ всё ещё заняты std::weak_ptr может удерживать память даже при expired() == true. Причина в
🖥 C++: объект уничтожен, а 16 МиБ всё ещё заняты std::weak_ptr может удерживать память даже при expired() == true. Причина в std::make_shared: обычно он размещает объект и управляющий блок в одной аллокации. В примере на скриншоте массив на 16 МиБ находится прямо внутри Blob. После удаления последнего shared_ptr: * деструктор объекта вызывается; * expired() возвращает true; * общий блок памяти остаётся выделенным, пока существует хотя бы один weak_ptr. После сброса последней слабой ссылки блок можно освободить. Что делать: удалять протухшие ссылки из долгоживущих кешей. Для крупных объектов также можно рассмотреть отдельную аллокацию через std::shared_ptr<Blob>(new Blob()). Нюанс касается размера самого объекта. Если данные хранятся в обычном std::vector, его отдельный буфер освобождается при вызове деструктора. [Разбор от Microsoft](https://devblogs.microsoft.com/oldnewthing/20230815-00/?p=108602)
2 867
18
🦀 Что удивляет в C, если первым языком был Rust? Обычно разработчики переходят от C к Rust. Автор C for Rust Programmers пош
🦀 Что удивляет в C, если первым языком был Rust? Обычно разработчики переходят от C к Rust. Автор C for Rust Programmers пошёл в обратную сторону и собрал нюансы, которые легко пропустить. Например, такая функция выглядит как принимающая массив из трёх элементов: void inspect(char data[3]) { printf("%zu\n", sizeof(data)); } Но параметр здесь становится указателем. На платформе с 64-битными указателями увидите 8, а не 3. Длина массива в функцию не передаётся. Ещё несколько сюрпризов: • C-строки заканчиваются \0, а strlen() ищет этот байт, проходя по памяти. • long обычно занимает 64 бита в 64-битных Unix-системах и 32 бита в Windows. • malloc() может вернуть NULL, а язык не заставит проверить результат. • Вместо ссылок с проверкой заимствований работают сырые указатели. Полезное чтение для тех, кто пишет FFI или хочет понять, какие гарантии привычно получает от Rust. https://bd103.dev/blog/2026-10-07-c-for-rust-programmers/ @rust_code
2 664
19
UTF-8-декодер на C: таблица и несколько строк кода Бьёрн Хёрманн реализовал декодирование UTF-8 через конечный автомат (DFA).
UTF-8-декодер на C: таблица и несколько строк кода Бьёрн Хёрманн реализовал декодирование UTF-8 через конечный автомат (DFA). Он обрабатывает байты по одному, собирает кодовую точку Unicode и проверяет корректность последовательности. Таблица utf8d выполняет две задачи: * определяет класс очередного байта; * выбирает следующее состояние автомата. `ACCEPT` означает, что кодовая точка полностью прочитана. `REJECT` - обнаружена ошибка. Остальные состояния означают, что нужны дополнительные байты. Подход удобен для потоковой обработки: если символ разорван между двумя сетевыми пакетами, достаточно сохранить состояние и накопленное значение. Нюанс: после последнего байта тоже нужно проверить состояние. Если оно не ACCEPT, строка некорректна - например, оборвалась посреди символа.
2 491
20
🖥 Создатель C++ раскритиковал программирование через промпты Бьярне Страуструп считает естественный язык слишком неоднозначн
🖥 Создатель C++ раскритиковал программирование через промпты Бьярне Страуструп считает естественный язык слишком неоднозначным для точного описания программ. В интервью Райану Петерману он заявил, что ИИ часто создаёт раздутый код с ошибками и уязвимостями, который сложно проверять. По его словам, изменение промпта может существенно менять реализацию, заставляя опытных разработчиков заново разбираться в результате. Страуструп рассказал, что знает специалистов, которые предпочитают уйти на пенсию, чем заниматься такой проверкой. Особенно скептически он оценивает ИИ в системах, где критичны безопасность и производительность. При этом признаёт: большая часть мирового кода не относится к этой категории.
3 458