Rust public abi для иностранного языка ffi

Я пишу язык и хочу, чтобы он был двоично совместим с Rust, C++ и некоторыми другими языками. Проблема в том, что я не смог найти информацию о ржавчине abi (искажение имен, макеты структур, соглашения о вызовах и т. д.).

Я где-то слышал, что у Rust нет стабильной публичной версии (пока). Но мне не удалось найти источник этого утверждения. Я хочу строго избегать каби, если это возможно.

источник: github.com/rust-lang/rfcs/issues/600#issuecomment-526033825

true equals false 06.04.2024 19:21

Вам нужен ABI, совместимый с C++ (и некоторыми другими языками), но вы хотите строго избегать C ABI? Какой единственный ABI, по вашему мнению, будет поддерживаться всеми этими языками/компиляторами, если не фактический лингва-франка ABI C?

eggyal 06.04.2024 19:37

Авторитетный источник Rust структуры данных, которая (в основном) не определена публично: doc.rust-lang.org/nightly/reference/…. К сожалению, я не могу найти подобного утверждения о соглашении о вызовах Rust, но уверяю вас, что оно действительно также не определено публично.

eggyal 06.04.2024 19:44

Я не представляю себе ни одного аби. Я хочу, чтобы мой язык адаптировался на основе запрошенного языка ffi. Итак, у меня есть синтаксис extern "", который заставляет функцию использовать заданный abi. Но поскольку истинная связь равна ложной, в настоящее время это кажется невозможным, поскольку у ржавчины нет публичного аби, которое я мог бы поддержать.

RedCrafter LP 06.04.2024 19:46

В Rust есть поддержка других ABI, включая C ABI. Продолжается работа над более полнофункциональным ABI, построенным на базе C ABI: crabi. Существуют также сторонние ящики, которые обеспечивают более полную стабильность ABI поверх C ABI.

eggyal 06.04.2024 19:48
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
5
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У Rust действительно нет стабильного ABI, поэтому вы не можете быть с ним совместимы.

Источники:

https://doc.rust-lang.org/stable/reference/type-layout.html#the-rust-representation, о макете шрифта:

Rust Представительство

...

Никаких других гарантий расположения данных, обеспечиваемых этим представлением, нет.

https://github.com/rust-lang/rfcs/issues/600#issuecomment-526033825

В настоящее время нет планов по внедрению чего-либо, напоминающего оптовый стабильный ABI, ни для каких-то новых repr(v1), ни для repr(Rust), и внутри языковой команды этому есть активное противодействие. Таким образом, я собираюсь закрыть этот вопрос о супершироком списке желаний.

На самом деле искажение имени определено, хотя и не для старой, используемой сейчас по умолчанию версии, а для v0 (можно использовать с -C symbol-mangling-version=v0). Об этом смотрите здесь.

Предпринимаются попытки создать ABI «стабильного, но более высокого уровня, чем C ABI», который в настоящее время называется crabi, и другие языки, возможно, также интегрируют его. Однако на данный момент это даже не реализовано экспериментально даже в Rust, так что впереди долгий путь, даже если этот эксперимент увенчается успехом.

Другие вопросы по теме