metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

Вебинар: Трудности при интеграции SAST, как с ними справляться - 04.04

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

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

10 Авг 2008

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

a0027_VivaCore_history_ru/image1.png

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

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

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

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

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

a0027_VivaCore_history_ru/image2.png

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

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

a0027_VivaCore_history_ru/image3.png

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

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

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

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

a0027_VivaCore_history_ru/image4.png

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

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

a0027_VivaCore_history_ru/image5.png

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

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

a0027_VivaCore_history_ru/image6.png

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

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

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

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

Заключение

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

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

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form