Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

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

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

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

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


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

>
>
Как появилась библиотека 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 в своих проектах. Если вы не уверены - пишите. Мы постараемся предоставить дополнительную информацию и ответить на ваши вопросы.

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

Популярные статьи по теме
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21 Ноя 2018

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

Краткое описание технологий, используемых в инструменте PVS-Studio, которые позволяют эффективно обнаруживать большое количество паттернов ошибок и потенциальных уязвимостей. Статья описывает реализа…
Зло живёт в функциях сравнения

Дата: 19 Май 2017

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

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
PVS-Studio для Java

Дата: 17 Янв 2019

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

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

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

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Как PVS-Studio оказался внимательнее, чем три с половиной программиста

Дата: 22 Окт 2018

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

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…
Эффект последней строки

Дата: 31 Май 2014

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

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
Как и почему статические анализаторы борются с ложными срабатываниями

Дата: 20 Мар 2017

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

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…
Любите статический анализ кода!

Дата: 16 Окт 2017

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

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14 Апр 2016

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

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

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

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…

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

Следующие комментарии

На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять