Аннотация:
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
ЕРА>Авторы: ЕРА> Analytic2007
ЕРА>Аннотация: ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
Если это то, что я думаю, то это — супер
Судя по тому, что Вы делаете с этим, — это именно то, что я думаю; хотя надо будет попробовать.
Одна из самых авторитетных попыток вроде был GCC-XML, но он не парсит тела функций, чем ставит крест на себе
Хотелось бы услышать видение по следующему вопросу. Является ли поддержка "продакш-кода" приоритетом №1? Т.е. грубо говоря, библиотека должна работать на всём, что может быть в продакш-кода хоть какой-то системы. Если где-то используется встроенный ассемблер — значит библиотека должна это обрабатывать. Если где-то используются компиляторо-зависимые стредства — значит библиотека должна это обрабатывать. И т.д.
И второй вопрос — какова ситуация с g++? Т.е. я вижу, что наиболее приоритетным является msvc (поддерживаются расширения языка msvc). Аналогичная поддержка g++ предвидится?
ЕРА>Авторы: ЕРА> Analytic2007
ЕРА>Аннотация: ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
Здравствуйте, 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:
Здравствуйте, 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()
Самое сложное преобразование, наверное, будет следующее.
Имеем:
Ну и зветная мечта — иметь возможность отслеживать зависимости по данным в коде:
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 - локальная переменная функции И её адрес не берётся -> не может меняться в другом потоке/обработчике сигнала
...
...
}
Хотелось бы услышать во-первых по поводу возможности реализации таких вещей, во-вторых трудоёмкость реализации.
Здравствуйте, 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()
ЕРА>Авторы: ЕРА> Analytic2007
ЕРА>Аннотация: ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
Препроцессор, лексический и грамматический анализаторы могут работать инкрементно?
Здравствуйте, Analytic2007, Вы писали:
M>>Препроцессор, лексический и грамматический анализаторы могут работать инкрементно?
A>Нет. А для чего это необходимо?
Например, если открыт мегабайтный файл с довольно сложным кодом и с использованием макросов, существующие интеллисенсы тормозят. Хотя, наверное, это проблема конкретных интеллисенсов — они должны по-хорошему работать в отдельном потоке. На даже если они не будут своим торможением мешать мне работать, они могут с запаздыванием реагировать на изменения кода. Добавил новый метод в класс, хочу, чтобы сразу он высвечивался в подсказках. И тд.
Инкрементный анализатор будет реагировать мгновенно.
А ещё, было бы очень удобно, если бы ошибки в программе подсвечивались корректно и без задержек. Благодаря этому можно значительно уменьшить количество долгих перекомпиляций, что будет экономить время разработчика.
Единственный, я думаю, недостаток инкрементного фронтенд компилятора — огромное пожирание памяти. Но при нынешних её объемах это не проблема.
Кстати, какой алгоритм восстановления после ошибок используется в библиотеке VivaCore?
M>А ещё, было бы очень удобно, если бы ошибки в программе подсвечивались корректно и без задержек. Благодаря этому можно значительно уменьшить количество долгих перекомпиляций, что будет экономить время разработчика.
В Си++ есть определенные трудности, не позволяющие получить полноценный инкрементальный анализ. Эти трудности связаны со структурой (грамматикой) языка.
M>Единственный, я думаю, недостаток инкрементного фронтенд компилятора — огромное пожирание памяти. Но при нынешних её объемах это не проблема.
M>Кстати, какой алгоритм восстановления после ошибок используется в библиотеке VivaCore?
Поскольку VivaCore предназначена прежде всего для разработки анализаторов кода вроде Viva64 и VivaMP, то важно на любой самый трудноразбираемый код строить дерево разбора. Поэтому те фрагменты программы, которые либо содержать ошибки, либо просто не удалось распознать игнорируются. Например, если внутри тела функции встретилась ошибка разбора, то просто это выражение не будет включено в дерево разбора.
Благодаря такому подходу удается разбираться очень сложный код вроде Loki и Boost.
ЕРА>Авторы: ЕРА> Analytic2007
ЕРА>Аннотация: ЕРА>Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
А где можно посмотреть на лицензию для этой библиотеки?
4) Каковы лицензионные условия использования библиотеки VivaCore?
Лицензия на библиотеку VivaCore позволяет свободно использовать, копировать, распространять и модифицировать ее в бинарном виде или в виде исходного кода, как для коммерческого, так и для некоммерческого использования без каких-либо отчислений авторам библиотеки. Необходимо лишь указать авторов исходных библиотек (OpenC++ и VivaCore).