Принят RFC об extern "custom" — функции с собственным соглашением о вызове

05.08.2026

Принято предложение добавить в язык способ объявить функцию с нестандартным, неизвестным компилятору соглашением о вызове. Речь о низкоуровневом коде, который сам отвечает за передачу аргументов и результата.

Зачем это нужно

Иногда функция должна принимать или возвращать значение не так, как принято в языке. Классический пример — соглашение, заданное в ассемблере или в машинном описании: там порядок аргументов может быть своим, а структуры передаваться иначе.

Сейчас такой код пишут через инлайн-ассемблер. Это работает, но означает, что вызов идёт мимо обычного механизма вызовов компилятора: проверки типов аргументов, правила владения, оптимизации по информации о вызове — всё это к функции не применяется.

Новое объявление позволяет описать такую функцию обычным синтаксисом, сохранив возможность вручную написать тело.

Смысл разделения

Ключевая идея — развести объявление и определение. Объявление говорит компилятору: «эта функция вызывается не так, как ты привык». Определение пишется инлайн-ассемблером, как раньше.

Благодаря этому место вызова получает правила языка — типы аргументов проверяются, а руководство компилятора о том, что функция имеет нестандартное соглашение, доходит до кода генерации. То есть ассемблер остаётся в теле, но вызов перестаёт быть чёрным ящиком.

Что это даёт разработчику

Низкоуровневые крейты на Rust — привязки к системным вызовам, привязки к ядру, обвязки ассемблерных библиотек — смогут проверять аргументы при вызове и не полагаться на соглашение в договорённостях. Для кода, который сегодня собирается как «вызвал и надеялся на правильность», это переход к проверяемому.

Оригинал

RFC 3980 «Add extern "custom"», принят 5 августа 2026 года

Упоминаний: 1 · Просмотров: 2