⚡️ Почему обычный `min(a, b)` в C может вернуть неожиданный результат
В C есть неприятная ловушка: если сравнивать signed и unsigned значения, компилятор может привести оба числа к unsigned.
И тогда отрицательное число внезапно превращается в огромное положительное.
Пример:
#define min(a, b) ((a) < (b) ? (a) : (b))
int x = -1;
unsigned int y = 10;
printf("%u\n", min(x, y));
Интуитивно кажется, что минимум — -1.
Но при сравнении x < y значение -1 приводится к unsigned и становится очень большим числом. В итоге сравнение работает уже не так, как ожидает разработчик.
Именно поэтому в Linux kernel макрос min() устроен хитрее. Он не просто сравнивает два значения, а сначала делает type check:
Она заставляет компилятор проверить, что типы совместимы. Если один аргумент signed, а другой unsigned, такой код может превратиться в ошибку компиляции, а не в тихий баг в рантайме.
Это хороший пример системного C-подхода: лучше сломать сборку сразу, чем получить «правильный» код, который иногда считает неправильно.
В низкоуровневом коде такие мелочи решают очень много. Один неудачный implicit conversion — и проверка размера, индекса или лимита начинает работать против вас.
Kali Linux 2026.2 получил набор практичных изменений, которые заметят те, кто реально запускает систему в VM, на рабочей машине или в NetHunter.
Обновили рабочие окружения: GNOME 50 и KDE Plasma 6.6. В GNOME улучшили отзывчивость файлового менеджера, загрузку иконок, работу с памятью и доступность. В KDE добавили новые улучшения для Wayland, accessibility и OCR в Spectacle, чтобы текст можно было вытаскивать прямо со скриншотов.
APT тоже меняется. Вместо старого /etc/apt/sources.list свежие установки теперь используют новый формат:
/etc/apt/sources.list.d/kali.sources
Старые системы не ломают, но направление понятно: Kali переходит на более современный deb822-style формат, как и другие Debian-based дистрибутивы.
Для VM пользователей главное изменение - загрузка стала быстрее. В предсобранных VM-образах больше не ставят лишнюю графическую firmware, из-за этого initrd стал меньше, а boot time в тестах Kali сократился примерно в 3 раза.
В релизе также добавили 9 новых инструментов, обновили пакеты и оставили ядро Linux 6.19, чтобы не ломать совместимость с NVIDIA. Для тех, кто хочет свежее, kernel 7.0 доступен через experimental/rolling.
NetHunter тоже получил заметные обновления: быстрее стартует приложение, появились фиксы для custom commands и chroot manager, обновили kernel flasher и начали волну патчей для qcacld3 injection на поддерживаемых устройствах.
Поступай на дизайн в Центральный университет с грантом.
Для учеников 10–11-х классов и СПО. Освой графический, UI/UX и продуктовый дизайн. Создавай визуальные концепты будущего.
На программе студенты получают фундаментальную базу, развивают прикладные навыки, приобретают опыт работы над реальными проектами, собирают портфолио и строят связи внутри дизайн-сообщества