В статье изложены основные предпосылки и этапы создания открытой библиотеки VivaCore, предназначенной для анализа кода и создания систем метапрограммирования. Проект VivaCore является развитием библиотеки OpenC++, в котором реализована поддержка специфических для Visual Studio 2005/2008 особенностей реализации языка Си и Си++.
Эта статья предназначена для разработчиков программного обеспечения, использующих или планирующих использовать библиотеку VivaCore в своих разработках. В статье отражена история создания библиотеки VivaCore и связанные с этой историей особенности реализации библиотеки.
Библиотека VivaCore представляет собой проект с открытым программным кодом, построенный на базе более старой библиотеки - OpenC++ (OpenCxx). Библиотека VivaCore реализована на языке Си++ и ориентирована для использования в среде Visual Studio 2005/2008.
Библиотека VivaCore была создана и продолжает развивается благодаря ООО "Системы программной верификации". На библиотеку анализа кода VivaCore имеется свидетельство о государственной регистрации программ для ЭВМ N 2008610480.
Вы можете свободно и бесплатно использовать библиотеку VivaCore. Единственным лицензионным ограничением является необходимость указать, что ваш проект разработан на основе библиотек OpenC++ и ее расширения - VivaCore.
Библиотека служит для разработки проектов, в которых осуществляется анализ исходного кода программ на языке Си и Си++. Примером могут служить системы расширения синтаксиса языка, системы редактирования и раскраски кода, статические анализаторы, системы построения документации по коду. Более подробно с библиотекой и возможных способах ее использования можно познакомиться в статье "Сущность библиотеки анализа кода VivaCore" [1].
Создание библиотеки VivaCore никогда специально не планировалось, но она возникла совершенно естественным образом в процессе работы над проектом Viva64. Продукт Viva64 (Вива64) это специализированный инструмент для проверки исходного кода программ на языке Си/Си++ на совместимость с 64-битными платформами [2]. Viva64 представляет собой классический статический анализатор кода, ориентированный на поддержку программистов в разработке 64-битных приложений.
Естественно, что существенной частью проекта Viva64 является система разбора исходного кода программ для дальнейшего анализа. В качестве библиотеки для разбора кода была выбрана библиотека OpenC++ (OpenCxx). На начальном этапе развития продукта Viva64 его внутренняя структура была такой, как показано на рисунке 1.
Рисунок 1. Как мы представляли себе структуру проекта Viva64.
Как видно из рисунка, существовал код проекта Viva64, который использовал внутри себя функциональность библиотеки OpenC++.
Но уже на ранних этапах реализации проекта стало ясно, что библиотека OpenC++ не реализует всю необходимую функциональность, содержит ряд досадных ошибок и не полностью поддерживаются ключевые слова, использующиеся в компиляторе Visual C++. Это послужило толчком к разработке новой функциональности и усовершенствованию библиотеки OpenC++.
Приведем несколько примеров усовершенствований. Была реализована поддержка языка Си (OpenC++ работает только с кодом на языке Си++). Реализовано вычисление значений литеральных констант. Были поддержаны специфичные ключевые слова __noop, __if_exists, __ptr32 и так далее.
В результате этих изменений было написано достаточно много кода, который по смыслу относился к библиотеке анализа кода, но был реализован в коде Viva64. Архитектура проекта Viva64 из-за этого стала смотреться, как показано на рисунке 2.
Рисунок 2. Реализация в Viva64 функциональности, относящейся к разбору Си/Си++ кода.
Стало очевидно, что ряд функциональности, связанной с разбором кода стоит изолировать в отдельном модуле. Так впервые и появилась библиотека VivaCore. Хотя ее код находился по-прежнему внутри проекта Viva64, она была логически выделена. Структура Viva64 приобрела вид, как показано на рисунке 3.
Рисунок 3. Принято решение выделить функциональность, относящуюся к разбору Си/Си++ кода, в отдельную библиотеку VivaCore.
Новая архитектура, где функциональность по разбору кода была выделена в отдельную подсистему VivaCore, нас полностью устраивала. Но мы решили сделать еще несколько шагов.
Мы решили дать возможность другим разработчикам воспользоваться новыми возможностями, которые были реализованы в рамках VivaCore. Обновить библиотеку OpenC++ до нужного уровня оказалось слишком сложной задачей. По этому, было принято решение просто выделить библиотеку VivaCore в отдельный проект (рисунок 4) и разместить ее на сайте компании "Системы программной верификации". Вы можете скачать исходные коды библиотеки VivaCore на странице.
Рисунок 4. Новая структура проекта Viva64.
Теперь библиотека VivaCore может использоваться не только в рамках проектов компании "СиПроВер", таких как Viva64, VivaMP, но и в проектах сторонних разработчиков (рисунок 5).
Рисунок 5. Открытая библиотека VivaCore для разработки проектов, взаимодействующих с исходным кодом на языке Си и Си++.
Помимо самой библиотеки VivaCore разработчики могут скачать демонстрационную программу VivaVisualCode [3]. В ней показаны некоторые возможности библиотеки VivaCore на примере графического отображения дерева разбора. Пример такого дерева показан на рисунке 6.
Рисунок 6. Дерево разбора для выражения "const bool is64bitInt = sizeof(int) == 8;".
Поскольку библиотека VivaCore развивалась как часть проекта Viva64 это нашло отражение в некоторых особенностях ее реализации. К таким особенностям можно отнести:
Надеюсь, эта статья поможет вам решить, следует ли использовать библиотеку VivaCore в своих проектах. Если вы не уверены - пишите. Мы постараемся предоставить дополнительную информацию и ответить на ваши вопросы.
0