Ещё на тему разбухшего vibe-кода. Смотрю проект Vib-OS. Потом про него статья будет. Это очень маленький проект, если убрать сторонние сущности и различные ресурсы, хранящиеся в виде массивов в коде. По делу там около 35 тысяч строк кода в 110 файлах.
Так вот, на эти 110 файлов я насчитал как минимум 4 одинаковые функции копирования строк.
Видимо у ИИ который это делал, любимый напев – I Like to Move It, Move It :) Частое (местами совершенно бестолковое) копирование массивов. Причём реализованное циклами, а не через
Так вот, на эти 110 файлов я насчитал как минимум 4 одинаковые функции копирования строк.
static void str_copy(char *dst, const char *src, int max) {
int i = 0;
while (src[i] && i < max - 1) {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
static void str_cpy(char *dst, const char *src, int max) {
int i = 0;
while (src[i] && i < max - 1) {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
static void strcpy_safe(char *dst, const char *src, size_t max) {
size_t i = 0;
while (src[i] && i < max - 1) {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
static inline char *strncpy_safe(char *dst, const char *src, size_t n) {
size_t i;
for (i = 0; i < n - 1 && src[i]; i++) {
dst[i] = src[i];
}
dst[i] = '\0';
return dst;
}Видимо у ИИ который это делал, любимый напев – I Like to Move It, Move It :) Частое (местами совершенно бестолковое) копирование массивов. Причём реализованное циклами, а не через
memcpy.😁13
В комментариях к предыдущему посту написали, что
Все эти четверостишия могут быть заменены на один вызов
memcpy не проверяет завершающий ноль, поэтому плохо подходит для копирования строк. Это так, но я имел в виду, что в рассматриваемом проекте вообще очень много копирования данных "вручную", не являющихся строками. Постоянно встречается код вида:uint8_t *src = buf + offset_in_block;
uint8_t *dst = (uint8_t *)inode;
for (size_t i = 0; i < sizeof(struct ext4_inode); i++) {
dst[i] = src[i];
}
uint8_t *src = sb_buf;
uint8_t *dst = (uint8_t *)&fs->sb;
for (size_t i = 0; i < sizeof(struct ext4_superblock); i++) {
dst[i] = src[i];
}
uint8_t *src = (uint8_t *)ptr;
uint8_t *dst = (uint8_t *)new_ptr;
for (size_t i = 0; i < old_size; i++) {
dst[i] = src[i];
}
Все эти четверостишия могут быть заменены на один вызов
memcpy.👍5
Ещё пример. Функция
Посмотрим, что происходит со строкой дальше:
Формируется новый буфер из специального заголовка и переданной строки. Дальше этот буфер пока не используется, но суть не в этом. Непонятно, зачем вообще был нужен промежуточный буфер в
bt_set_local_name просто перекладывает строку в буфер размером 248 байт и передаёт её в hci_send_cmd.int bt_set_local_name(const char *name)
{
uint8_t params[248] = {0};
int len = 0;
while (name[len] && len < 247) {
params[len] = name[len];
len++;
}
return hci_send_cmd(HCI_OP_WRITE_LOCAL_NAME, params, 248);
}
Посмотрим, что происходит со строкой дальше:
static int hci_send_cmd(uint16_t opcode, void *params, uint8_t plen)
{
uint8_t buf[256];
buf[0] = HCI_COMMAND_PKT;
struct hci_command_hdr *hdr = (struct hci_command_hdr *)&buf[1];
hdr->opcode = opcode;
hdr->plen = plen;
if (plen > 0 && params) {
for (int i = 0; i < plen; i++) {
buf[4 + i] = ((uint8_t *)params)[i];
}
}
/* TODO: Send via USB bulk endpoint */
printk(KERN_DEBUG "BT: Send cmd opcode=0x%04x len=%d\n", opcode, plen);
return 0;
}
Формируется новый буфер из специального заголовка и переданной строки. Дальше этот буфер пока не используется, но суть не в этом. Непонятно, зачем вообще был нужен промежуточный буфер в
bt_set_local_name. Код можно сократить, попутно ускорив его, убрав одно копирование.😁3
Бонусный вебинар. Сертификация процессов РБПО: требования ФСТЭК России, новые стандарты и практика.
Финальный вебинар масштабного цикла «Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024» прошёл при участии ведущих экспертов: Дмитрия Шмойлова, Алексея Щербакова и Виталия Вареницы.
Финальный вебинар масштабного цикла «Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024» прошёл при участии ведущих экспертов: Дмитрия Шмойлова, Алексея Щербакова и Виталия Вареницы.
PVS-Studio
Бонусный вебинар. Сертификация процессов РБПО: требования ФСТЭК России, новые стандарты и практика
Финальный вебинар масштабного цикла «Вокруг РБПО за 25 вебинаров: ГОСТ Р 56939-2024» прошёл при участии ведущих экспертов: Дмитрия Шмойлова, Алексея Щербакова и Виталия Вареницы.Участники обсудили практику сертификации, новые национальные стандарты и методику…
🔥5👍2👏1
Механизмы в SAST-решениях для выявления дефектов из OWASP Top Ten
На вебинаре вместе с Лукой Сафоновым, лидером российского отделения консорциума OWASP, разобрали OWASP Top Ten. Поговорили о том, почему так важно проверять исходный код на наличие потенциальных уязвимостей и как с этой задачей помогают справляться SAST-инструменты. А также рассмотрели механизмы, которые позволяют выявлять потенциальные уязвимости и дефекты безопасности.
P.S. В процессе презентации речь зашла о Евгении Кокуйкине. Вот его TG канал - Евгений Кокуйкин - Raft, где он пишет про OWASP Top 10 for Agentic Applications, OWASP Top 10 for LLM Applications и т.д.
На вебинаре вместе с Лукой Сафоновым, лидером российского отделения консорциума OWASP, разобрали OWASP Top Ten. Поговорили о том, почему так важно проверять исходный код на наличие потенциальных уязвимостей и как с этой задачей помогают справляться SAST-инструменты. А также рассмотрели механизмы, которые позволяют выявлять потенциальные уязвимости и дефекты безопасности.
P.S. В процессе презентации речь зашла о Евгении Кокуйкине. Вот его TG канал - Евгений Кокуйкин - Raft, где он пишет про OWASP Top 10 for Agentic Applications, OWASP Top 10 for LLM Applications и т.д.
PVS-Studio
Механизмы в SAST-решениях для выявления дефектов из OWASP Top Ten
На вебинаре вместе с Лукой Сафоновым, лидером российского отделения консорциума OWASP, разобрали OWASP Top Ten. Поговорили о том, почему так важно проверять исходный код на наличие потенциальных уязвимостей и как с этой задачей помогают справляться SAST-инструменты.…
🔥5👍2👌1
Forwarded from PVS-Studio: поиск ошибок в коде
Продолжаем изучать возможности статического анализатора в рамках серии вебинаров ❤️
В новой части:
- Запуск анализатора из командной строки (CLI).
- Использование PVS-Studio в Docker-контейнерах.
- Интеграция в процессы CI/CD.
- Обзор утилит Plog Converter и Blame Notifier.
🗓26 марта в 14:00
Регистрация по ссылке🔗
Присоединяйтесь! Будет интересно!
P.s. если не сможете подключиться в этот день - не беда! Всем зарегистрировавшимся мы отправим запись
#вебинар #PVS_Studio
В новой части:
- Запуск анализатора из командной строки (CLI).
- Использование PVS-Studio в Docker-контейнерах.
- Интеграция в процессы CI/CD.
- Обзор утилит Plog Converter и Blame Notifier.
🗓26 марта в 14:00
Регистрация по ссылке
Присоединяйтесь! Будет интересно!
P.s. если не сможете подключиться в этот день - не беда! Всем зарегистрировавшимся мы отправим запись
#вебинар #PVS_Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
Подытожил в статье итоги обзора кода "проекта" Vib-OS.
Давайте заглянем в этот самый вайб-код.
Давайте заглянем в этот самый вайб-код.
PVS-Studio
Давайте заглянем в этот самый вайб-код
Начал появляться код тех самых навайбкоденных проектов, который изменит мир и т. д. Ну а мы начинаем потихоньку смотреть код этих проектов, в том числе и сквозь призму статического анализа.
👏7
Forwarded from PVS-Studio: поиск ошибок в коде
Друзья, мы обновили нашу книгу по ГОСТ Р 71207!
Теперь там рассматривается не только этот ГОСТ, а также ГОСТ Р 56939, приказ ФСТЭК №117.
Что полезного можно найти:
- требования к инструментам статического анализа;
- какие ошибки они должны находить;
- понятие критической ошибки;
- какие технологии должны реализовывать анализаторы;
- процесс регулярного использования;
- взаимосвязи c ГОСТ Р 56939—2024 и приказом ФСТЭК №117;
- испытания статических анализаторов в 2025 году;
и многое другое.
Получить книгу можно по этой ссылке 👈🏻
#гост #фстэк #PVS_Studio #книга
Теперь там рассматривается не только этот ГОСТ, а также ГОСТ Р 56939, приказ ФСТЭК №117.
Что полезного можно найти:
- требования к инструментам статического анализа;
- какие ошибки они должны находить;
- понятие критической ошибки;
- какие технологии должны реализовывать анализаторы;
- процесс регулярного использования;
- взаимосвязи c ГОСТ Р 56939—2024 и приказом ФСТЭК №117;
- испытания статических анализаторов в 2025 году;
и многое другое.
Получить книгу можно по этой ссылке 👈🏻
#гост #фстэк #PVS_Studio #книга
👍2
Смотрю ещё один вайб проект, про который потом напишу статью. Что-бы быть в ней максимально точным, прошу помочь читателей.
По мнению ИИ вот этот код с вложенным циклом является SIMD-friendly. Предполагается, что потенциально он может быть лучше оптимизирован, так как компилятор увидит, что обработка идёт цепочками по 8 байт и как-то воспользуется этим.
Моё мнение – это фигня какая-то. Моя нейросеть (интуиция) подсказывает, что этот код для компилятора ничем не лучше, чем его простейшая реализация с одним циклом:
Хочу убедиться в своей правоте. Мне кажется, нет компилятора и ключей оптимизации, при которых будет построен особенно эффективный код (например, с использованием SSE) для версии с вложенным циклом, но при этом тоже самое не будет сделано для короткой версии.
На своих замерах я пока вообще получаю, что "оптимизированная" версия с вложенным циклами работает медленнее, чем с 1 циклом. Есть более быстрые варианты, основанные на сдвигах и явных интристиках, но они сейчас не интересны. Речь именно на предложенную "оптимизацию" с вложенным циклом.
Призываю экспертов оптимизации. Кто прав, а кто нет?
По мнению ИИ вот этот код с вложенным циклом является SIMD-friendly. Предполагается, что потенциально он может быть лучше оптимизирован, так как компилятор увидит, что обработка идёт цепочками по 8 байт и как-то воспользуется этим.
Моё мнение – это фигня какая-то. Моя нейросеть (интуиция) подсказывает, что этот код для компилятора ничем не лучше, чем его простейшая реализация с одним циклом:
bool IsSpanBlank_simple(const char* data, size_t len) {
for (size_t i = 0; i < len; ++i) {
unsigned char c = static_cast<unsigned char>(data[i]);
if (c != ' ' && c != '\t' && c != '\n' && c != '\r') {
return false;
}
}
return true;
}Хочу убедиться в своей правоте. Мне кажется, нет компилятора и ключей оптимизации, при которых будет построен особенно эффективный код (например, с использованием SSE) для версии с вложенным циклом, но при этом тоже самое не будет сделано для короткой версии.
На своих замерах я пока вообще получаю, что "оптимизированная" версия с вложенным циклами работает медленнее, чем с 1 циклом. Есть более быстрые варианты, основанные на сдвигах и явных интристиках, но они сейчас не интересны. Речь именно на предложенную "оптимизацию" с вложенным циклом.
Призываю экспертов оптимизации. Кто прав, а кто нет?
❤3
Forwarded from PVS-Studio: поиск ошибок в коде
Друзья, мы создали канал "PVS-Studio для бизнеса".
Что вы там найдете:
- как внедрение статического анализатора (SAST) сокращает технический долг и почему исправление ошибки на этапе написания кода в несколько раз дешевле, чем после релиза;
- как защитить свой продукт от уязвимостей и соответствовать стандартам;
- реальные истории компаний, которые внедрили PVS-Studio, и как это отразилось на качестве продукта.
Приглашаем подписаться!
А еще, на всякий случай, у нас появился канал в MAX.
Что вы там найдете:
- как внедрение статического анализатора (SAST) сокращает технический долг и почему исправление ошибки на этапе написания кода в несколько раз дешевле, чем после релиза;
- как защитить свой продукт от уязвимостей и соответствовать стандартам;
- реальные истории компаний, которые внедрили PVS-Studio, и как это отразилось на качестве продукта.
Приглашаем подписаться!
А еще, на всякий случай, у нас появился канал в MAX.
❤🔥5
Помимо дня смеха, сегодня ровно как 2 года введён в действие ГОСТ Р 71207—2024 "Статический анализ программного обеспечения".
Если кто ещё не знаком: ГОСТ Р 71207–2024 глазами разработчика статических анализаторов кода.
Если кто ещё не знаком: ГОСТ Р 71207–2024 глазами разработчика статических анализаторов кода.
Хабр
ГОСТ Р 71207–2024 глазами разработчика статических анализаторов кода
1 апреля 2024 года введён в действие новый ГОСТ "Статический анализ программного обеспечения". Если в ГОСТ Р 56939–2016 говорится о необходимости использования статического анализа при...
👍4
Главным направлением развития ИИ в 2026 году становится внедрение ИИ-агентов.
Главным направлением развития ИИ в 2026 году становится окончательная порча Хабра такими текстами 😩
Главным направлением развития ИИ в 2026 году становится окончательная порча Хабра такими текстами 😩
😢4😁1
Решил поделиться парой картинок для класса героя, которого можно получить во вчерашнем квизе. Уж очень они хороши. Я думал, что у меня будет мультикласс, а получил варвара :)
🔥5💯2❤1
Поучаствовал в подкасте от компании EvApps.
IT ToLк by EvApps. Андрей Карпов про чистый код без вредных советов.
Вариант на Яндекс Музыка: только звук.
IT ToLк by EvApps. Андрей Карпов про чистый код без вредных советов.
Вариант на Яндекс Музыка: только звук.
Предстоящие вебинары
15 апреля 14:00. Тимлид: ожидания, реальность и внутренние вопросы. Регистрация.
15 апреля 16:00. Зачем тестировщику нужна безопасность? Регистрация.
17 апреля 14:00. PVS-Studio в SAST: от стандартов безопасности к DevSecOps. Регистрация.
15 апреля 14:00. Тимлид: ожидания, реальность и внутренние вопросы. Регистрация.
Быть тимлидом — это не только про процессы и задачи, но и про людей, ожидания и собственные сомнения.
Инна Пристягина (руководитель отдела развития, PVS-Studio) разберёт, кто такой менеджер в IT и зачем он вообще нужен: как выстраивать взаимодействие с командой, какие стили управления работают и как не наломать дров на старте.
Ольга Ладошкина (коуч IT-руководителей и топ-команд, бизнес-тренер, основатель проекта «Лидерская кухня»; наставник в Яндекс Практикуме) поговорит о внутренней стороне лидерства: почему этот путь пугает, с какими ловушками сталкиваются новые лидеры и как не потерять себя. Разберёт реальные кейсы и простые инструменты, которые помогут справляться и с командой, и с собой.
Вебинар подойдёт тем, кто уже тимлид или только собирается им стать и хочет понять: «Это моё?»
15 апреля 16:00. Зачем тестировщику нужна безопасность? Регистрация.
Безопасная разработка из опции превращается в обязательное требование: стандарты (российские и международные) все сильнее влияют на процессы разработки и тестирования.
На вебинаре разберем, как тестировщику начать работать с безопасностью без узкой специализации в ИБ: какие базовые навыки нужны, как находить уязвимости на практике, что делать с найденными проблемами, как повысить свою ценность на рынке.
На вебинаре вас ждут два практических доклада от экспертов:
Безопасность длячаQAников (Семен Ремезов, Senior QA, АО "Гринатом")
Вы уже тестируете по ГОСТу (Глеб Асламов, Developer Advocate, PVS-Studio)
17 апреля 14:00. PVS-Studio в SAST: от стандартов безопасности к DevSecOps. Регистрация.
В этот раз рассмотрим использование PVS-Studio в роли SAST-инструмента для автоматического поиска ошибок и потенциальных уязвимостей в исходном коде. Покажем, какие типы проблем способен выявлять статический анализатор и как он помогает повысить качество и надёжность программного обеспечения.
Кратко разберём сценарии интеграции PVS-Studio в процесс разработки и CI/CD, а также практические преимущества его применения на ранних этапах жизненного цикла разработки.
🔥3
По техническим причинам вебинар "Зачем тестировщику нужна безопасность?" перенесён на 15 апреля. Время начала: 16:00.
PVS-Studio
Зачем тестировщику нужна безопасность?
Безопасная разработка из опции превращается в обязательное требование: стандарты (российские и международные) все сильнее влияют на процессы разработки и тестирования.
Для тестировщиков это означает одно — привычных навыков уже не достаточно.
На вебинаре…
Для тестировщиков это означает одно — привычных навыков уже не достаточно.
На вебинаре…
👍4