« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Работаем с базами данных с помощью PL/SQL Developer 7.0.2

Описание функции DbiAddAlias

JavaScript - добавление строк в таблицу

Функция AccessResource

Декоратор. Decorator.

Общие Рекомендации Защиты (MySQL и SQL Web-интерфейс)

Управляем вложенными транзакциями

Представление данных

Действия, необходимые для создания меню

Справочник по ошибкам Oracle




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 142
Пользователей: 0

Статьи:: C/С++ :: OpenC++ :: Как появилась библиотека VivaCore



отправить ссылку другу версия для печати  Обсудить на форуме

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

В статье изложены основные предпосылки и этапы создания открытой библиотеки VivaCore, предназначенной для анализа кода и создания систем метапрограммирования. Проект VivaCore является развитием библиотеки OpenC++, в котором реализована поддержка специфических для Visual Studio 2005/2008 особенностей реализации языка Си и Си++.



Автор: Андрей Карпов
ООО "СиПроВер"

 

Введение

Эта статья предназначена для разработчиков программного обеспечения, использующих или планирующих использовать библиотеку VivaCore в своих разработках. В статье отражена история создания библиотеки VivaCore и связанные с этой историей особенности реализации библиотеки.

Библиотека VivaCore представляет собой проект с открытым программным кодом, построенный на базе более старой библиотеки – OpenC++ (OpenCxx). Библиотека VivaCore реализована на языке Си++ и ориентирована для использования в среде VisualStudio 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.

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

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

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

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

 


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

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

 


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

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

 

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

Мы решили дать возможность другим разработчикам воспользоваться новыми возможностями, которые были реализованы в рамках VivaCore. Обновить библиотеку OpenC++ до нужного уровня оказалось слишком сложной задачей. По этому, было принято решение просто выделить библиотеку VivaCore в отдельный проект (рисунок 4) и разместить ее на сайте компании «Системы программной верификации». Вы можете скачать исходные коды библиотеки VivaCore на странице http://www.viva64.com/ru/vivacore-library/download/.

 


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

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

 


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

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

 


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

 

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

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

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

 

Заключение

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

 

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

  1. Андрей Карпов, Евгений Рыжков. Сущность библиотеки анализа кода VivaCore. http://www.viva64.com/content/articles/code-analyzers/?lang=ru&content=code-analyzers&f=VivaCore_Library_%28rus%29.html
  2. Евгений Рыжков. Viva64: разработка 64-битных приложений. http://www.viva64.com/content/articles/code-analyzers/?lang=ru&content=code-analyzers&f=Viva64_-_working_up_of_64-bit_applications_%28rus%29.html
  3. Андрей Карпов. Описание VivaVisualCode. http://www.viva64.com/content/articles/code-analyzers/?f=VivaVisualCode_rus.html&lang=ru&content=code-analyzers



Рубрика: OpenC++




Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия