1
0
Библиотека для реализации внешней компоненты для 1С:Предприятие 8 по технологии Native API на языке rust
This repository has been archived on 2023-12-20. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
2023-08-03 15:39:03 +06:00
src implemented file logging 2023-08-03 15:39:03 +06:00
.gitignore init 2022-12-07 18:27:07 +03:00
Cargo.toml implemented file logging 2023-08-03 15:39:03 +06:00
LICENSE init 2022-12-07 18:27:07 +03:00
README.md Merge branch 'dev' 2023-08-03 10:36:01 +06:00
rustfmt.toml iter 2023-08-03 09:36:40 +06:00

Описание

Пример внешней компоненты для 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. Виртуальные таблицы реализованы в объеме достаточном для создания компоненты.