Принят RFC об extern "custom" — функции с собственным соглашением о вызове
05.08.2026Принято предложение добавить в язык способ объявить функцию с нестандартным, неизвестным компилятору соглашением о вызове. Речь о низкоуровневом коде, который сам отвечает за передачу аргументов и результата.
Зачем это нужно
Иногда функция должна принимать или возвращать значение не так, как принято в языке. Классический пример — соглашение, заданное в ассемблере или в машинном описании: там порядок аргументов может быть своим, а структуры передаваться иначе.
Сейчас такой код пишут через инлайн-ассемблер. Это работает, но означает, что вызов идёт мимо обычного механизма вызовов компилятора: проверки типов аргументов, правила владения, оптимизации по информации о вызове — всё это к функции не применяется.
Новое объявление позволяет описать такую функцию обычным синтаксисом, сохранив возможность вручную написать тело.
Смысл разделения
Ключевая идея — развести объявление и определение. Объявление говорит компилятору: «эта функция вызывается не так, как ты привык». Определение пишется инлайн-ассемблером, как раньше.
Благодаря этому место вызова получает правила языка — типы аргументов проверяются, а руководство компилятора о том, что функция имеет нестандартное соглашение, доходит до кода генерации. То есть ассемблер остаётся в теле, но вызов перестаёт быть чёрным ящиком.
Что это даёт разработчику
Низкоуровневые крейты на Rust — привязки к системным вызовам, привязки к ядру, обвязки ассемблерных библиотек — смогут проверять аргументы при вызове и не полагаться на соглашение в договорённостях. Для кода, который сегодня собирается как «вызвал и надеялся на правильность», это переход к проверяемому.
Оригинал
RFC 3980 «Add extern "custom"», принят 5 августа 2026 года
Упоминаний: 1 · Просмотров: 2