All streams
Search
Write a publication
Pull to refresh
60
0
Смирнов Владимир @mapron

Программист C++

Send message
Мне сейчас довольно тяжело будет снова настраивать проекты под студию. У нас для всех проектов, и виндовых, и линуксовых используется система сборки QBS. Но я слежу за вашим проектом внимательно, и обязательно попробую еще раз, как только будет чуть посвободнее график (сейчас только срочняки в очереди).

Кстати, раз на то пошло — по результатам разных анализов стат.анализаторов (pvs, cppcheck, clang) — самая распространенная ошибка в моем проекте — неинициализированное поле (в том числе указатель). потенциальное *null лишь на втором месте.
Таких ошибок, как «эффект последней строки» или «эффект копипасты», почему-то ненаблюдалось. Обычно они очень быстро вылазят при первом же прогоне/тесте.

Ну еще довольно частые незначительные ошибки смешниваия int/size_t/uint32_t при доступе к контейнерам (при сериализации — нет).
Вот такая статистика =)
Да, ни один из стат анализаторов, к сожалению, не нашел ошибки, которая реально могла бы привести к порче/потере данных (потенциально, при каком-то дальнейшем изменении кода — да). Нет, не то что у нас прямо так идеально код пишут, я считаю, что то что было найдено- тоже полезно. Но больше с точки зрения прикладной диагностики принес нам valgrind (да, я читал ваши статьи про отличия динамического и статического анализа и понимаю что они мало где пересекаются).

Раз уж я рассказываю о своем опыте, опишу самый распространенный класс ошибок, найденный valgrind — выделяется память, сохраняется указатель, и потом передается через очень долгие и тернистые пути в другое место. Затем (МНОГОПОТОЧНОСТЬ!) в исходном месте он удаляется, и в новом естественном может иногда произойти доступ к уже удаленной памяти. Статический анализатор такое понять не в состоянии. После пары таких косяков я стал жестко переходить на shared+weak_ptr. помогло.

P.S. посмотрел прямо сейчас CLOC-ом, 320k sloc без 3rdparty, 40% — хедеры.
Да, наверное, Вы правы. У меня небольшой проект, около 150тысяч С++ кода, и когда я скачивал ваш анализатор год назад, он находил только предупреждения 3 уровня.
Блин, это монументальный труд. Такая объемная статья… И да, стало интересно, что там было с магией VHDL в этом моменте?
В этом модуле все было очень красиво и хорошо, за исключением одной маленькой детали – он не работал.
Да это автор в статье по ссылке утверждает. Я ничего такого не предполагал.
Интересно, прочел, задумался. Если OSI мертв уже два десятилетия, почему же когда я учился в вузе, нас дрюкали знать его наизусть? Специальность инженер-системотехник. И вроде как даже заставляли запоминать какие части TCP/IP стека в какой из уровней укладываются… Неужели это были ненужные знания? :D
Так по-моему это даже хорошо, что въедаются.
QBS. QML + js. Недостатки определённо у нее есть, но я еще не слышал, чтобы хоть кто-то назвал её «отвратительной».
Интересная идея. С учетом того, что у меня и так б/у 550D.
Качество фото — не профессиональное. И сравнивать цены на б/у мне кажется не очень корректным.
«И из них можно выбрать не больше двух»
И мне кажется, не получится выбрать сразу «качество изображения/управления» и «цена».
Иначе где профессиональные камеры за 10 тыщ рублей? (пусть и гигантские / или миниатюрные).

Ладно, виноват, выбрать все же можно, но увы, в очень ограниченных пределах.
По-моему, гораздо дешевле аудитору деньги отдать. Ведь нарушения с очень большой вероятностью будут. А если приедет налоговая, то будут штрафы. Так что выглядит байкой.
Я знаю, что стандартная. Я действовал в системе координат того преподавателя, который ставит гипотетические условия «а вот не все компиляторы поддерживают, что вы будете делать?»

Естественно в реальной практике о #ifndef M_PI не может быть речи.
Я думаю, тут лучше бы подошли Variable templates.
Сцена вторая мне уже не понравилась! Нефиг свои константы выдумывать!

Студент: Как вам такой вариант?
#include <math.h>
float CalcCircumference1(float d)
{
    return d * M_PI;
}


Преподаватель: Да, этот код может нормально откомпилироваться. А может и нет. M_PI не определена в стандартах C или C++… (overquote)
Студент: да нет проблем!

#define _USE_MATH_DEFINES
#include <math.h>
#ifndef M_PI  // support weird compilers
#define M_PI 3.14159265358979323846
#endif

float CalcCircumference1(float d)
{
    return d * float(M_PI);
}
Я думаю это из-за background-color объявлений в правилах. По идее, это должно решаться less/sass генераторами (так же как и размер шрифта).
Я согласен, у меня вроде ирония была.
Ага =) А windows98 — «слегка пропатченный DOS».
Ну что вы, ведь все знают, что вебкит сделал Ларс Нолл!
Подтверждаю. Так все и было. Помимо «С++» еще преподавали Delphi, который на самом деле «Pascal с классами и компонентами».

(Ангарск — АГТА)

в Иркутском госе на ПМ преподают C++, C#, Python, Java.
Ага, мне вот при прочтении этой фразы «Pi song» вспомнилась.
Увы, смотрите верии TeX и LaTeX. Уже)

Information

Rating
Does not participate
Location
Нижний Новгород, Нижегородская обл., Россия
Date of birth
Registered
Activity