HeadlinesBriefing HeadlinesBriefing.com

Сокращение неопределённого поведения в языке C

Hacker News •
×

Мы плохо умеем заниматься маркетингом — признаём это. Наша сила — писать статьи такого рода, на которые полагаются разработчики, администраторы и сторонники свободного ПО, чтобы знать, что происходит в мире Linux. Подпишитесь сегодня, чтобы помочь нам продолжать это, и чтобы нам не пришлось стать хорошими в маркетинге.

Как профессор биомедицинской инженерии, Мартин Уэкер, возможно, не вписывается в профиль типичного докладчика Kernel Recipes. Однако он давний пользователь Linux и работает над свободным ПО для управления сканерами магнитно-резонансной томографии (МРТ). Он был на конференции, чтобы поговорить о языке программирования C, конкретной проблеме неопределённого поведения в C, и о том, можно ли в конечном итоге сделать его языком, безопасным с точки зрения памяти.

Зачем вообще заниматься C в 2026 году? Он сказал, что это всё ещё отличный язык. C переносим, стабилен в долгосрочной перспективе, обеспечивает быструю компиляцию, а результирующий бинарный код быстр. "Что видишь, то и получаешь"; легко посмотреть на код C и иметь представление о том, что на самом деле сделает компьютер. Существует множество инструментов для работы с языком, и C отходит на второй план, когда это необходимо.

У C долгая история, и это влияет на язык таким, каким мы видим его сегодня, сказал он. Стандарт C89 должен был справляться с широким разнообразием аппаратного обеспечения, включая машины с представлениями целых чисел со знаком-модулем или обратным кодом, сегментированной памятью, экзотическими представлениями указателей и удивительными размерами типов. Некоторые машины Honeywell, например, имели девятибитные байты. Это значительно усложнило задачу написания стандарта, который позволил бы писать переносимый код. Подход, который был принят, заключался в определении семантики языка через абстрактную машину. Все операции должны выполняться так, как если бы они работали на этой абстрактной машине, которая может не точно соответствовать реальному оборудованию. Наблюдаемое поведение программы должно быть таким, каким оно было бы на абстрактной машине.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing