src | ||
.gitignore | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
rustfmt.toml |
Описание
Пример внешней компоненты для 1С:Предприятие 8 по технологии Native API на языке Rust, изначально написанный пользователем medigor, мною форкнут, т.к. мне не понравилась структура проекта и не доставало имплементации объекта соединения с базой (для отправления внешних и др.).
Размер .dll
Релизная сборка с оптимизациями на размер
Использование библиотеки ureq |
Без сжатия | Сжатие с помощью UPX |
---|---|---|
Нет | 243200 B | 115200 B |
Да | 1379328 B | 738816 B |
Поддержка платформ
- Windows x64 - msvc работает, gnu не тестировал
- Windows x32 - msvc работает, gnu не тестировал
- Linux x64 - не тестировал.
- Linux x32 - не тестировал.
- MacOS - не тестировал.
Другие ресурсы
Далее сказанное изначальным автором
Преимущества по сравнению с компонентой на C++
- Преимущества самого языка Rust и его экосистемы (более современный и безопасный язык, удобный пакетный менеджер)
- Для Windows не требуется msvc (напомню, что организации должны иметь лицензию)
- Собирается полностью с использованием свободных инструментов
- На linux можно собирать для windows, соответственно удобно использовать в CI контейнеры linux
Обзор
Компоненты по технологии Native API предполагают разработку на языке C++, т.к. компонента должна принимать и возвращать указатели на виртуальные классы C++. Компонента для windows должна собираться только компилятором msvc, а для linux и macos подойдет gcc/clang. Как известно, взаимодействие Rust с C++ из коробки не поддерживается.
Одним из вариантов было использовать cxx или подобные библиотеки. Это также бы потребовало использовать msvc.
Другой вариант - вручную реализовать виртуальные таблицы, именно этот вариант и реализован. На godbolt можно посмотреть, как выглядят виртуальные таблицы для разных компиляторов. Виртуальные таблицы msvc отличаются от gcc/clang, при этом gcc и clang используют одинаковое ABI. Виртуальные таблицы реализованы в объеме достаточном для создания компоненты.