549просмотров
29.8%от подписчиков
7 октября 2025 г.
Score: 604
Плагины на C# без рантайма: NativeAOT-экспорт и вызов из Rust/Python Привет, Хабр!
Наткнулись на задачу: нужен плагин на C#, который можно грузить как обычную C-библиотеку без CLR и JIT, а вызывать из Rust и Python. Без обвязок, без CoreCLR-хостинга и прочего. Чистый C ABI, нормальные строки, предсказуемые структуры, обработка ошибок и нулевой JIT-прогрев. Это как раз случай для NativeAOT: компилируем библиотеку в нативный .dll/.so/.dylib, экспортируем функции через [UnmanagedCallersOnly], а дальше живём как с любой C-библиотекой. Нюансов хватает: что экспортируется и как назвать символ, как договориться по ABI, что делать со строками UTF-8, как возвращать ошибку, как освобождать память снаружи, почему исключения нельзя проталкивать за границу, и в каком месте «cdecl» реально что-то значит. Ознакомиться с примером NativeAOT https://habr.com/ru/companies/otus/articles/950462/?utm_campaign=950462&utm_source=habrahabr&utm_medium=rss