Все мы знаем, что C дает вам столько свободы, что легко допускать большие ошибки. Обычно призывают отказаться от C и принять что-то более современное, например Rust, но почему бы не добавить C, чтобы сделать его безопасным?
Microsoft сделала это с помощью JavaScript, так почему бы не C? TypeScript включает в себя JavaScript как подмножество, но, возможно, это лучший язык. Почему бы не сделать то же самое для C и не спасти язык и многие программы, написанные на нем?
Это цель Checked C. Это не первая попытка исправить язык, но она продвигается Microsoft Research в новой статье Арчибальда Сэмюэля Эллиотта из Вашингтонского университета; Эндрю Рюф и Майкл Хикс, Мэрилендский университет; и Дэвид Тардити, Microsoft Research. У языка более долгая история, чем можно предположить, и он был открыт еще в 2016 году.
Основная идея состоит в том, чтобы представить новые типы указателей и концепцию отмеченных и непроверенных областей программы. Два новых типа указателей — это _Ptrtype и _Array_ptrtype — разница в том, что указатель массива позволяет выполнять арифметические операции с указателями, а необработанный указатель — нет. Компилятор проверяет действительность новых указателей при разыменовании.
Границы указателей массивов проверяются, но компилятор снимает проверку, если можно сделать вывод, что границы не могут быть превышены.
В других улучшенных версиях C указатели границ сохраняются вместе с указателем. В Checked C вы помещаете выражение границ, указывающее, где сохраняются границы. Например:
void append (_Array_ptr