Сущность библиотеки анализа кода VivaCore
От: Аноним  
Дата: 17.07.08 17:32
Оценка: 360 (4)
Статья:
Сущность библиотеки анализа кода VivaCore
Автор(ы): Евгений Рыжков, Андрей Карпов
Дата: 17.07.2008
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.


Авторы:
Analytic2007

Аннотация:
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
Re: Сущность библиотеки анализа кода VivaCore
От: remark Россия http://www.1024cores.net/
Дата: 01.12.08 17:59
Оценка:
Здравствуйте, Евгений Рыжков, Андрей Карпов, Вы писали:

ЕРА>Статья:

ЕРА>Сущность библиотеки анализа кода VivaCore
Автор(ы): Евгений Рыжков, Андрей Карпов
Дата: 17.07.2008
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.


ЕРА>Авторы:

ЕРА> Analytic2007

ЕРА>Аннотация:

ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.

Если это то, что я думаю, то это — супер
Судя по тому, что Вы делаете с этим, — это именно то, что я думаю; хотя надо будет попробовать.

Одна из самых авторитетных попыток вроде был GCC-XML, но он не парсит тела функций, чем ставит крест на себе

Хотелось бы услышать видение по следующему вопросу. Является ли поддержка "продакш-кода" приоритетом №1? Т.е. грубо говоря, библиотека должна работать на всём, что может быть в продакш-кода хоть какой-то системы. Если где-то используется встроенный ассемблер — значит библиотека должна это обрабатывать. Если где-то используются компиляторо-зависимые стредства — значит библиотека должна это обрабатывать. И т.д.

И второй вопрос — какова ситуация с g++? Т.е. я вижу, что наиболее приоритетным является msvc (поддерживаются расширения языка msvc). Аналогичная поддержка g++ предвидится?



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Сущность библиотеки анализа кода VivaCore
От: crazibill  
Дата: 01.12.08 20:28
Оценка:
Здравствуйте, Евгений Рыжков, Андрей Карпов, Вы писали:

ЕРА>Статья:

ЕРА>Сущность библиотеки анализа кода VivaCore
Автор(ы): Евгений Рыжков, Андрей Карпов
Дата: 17.07.2008
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.


ЕРА>Авторы:

ЕРА> Analytic2007

ЕРА>Аннотация:

ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.

А существует ли чтолибо подобное для Delphi ?
Re[2]: Сущность библиотеки анализа кода VivaCore
От: remark Россия http://www.1024cores.net/
Дата: 01.12.08 22:36
Оценка:
Здравствуйте, remark, Вы писали:

R>Если это то, что я думаю, то это — супер

R>Судя по тому, что Вы делаете с этим, — это именно то, что я думаю; хотя надо будет попробовать.

R>Одна из самых авторитетных попыток вроде был GCC-XML, но он не парсит тела функций, чем ставит крест на себе


R>Хотелось бы услышать видение по следующему вопросу. Является ли поддержка "продакш-кода" приоритетом №1? Т.е. грубо говоря, библиотека должна работать на всём, что может быть в продакш-кода хоть какой-то системы. Если где-то используется встроенный ассемблер — значит библиотека должна это обрабатывать. Если где-то используются компиляторо-зависимые стредства — значит библиотека должна это обрабатывать. И т.д.


R>И второй вопрос — какова ситуация с g++? Т.е. я вижу, что наиболее приоритетным является msvc (поддерживаются расширения языка msvc). Аналогичная поддержка g++ предвидится?


Я думаю над использованием VivaCore в моей библиотеке Relacy Race Detector:
http://groups.google.com/group/relacy
Это библиотека для юнит-тестирования многопоточного кода. В данный момент она требует некоторых изменений в исходном коде, которые необходимо производить вручную:
1. Типы примитивных (int, unsigned, void*) переменных заменить с T на rl::var<T>
2. Добавить в вызовы некоторых функций дополнительный параметр rl::debug_info(__FILE__, __LINE__, __FUNCTION__)
3. Подменить некоторые функции pthread_mutex_create() -> rl::pthread_mutex_create()

Это возможно сделать с помощью VivaCore? (ну и потом, естественно, сохранить обратно в .cpp файл)
Так же у пользователей уже возник вопрос относительно того, можно ли сделать "атрибуты" с помощью VivaCore:
int var; //[[local]]

?


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Сущность библиотеки анализа кода VivaCore
От: remark Россия http://www.1024cores.net/
Дата: 01.12.08 22:53
Оценка:
Здравствуйте, remark, Вы писали:

R>Я думаю над использованием VivaCore в моей библиотеке Relacy Race Detector:

R>http://groups.google.com/group/relacy
R>Это библиотека для юнит-тестирования многопоточного кода. В данный момент она требует некоторых изменений в исходном коде, которые необходимо производить вручную:
R>1. Типы примитивных (int, unsigned, void*) переменных заменить с T на rl::var<T>
R>2. Добавить в вызовы некоторых функций дополнительный параметр rl::debug_info(__FILE__, __LINE__, __FUNCTION__)
R>3. Подменить некоторые функции pthread_mutex_create() -> rl::pthread_mutex_create()

Самое сложное преобразование, наверное, будет следующее.
Имеем:
int i;
...
i += f() + 15;

должны получить:
rl::var<int> i;
...
i.asign_add(f() + 15, rl::debug_info(__FILE__, __LINE__, __FUNCTION__));



Ну и зветная мечта — иметь возможность отслеживать зависимости по данным в коде:
rl::var<node*> node = queue.pop();
rl::var<void*> data = node->data;
// значение data зависит по данным от значения node

Примеров зависимостей может быть много. Например ещё: y = 10 + x; y зависит от x.


А вот ещё вспомнил. Определение локальных переменных функции:
void f()
{
  ...
  for (int i = 0; i != 10; ++i) // i - локальная переменная функции И её адрес не берётся -> не может меняться в другом потоке/обработчике сигнала
    ...
  ...
}


Хотелось бы услышать во-первых по поводу возможности реализации таких вещей, во-вторых трудоёмкость реализации.

Спасибо.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Сущность библиотеки анализа кода VivaCore
От: rea Россия www.viva64.com
Дата: 02.12.08 06:32
Оценка:
Здравствуйте, remark, Вы писали:

R>В данный момент она требует некоторых изменений в исходном коде, которые необходимо производить вручную:

R>1. Типы примитивных (int, unsigned, void*) переменных заменить с T на rl::var<T>
R>2. Добавить в вызовы некоторых функций дополнительный параметр rl::debug_info(__FILE__, __LINE__, __FUNCTION__)
R>3. Подменить некоторые функции pthread_mutex_create() -> rl::pthread_mutex_create()

Рассмотрению подобных вопросов как раз посвещена наша статья Построение систем автоматического протоколирования Си/Си++ кода.

Дальнейшее общение по этим вопросам перенесено в личную почту.
Евгений Рыжков
ООО "СиПроВер"
Re: Сущность библиотеки анализа кода VivaCore
От: maggot  
Дата: 02.12.08 13:30
Оценка:
Здравствуйте, Евгений Рыжков, Андрей Карпов, Вы писали:

ЕРА>Статья:

ЕРА>Сущность библиотеки анализа кода VivaCore
Автор(ы): Евгений Рыжков, Андрей Карпов
Дата: 17.07.2008
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.


ЕРА>Авторы:

ЕРА> Analytic2007

ЕРА>Аннотация:

ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.

Препроцессор, лексический и грамматический анализаторы могут работать инкрементно?
Re[2]: Сущность библиотеки анализа кода VivaCore
От: Analytic2007 Россия https://www.viva64.com/ru/pvs-studio/
Дата: 03.12.08 08:04
Оценка:
M>Препроцессор, лексический и грамматический анализаторы могут работать инкрементно?

Нет. А для чего это необходимо?
Re[3]: Сущность библиотеки анализа кода VivaCore
От: maggot  
Дата: 04.12.08 15:46
Оценка:
Здравствуйте, Analytic2007, Вы писали:

M>>Препроцессор, лексический и грамматический анализаторы могут работать инкрементно?


A>Нет. А для чего это необходимо?

Например, если открыт мегабайтный файл с довольно сложным кодом и с использованием макросов, существующие интеллисенсы тормозят. Хотя, наверное, это проблема конкретных интеллисенсов — они должны по-хорошему работать в отдельном потоке. На даже если они не будут своим торможением мешать мне работать, они могут с запаздыванием реагировать на изменения кода. Добавил новый метод в класс, хочу, чтобы сразу он высвечивался в подсказках. И тд.

Инкрементный анализатор будет реагировать мгновенно.

А ещё, было бы очень удобно, если бы ошибки в программе подсвечивались корректно и без задержек. Благодаря этому можно значительно уменьшить количество долгих перекомпиляций, что будет экономить время разработчика.

Единственный, я думаю, недостаток инкрементного фронтенд компилятора — огромное пожирание памяти. Но при нынешних её объемах это не проблема.

Кстати, какой алгоритм восстановления после ошибок используется в библиотеке VivaCore?
Re[4]: Сущность библиотеки анализа кода VivaCore
От: rea Россия www.viva64.com
Дата: 08.12.08 18:40
Оценка:
Здравствуйте, maggot, Вы писали:


M>А ещё, было бы очень удобно, если бы ошибки в программе подсвечивались корректно и без задержек. Благодаря этому можно значительно уменьшить количество долгих перекомпиляций, что будет экономить время разработчика.


В Си++ есть определенные трудности, не позволяющие получить полноценный инкрементальный анализ. Эти трудности связаны со структурой (грамматикой) языка.

M>Единственный, я думаю, недостаток инкрементного фронтенд компилятора — огромное пожирание памяти. Но при нынешних её объемах это не проблема.


M>Кстати, какой алгоритм восстановления после ошибок используется в библиотеке VivaCore?


Поскольку VivaCore предназначена прежде всего для разработки анализаторов кода вроде Viva64 и VivaMP, то важно на любой самый трудноразбираемый код строить дерево разбора. Поэтому те фрагменты программы, которые либо содержать ошибки, либо просто не удалось распознать игнорируются. Например, если внутри тела функции встретилась ошибка разбора, то просто это выражение не будет включено в дерево разбора.

Благодаря такому подходу удается разбираться очень сложный код вроде Loki и Boost.

Евгений Рыжков
ООО "СиПроВер"
Евгений Рыжков
ООО "СиПроВер"
Re: Сущность библиотеки анализа кода VivaCore
От: Аноним  
Дата: 08.12.08 20:02
Оценка:
Здравствуйте, Евгений Рыжков, Андрей Карпов, Вы писали:

ЕРА>Статья:

ЕРА>Сущность библиотеки анализа кода VivaCore
Автор(ы): Евгений Рыжков, Андрей Карпов
Дата: 17.07.2008
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.


ЕРА>Авторы:

ЕРА> Analytic2007

ЕРА>Аннотация:

ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.

А где можно посмотреть на лицензию для этой библиотеки?
Re[2]: Сущность библиотеки анализа кода VivaCore
От: Евгений Рыжков Россия www.viva64.com
Дата: 08.12.08 20:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А где можно посмотреть на лицензию для этой библиотеки?


Процитирую FAQ:

4) Каковы лицензионные условия использования библиотеки VivaCore?

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