From d4b3b18ac739e2a433b2c2ff8a1222dc158b7d2d Mon Sep 17 00:00:00 2001 From: medigor Date: Wed, 7 Dec 2022 18:48:47 +0300 Subject: [PATCH] edit README.md --- README.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index f5f28d2..fde3613 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ # example-native-api-rs -Пример внешней компоненты для **1С:Предприятие 8** по технологии **Native API** на языке rust +Пример внешней компоненты для **1С:Предприятие 8** по технологии **Native API** на языке **Rust** [Документция на ИТС](https://its.1c.ru/db/metod8dev#content:3221:hdoc) | -[Шаблон компоненты на c++ от Infactum](https://github.com/Infactum/addin-template) +[Шаблон компоненты на C++ от Infactum](https://github.com/Infactum/addin-template) -## Преимущества по сравнению с компонентой на c++ -* Преимущества самого языка rust и его экосистемы -* Для Windows не требуется msvc, собирается полностью с использованием свободных инструментов +## Преимущества по сравнению с компонентой на C++ +* Преимущества самого языка *Rust* и его экосистемы (более современный и безопасный язык, удобный пакетный менеджер) +* Для Windows не требуется msvc (напомню, что организации должны иметь лицензию) +* Собирается полностью с использованием свободных инструментов +* На linux можно собирать для windows, соответственно удобно использовать в CI контейнеры linux ## Обзор -Компоненты по технологии Native API предполагают разработку на языке с++, т.к. компонента должна принимать и возвращать указатели на виртуальные классы c++. Компонента для windows должна собираться только компилятором msvc, а для linux и macos подойдет gcc/clang. -Как известно, взаимодействие *rust* с *c++* из коробки не поддерживается. +Компоненты по технологии *Native API* предполагают разработку на языке *C++*, т.к. компонента должна принимать и возвращать указатели на виртуальные классы *C++*. Компонента для windows должна собираться только компилятором msvc, а для linux и macos подойдет gcc/clang. +Как известно, взаимодействие *Rust* с *C++* из коробки не поддерживается. Одним из вариантов было использовать [cxx](https://github.com/dtolnay/cxx) или подобные библиотеки. Это также бы потребовало использовать msvc. @@ -18,10 +20,10 @@ На [godbolt](https://godbolt.org/z/KM3jaWMWs) можно посмотреть, как выглядят виртуальные таблицы для разных компиляторов. Виртуальные таблицы *msvc* отличаются от *gcc*/*clang*, при этом *gcc* и *clang* используют одинаковое ABI. Виртуальные таблицы реализованы в объеме достаточном для создания компоненты. ## Описание файлов -* src/lib.rs - корень крейта, здесь располагаются экспортные функции GetClassNames и др. -* src/ffi.rs - в этом модуле всё что связано с взаимодействием, также здесь находится весь небезопасный код. -* src/addin1.rs - здесь непосредственно реализация компоненты, причем весь код безопасный. -* conf1c - конфигурация 1С (выгрузка из конфигуратора 8.3.22), минимальный тестовый код. +* [src/lib.rs](src/lib.rs) - корень крейта, здесь располагаются экспортные функции GetClassNames и др. +* [src/ffi.rs](src/ffi.rs) - в этом модуле всё что связано с взаимодействием, также здесь находится весь небезопасный код. +* [src/addin1.rs](src/addin1.rs) - здесь непосредственно реализация компоненты, причем весь код безопасный. +* [conf1c](conf1c) - конфигурация 1С (выгрузка из конфигуратора 8.3.22), минимальный тестовый код. ## Разработка Я использую для разработки VS Code. Отлаживать и тестировать компоненту удобнее всего в файловой базе. Чтобы при нажатии F5 сразу запускалась 1С, нужно поместить в файл *.vscode/launch.json* примерно такой код: