Пример внешней компоненты для **1С:Предприятие 8** по технологии **Native API** на языке **Rust**, изначально написанный [пользователем **medigor**](https://github.com/medigor/example-native-api-rs), мною форкнут, т.к. мне не понравилась структура проекта и не доставало имплементации объекта соединения с базой (для отправления внешних и др.).
* [Документция на ИТС](https://its.1c.ru/db/metod8dev#content:3221:hdoc)
* [Шаблон компоненты на C++ от Infactum](https://github.com/Infactum/addin-template)
>## Далее сказанное [изначальным автором](https://github.com/medigor/example-native-api-rs)
>## Преимущества по сравнению с компонентой на C++
>* Преимущества самого языка *Rust* и его экосистемы (более современный и безопасный язык, удобный пакетный менеджер)
>* Для Windows не требуется msvc (напомню, что организации должны иметь лицензию)
>* Собирается полностью с использованием свободных инструментов
>* На linux можно собирать для windows, соответственно удобно использовать в CI контейнеры linux
>
>## Обзор
>Компоненты по технологии *Native API* предполагают разработку на языке *C++*, т.к. компонента должна принимать и возвращать указатели на виртуальные классы *C++*. Компонента для windows должна собираться только компилятором msvc, а для linux и macos подойдет gcc/clang.
>Как известно, взаимодействие *Rust* с *C++* из коробки не поддерживается.
>
>Одним из вариантов было использовать [cxx](https://github.com/dtolnay/cxx) или подобные библиотеки. Это также бы потребовало использовать msvc.
>
>Другой вариант - вручную реализовать виртуальные таблицы, именно этот вариант и реализован.
На [godbolt](https://godbolt.org/z/KM3jaWMWs) можно посмотреть, как выглядят виртуальные таблицы для разных компиляторов. Виртуальные таблицы *msvc* отличаются от *gcc*/*clang*, при этом *gcc* и *clang* используют одинаковое ABI. Виртуальные таблицы реализованы в объеме достаточном для создания компоненты.