Как появилась библиотека VivaCore

Андрей Карпов
Статей: 375



Аннотация

В статье изложены основные предпосылки и этапы создания открытой библиотеки 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

Создание библиотеки VivaCore никогда специально не планировалось, но она возникла совершенно естественным образом в процессе работы над проектом Viva64. Продукт Viva64 (Вива64) это специализированный инструмент для проверки исходного кода программ на языке Си/Си++ на совместимость с 64-битными платформами [2]. Viva64 представляет собой классический статический анализатор кода, ориентированный на поддержку программистов в разработке 64-битных приложений.

Естественно, что существенной частью проекта Viva64 является система разбора исходного кода программ для дальнейшего анализа. В качестве библиотеки для разбора кода была выбрана библиотека OpenC++ (OpenCxx). На начальном этапе развития продукта Viva64 его внутренняя структура была такой, как показано на рисунке 1.

Рисунок 1. Как мы представляли себе структуру проекта Viva64.

Рисунок 1. Как мы представляли себе структуру проекта Viva64.

Как видно из рисунка, существовал код проекта Viva64, который использовал внутри себя функциональность библиотеки OpenC++.

Но уже на ранних этапах реализации проекта стало ясно, что библиотека OpenC++ не реализует всю необходимую функциональность, содержит ряд досадных ошибок и не полностью поддерживаются ключевые слова, использующиеся в компиляторе Visual C++. Это послужило толчком к разработке новой функциональности и усовершенствованию библиотеки OpenC++.

Приведем несколько примеров усовершенствований. Была реализована поддержка языка Си (OpenC++ работает только с кодом на языке Си++). Реализовано вычисление значений литеральных констант. Были поддержаны специфичные ключевые слова __noop, __if_exists, __ptr32 и так далее.

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

Рисунок 2. Реализация в Viva64 функциональности, относящейся к разбору Си/Си++ кода.

Рисунок 2. Реализация в Viva64 функциональности, относящейся к разбору Си/Си++ кода.

Стало очевидно, что ряд функциональности, связанной с разбором кода стоит изолировать в отдельном модуле. Так впервые и появилась библиотека VivaCore. Хотя ее код находился по-прежнему внутри проекта Viva64, она была логически выделена. Структура Viva64 приобрела вид, как показано на рисунке 3.

Рисунок 3. Принято решение выделить функциональность, относящуюся к разбору Си/Си++ кода, в отдельную библиотеку VivaCore.

Рисунок 3. Принято решение выделить функциональность, относящуюся к разбору Си/Си++ кода, в отдельную библиотеку VivaCore.

Новая архитектура, где функциональность по разбору кода была выделена в отдельную подсистему VivaCore, нас полностью устраивала. Но мы решили сделать еще несколько шагов.

Самостоятельная жизнь библиотеки VivaCore

Мы решили дать возможность другим разработчикам воспользоваться новыми возможностями, которые были реализованы в рамках VivaCore. Обновить библиотеку OpenC++ до нужного уровня оказалось слишком сложной задачей. По этому, было принято решение просто выделить библиотеку VivaCore в отдельный проект (рисунок 4) и разместить ее на сайте компании "Системы программной верификации". Вы можете скачать исходные коды библиотеки VivaCore на странице.

Рисунок 4. Новая структура проекта Viva64.

Рисунок 4. Новая структура проекта Viva64.

Теперь библиотека VivaCore может использоваться не только в рамках проектов компании "СиПроВер", таких как Viva64, VivaMP, но и в проектах сторонних разработчиков (рисунок 5).

Рисунок 5. Открытая библиотека VivaCore для разработки проектов, взаимодействующих с исходным кодом на языке Си и Си++.

Рисунок 5. Открытая библиотека VivaCore для разработки проектов, взаимодействующих с исходным кодом на языке Си и Си++.

Помимо самой библиотеки VivaCore разработчики могут скачать демонстрационную программу VivaVisualCode [3]. В ней показаны некоторые возможности библиотеки VivaCore на примере графического отображения дерева разбора. Пример такого дерева показан на рисунке 6.

Рисунок 6. Дерево разбора для выражения "const bool is64bitInt = sizeof(int) == 8;".

Рисунок 6. Дерево разбора для выражения "const bool is64bitInt = sizeof(int) == 8;".

Особенности библиотеки, связанные с историей ее развития

Поскольку библиотека VivaCore развивалась как часть проекта Viva64 это нашло отражение в некоторых особенностях ее реализации. К таким особенностям можно отнести:

  • Точность диагностики синтаксических ошибок в тексте программы принесена в жертву возможности обработать максимально много кода. В случае разбора кода с целью его статического анализа или иной обработки (например, раскраски) важнее обработать как больше текста, игнорируя встреченные ошибки. Для выявления синтаксических ошибок служит компилятор. Библиотека VivaCore предполагает, что код корректен. Если это не так, она старается игнорировать проблемное место и начать разбор кода со следующей корректной конструкции. Это полезно, если код не дописан или содержит новые неизвестные ключевые слова или слишком сложные конструкции на основе шаблонов. Впрочем, ничто не мешает пользователю вписать соответствующие обработчики некорректных входных данных.
  • В OpenC++ не реализован механизм сборки мусора (Garbage Collector). Библиотека VivaCore унаследовала эту недоделку. В результате при работе библиотека VivaCore постоянно выделяет память, не возвращая ее. Для анализатора Viva64 это некритично, поскольку он запускается отдельно для каждого файла. Если разработчику потребуется длительный режим работы с библиотекой, то ему потребуется реализовать отсутствующую функциональность.
  • Библиотека оптимизирована для работы на 64-битных системах.
  • Отсутствует целостная документация. Впрочем, она отсутствует и у OpenC++. Поэтому разработчики должны быть готовы потратить время на ее освоение. По всем возникающим вопросом обращайтесь к нам. Постараемся помочь.
  • Библиотека содержит ряд функций, которые непосредственно не участвуют в разборе кода, но необходимы для проектов Viva64 и VivaMP.

Заключение

Надеюсь, эта статья поможет вам решить, следует ли использовать библиотеку VivaCore в своих проектах. Если вы не уверены - пишите. Мы постараемся предоставить дополнительную информацию и ответить на ваши вопросы.

Библиографический список



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;

Андрей Карпов
Статей: 375


Найденные ошибки

Проверено проектов
363
Собрано ошибок
13 495

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;