Configuration tool

Configuration tool

FX-Manager- фреймворк для анализа и конфигурирования приложений, написанных на С/C++. Из-за большого разнообразия встраиваемых систем, приложения, разрабатываемые для них, должны обладать большой гибкостью и не содержать накладных расходов. Кроме того, необходима поддержка большого числа инструментов (компиляторов, компоновщиков, систем сборки). FX-Manager является реализацией универсальных аннотаций (или метаданных) для языка C/C++, которые (в отличие от Java и .NET) не поддерживаются в этих языках по умолчанию. Использование аннотаций упрощает написание модульных встраиваемых приложений, а также их анализ внешними инструментами.

Системные требования
Microsoft Windows Windows 7/8/10
.NET Framework 4+

  • Слабая связность. Использование внедрения зависимостей позволяет разрабатывать модульные приложения, в которых компоненты являются слабо связанными между собой, что упрощает разработку и поддержку.
  • Повторное использование кода. Поскольку компоненты слабо связаны, это позволяет использовать многие из них повторно в различных приложениях и продуктах, что особенно важно при разработке линейки продуктов.
  • Универсальная платформа. Внедрение зависимостей позволяет хранить код компонентов и код систем, который из этих компонентов собирается, отдельно друг от друга, что упрощает использование репозитория и не требует создания дополнительных ветвей для разработки нового функционала.
  • Легкость использования Метаданные, размещаемые в файлах исходных текстов, совместимы со стандартом языка C и C++, поэтому переход на фреймворк внедрения зависимостей может происходит постепенно, не требуется полностью перестраивать модель работы с исходными текстами.
  • Лицензия Фреймворк опубликован под open-source лицензией (BSD) допускающей модификацию и свободное использование. Исходные тексты доступны на нашей странице на github: https://github.com/Eremex/fx-mgr

FX-Manager предоставляет удобный способ организации проектов на С/С++. Файлы исходных текстов должны содержать специальные метаданные, которые описывают тот файл, в котором они содержатся. Впоследствии эти данные используются для анализа структуры приложения, соединения модулей, внедрения зависимостей в С/C++ и многого другого. Возможно также создание собственных метаданных и модулей для их обработки.



Для записи аннотаций используются методы, не противоречащие стандартам С/C++, поэтому модули, написанные таким образом остаются совместимыми со всеми компиляторами и могут быть собраны с помощью любой системы сборки.

В разделе загрузок доступны демо-проекты демонстрирующие функциональность FX-Manager. Приведены примеры реализации внедрения зависимостей, сборки аспектов, генерации опций и т.д. Текущая версия FX-Manager является консольным приложением, не требует установки и готова к использованию непосредственно после загрузки исполняемого файла.

FX-Manager реализован в виде приложения .NET, которое принимает список папок, содержащих исходные тексты, а в качестве вывода отдает список путей к файлам исходных текстов, которые нужно скомпилировать для сборки заданной конфигурации. Для сборки файлов может использоваться любая система сборки, так как фреймворк отдает только список путей к файлам, которые должны быть скомпилированы и не вызывает сам никаких инструментов вроде компиляторов или компоновщиков.
Исторически сложилось так, что поддержки метаданных в языках С/C++ предусмотрено не было, хотя существуют некроссплатформенные реализации концепции метаданных в различных компиляторах, например записи __attribute__ в компиляторах семейства GCC или __declspec в компиляторах Microsoft. Этот подход, хотя и решает некоторые проблемы, не позволяет программисту пользоваться собственными метаданными, подобные возможности появились только в управляемых языках Java, C# и т.д. Предусмотренный стандартом C/C++ метод расширения синтаксиса с помощью директив #pragma не подходит для записи метаданных по той причине, что неизвестные компилятору директивы вызывают предупреждения компилятора. FX-Manager использует специальный макрос, который содержит метаданные, их извлечение и анализ производятся до компиляции. Во время работы компилятора этот макрос определяется как пустой, поэтому метаданные исключаются препроцессором и не попадают к компилятору, из-за чего данный подход является совместимым со всеми инструментами. В то же время, при необходимости, макрос может быть развернут в #pragma, в том случае, если нужно сохранить метаданные в исходных текстах во время компиляции.
Помимо записи метаданных в исходных текстах используется также особый формат директив #include (возможность использования которых также является совместимой со стандартом), которые включают не файлы, а компоненты. Принадлежность файла к какому-либо компоненту также описывается через метаданные. Это позволяет разбивать программу на компоненты и не беспокоиться о корректной настройке параметров компилятора вроде путей к заголовочным файлам, кроме того, структура связей проекта перестает зависеть от структуры его директорий.
По своей сути, FX-Manager, как и любой IoC-контейнер, является компоновщиком, который выполняет функции, аналогичные компоновщику объектных файлов. Только в качестве связываемых сущностей выступают не функции и переменные, а более высокоуровневые объекты - компоненты. С компоновщиком его роднит и тот факт, что большинство применяемых IoC-контейнеров используются в языках Java/C# и предполагают динамическую компоновку компонентов во время работы программы, тогда как FX-Manager связывает компоненты статически во время компиляции.
Принцип его работы состоит в следующем: каждый файл в проекте содержит метаданные о компоненте, который этот файл реализует. Метаданные - это записанная в специальном формате декларативная информация, содержащаяся в исходных текстах, которая используется для описания самих исходных текстов. FX-Manager использует эту информацию для реализации внедрения зависимостей, автоматизации сборки и работы с опциями, однако в метаданных может содержаться любая (в том числе пользовательская) информация, для работы с ней можно использовать подключаемые к FX-Manager модули. Считается, что заголовочный файл описывает интерфейс компонента, а файлы исходных текстов - реализацию. Для записи метаданных используется широко распространенный формат JSON, текст на котором записывается внутри макроса с именем FX_METADATA. Некоторые записи интерпретируются FX-Manager особым образом, они описаны в разделе документации.
Пример метаданных:

FX_METADATA(({ my_metadata_entry: ["hello", "world"] }))

Использование компонентов происходит обычным для С образом: с помощью директивы препроцессора #include, которая в данном случае должна принимать не имя файла, а имя компонента:

#include FX_INTERFACE(MY_COMPONENT)

Аргумент include - макрос, который отображается на имя файла в результате внедрения зависимостей. В самом начале своей работы фреймворк анализирует метаднные в файлах, которые были ему переданы, и строит полный граф зависимостей между компонентами. После этого становится возможным сказать какие файлы нужно копилировать без необходимости дублирования этой информации в системе сборки.

Будьте в курсе новостей и спецпредложений

Авторизация
Чтобы продолжить покупку, пожалуйста, авторизируйтесь на сайте.
Забыли пароль?