Category: наука

Category was added automatically. Read all entries about "наука".

list vs vector и немного про синтетические примеры

Недавно в ICQ развершулась довольно жаркая дискуссия про сравнение производительности и удобства списков и векторов для выполнения разных операций. Результат этой переписки и интересный листинг с разрешения программиста выкладываю сюда.

Собственно сама задача, за которую мы зацепились, формулировалась просто.
Имеется N объектов. M объектов из этого списка находится в состоянии "Активно" (остальные, соответственно, в состоянии "Неактивно"). Задача - выполнить определенные действия на всех активных объектах.

Можно предложить 2 основных варианта реализации вопроса:

Collapse )

Логи, часть четвертая

Логи, часть четвертая.

Последняя часть рассказа про логи - это технические аспекты реализации лог системы - что может быть удачным, а что - нет. И на какие грабли можно наступить в процессе реализации.

Основой для протоколирования в С/С++ может стать макрос, который на вход принимает следующие параметры:
- уровень протоколирования;
- метка сообщения;
- сам текст сообщения;
- имя файла и номер строки, опционально - имя функции;

Collapse )

Теория ошибок. Нестабильности третьего и четвертого рода.

Развивая тему анализа нестабильностей, которую я начал еще весной (http://ddima.livejournal.com/48573.html и http://ddima.livejournal.com/49288.html), оставалось рассмотреть нестабильности третьего рода - это собственные ошибки функции. То есть когда все наружные условия соблюдены, объект или модуль находятся в правильном состоянии, все переданные аргументы являются правильными, а результат работы функции все равно оказывается некорректным. Но как показала последующая практика, эти нестабильности полезно разделить еще на два независимых вида - это нестабильности, связанные с ошибками алгоритма, непроинициализированными переменными и т.п. (нестабльности третьего рода) и нестабильности, связанные с некорректной обработкой результатов функций (четвертого рода).

Collapse )

Теория ошибок. Нестабильности второго рода.

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

Collapse )

Cross-posted to blog.gamedeff.com

Теория ошибок. Нестабильности первого рода.

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

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

Collapse )

cross-posted to blog.gamedeff.com

У нас новый форум, ура

Теперь блоги #ff - это не только занимательные статьи, но еще и форум (спасибо, Шоданчег), на котором можно жечь и общаццо. По мере наполнения будем дробить на разделы и вводить жесткую политику модерирования, буагага.
Пользуясь случаем, хочу открыто призвать аffторов активнее писать всякое, а то мне стыдно постоянно выкладывать в блогах херню всякую про то, как я (ну или не всегда я) был молод и глуп. Впрочем, про теорию нестабильностей в приложениях буду все равно разворачивать чуть подробнее - после ближайшей командировки.

office

Рецепты отладки. Heap block modified after it was freed.

Еще на утренню закуску - история, о которой я упоминал в http://ddima.livejournal.com/37495.html, но не раскрыл тогда секрета дебаггинга.
Итак, какую нестандартную методику пришлось применить для поиска ошибки в коде.

Collapse )

Инструменты

В любом инструменте можно разочароваться, если использовать его не по назначению
Причем неважно, что это за инструмент – лопата, автомобиль, микроскоп или middleware.
Безуспешно пытаюсь (и, по-видимому, уже бесполезно), переубедить своих знакомых, что я не являюсь противником Stl, Boost, C# с XNA, аллокаций, смартпоинтеров и всего прочего. Мне просто очень грустно, когда другие используют инструмент не по назначению. Причем "не по назначению" в обоих направлениях - или забивать микроскопом гвозди или лопатой копать тоннель.