singalen: (Default)
[personal profile] singalen
(устаревшая до рождения микро-статья памяти языка C++, черновые наброски)
Выучили его всего, попрактиковались. Знаете, какова структура объекта в памяти при виртуальном множественном наследовании, как бросается out_of_memory, зачем и когда нужен виртуальный деструктор, как итерировать iostream и инстанцировать binder_2nd, и используете auto_ptr всегда, кроме случаев, когда знаете, что это повредит программе и почему.
Что дальше?
В смысле C++.
Помимо платформенно-зависисмых библиотек (это с большой вероятностью будут MSVC/WinAPI, библиотека POSIX, or whatever), остались вещи, которые нужно знать, осталось нечто, что следует знать всем программистам на цэ-с-двумя-плюсами.
  • Boost - уникальная попытка сделать из стандартной библиотеки языка нечто целостное, и вообще сделать C++ лучше. An absolute must know. Содержит мощную кроссплатформенную библиотеку всего, что должно бы быть в стандартной, и много чего ещё, чего, может, там быть и не должно. Сам намерен его внимательно изучать и дополнять этот пост по мере изучения.
  • Профайлинг использования CPU, coverage profiling, профайлинг использования (и утекания) прочих ресурсов. Популярные инструменты для этого - BoundsChecker и ко под Windows, ещё?
  • Автоматическое управление памятью по методу Hans-а Boehm-а.
  • Юнит тестирование, в частности, наиболее популярные инструменты - CppUnit и Boost-овский boost_test.
Для нового взгляда на мир сквозь призму C++ рекомендуются книги: Андрей Александреску, "Modern C++ Design".
Jeff Alger,C++ for Real Programmers.
Искал хорошие ссылки на помянутые книги, нарыл ссылку, смотреть в конец топика.
Критика ожидается и приветствуется.

(no subject)

20/10/05 10:13 (UTC)
Posted by [identity profile] gdy.livejournal.com
Тогда надо определиться, из какой области проект ;-)
Вот, например, для проекта, который представляет собой кучу математики, работающей с топологией микросхем (преобразование, моделирование процесса фотолитографии) и с изображениями с электронного микроскопа, важны люди, которые могут писать нетривиальные вещи, и совершенно не важен boost.
Если же в проекте надо кодить много бизнес-логики, то, наверное, да, boost мог бы облегчить жизнь. Но в таких проектах должны быть серьёзные требования к производительности, чтобы их стали писать на С++.

Lambda library была призвана олицетворять все библиотеки из boost, которые наровят расползтись по всему проекту.

(no subject)

21/10/05 06:58 (UTC)
Posted by [identity profile] gdy.livejournal.com
Да нет, вроде, противоречий.
Если кто-то пытается использовать modern C++ в коллективе, где не все хорошо знают, что это такое, то он создаёт не только технический риск, связанные с переносимостью кода, но и риск, возникающий от того, что коллеги не вполне понимают, как такой код работает.
Если уж мы используем что-то такое в проекте, то возникает желание локализовать это в одном месте. Например, мы можем счастливо использовать Boost.Program_options, и при возникновении необходимости достаточно легко отказаться от неё. Есть другой тип библиотек, которые решают повсеместно возникающие задачи, типа смартпойнтеров или lambda library. Использовав такого рода библиотеку в одном маленьком модуле, ты получишь маленькую выгоду, по сути, они расширяют язык и предполагают повсеместное единообразное использование. Решение повсеместно в коде использовать такой "расширенный" С++ труднообратимо.

Кстати, то, что ты помянул - тоже бизнес-логика. Видимо, имелись в виду информсистемы, работающие в основном с int, string и double/Money. Не понял, что — "тоже бизнес-логика"?

Наукоёмкость проекта обостряет риски, связанные с boost — меньше специалистов и больше шансов, что придётся собирать проект, скажем, сановским компилятором.

March 2023

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 

Page Summary

Page generated 14/7/25 20:15

Expand Cut Tags

No cut tags