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.
Искал хорошие ссылки на помянутые книги, нарыл ссылку, смотреть в конец топика.
Критика ожидается и приветствуется.

:)

13/10/05 02:50 (UTC)
Posted by [identity profile] uevgen.livejournal.com
...что и эпиграфы к своим произведениям пишу сам. :)
(deleted comment)

(no subject)

13/10/05 05:47 (UTC)
Posted by [identity profile] gdy.livejournal.com
"осталось нечто, что следует знать всем программистам на цэ-с-двумя-плюсами", boost, Boehm...
Есть другой путь — выбрать более или менее безопасное подмножество языка и не искать приключений.

(no subject)

14/10/05 11:44 (UTC)
Posted by [identity profile] gdy.livejournal.com
И что дальше?
Зависит от цели ;-) По моему скромному мнению, сложность С++ не окупается теми плюсами, которые даёт, скажем boost. Чем больше я использую нетривиальных вещей, тем больше они будет препятствовать людям, которые могут решать задачи в рамках этого проекта, но не провели кучу времени, читая Саттера, Александреску, Josuttis'а и Vandevoorde. Представь, например, отпадёт какой-нибудь хороший алгоритмист или специалист по ЦОС, которому просто не интересно изучать эти вещи, его радуют его реальные задачи. С++ получается языком для экспертов, но реальные-то проблемы решают эксперты в других областях. ;-)
Какой подход для тебя неприемлем, я не понял.

(no subject)

18/10/05 07:26 (UTC)
Posted by [identity profile] gdy.livejournal.com
У тебя плохие примеры — тестирование, обработка регистров символов, мультитрединг не требуют "продвинутых" возможностей языка. Потом, есть некоторая разница между, скажем, boost unit test framework и lambda library — использовать lambda library без хорошего понимания, что же она делает на самом деле, рискованно.

Моя позиция сводится к тому, что сложность языка ограничивает круг разработчиков и ограничивает набор компиляторов, которыми будет собираться твой проект. Не учитывать связанные с этим риски — не профессионально ;-) Из двух библиотек, при эквивалентной по сути функциональности, я скорее всего выберу ту, что не использует modern C++.

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

(no subject)

18/10/05 09:20 (UTC)
Posted by [identity profile] gdy.livejournal.com
Ну, вот, смотри, ткнул наугад — StaticAssert
...Will produce a compiler error with some compilers (for example Intel 8.1 or gcc 3.4), regardless of whether the template is ever instantiated. A workaround in cases like this is...

Кто ещё достаточно качественно сшил строки и потоки ввода-вывода, форматирование строк и case-insensitive работу со строками?
Как правило, всё это имеет мало отношения к делающему что-то полезное прикладному коду, и только добавит зависимость от boost, не дав ничего для той части проекта, которая собственно, и представляет ценность для заказчика. Но от этого-то хоть можно относительно легко отказаться. А вот если взять и систематически использовать lambda library по всему проекту, то избавиться от неё будет непросто. А представь, заказчику понадобилось собрать проект каким-нибудь сановским компилятором, и что делать?

(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 — меньше специалистов и больше шансов, что придётся собирать проект, скажем, сановским компилятором.

(no subject)

18/10/05 07:54 (UTC)
Posted by [identity profile] gdy.livejournal.com
Знать "нетривиальное" нужно с одной единственной целью: вспомнить о нём, когда ОНО понадобится.
...где их можно и нужно использовать
Мне кажется, что ты считаешь, что для чего-то реально нужного modern C++ необходим. Я таких примеров сейчас не могу придумать или вспомнить.

(no subject)

18/10/05 09:01 (UTC)
Posted by [identity profile] gdy.livejournal.com
а глубокое знание теории. В любом вопросе.
Вот тут-то и возникает желание ограничить круг вопросов ;-)))

(no subject)

20/10/05 10:17 (UTC)
Posted by [identity profile] gdy.livejournal.com
Стоит ли становиться профессионалом в modern C++ и template (meta)programming?

(no subject)

21/10/05 06:18 (UTC)
Posted by [identity profile] gdy.livejournal.com
Structure and Interpretation of Computer Programs — приятная книга, мне очень жаль, что я её не прочитал лет девять назад (пролог тогда на глаза попался, а вот лисп - нет).

(no subject)

13/10/05 23:58 (UTC)
Posted by [identity profile] moxhatblu.livejournal.com
Ещё Александреску стОит почитать.

(no subject)

14/10/05 08:24 (UTC)
Posted by [identity profile] moxhatblu.livejournal.com
Да, и сообщение из форума лучше сохранить, хотя бы в этом комменте. Бо кто знает сколько оно там проживёт :-)
Вить, посчитаешь излишним - удаляй это сообщение без лишних вопросов :-)

---
* Jeff Alger - "C++ for real programmers"
* Stanley Lippman - "Essential C++"
* Herb Sutter - "Exceptional C++" & "More Exceptional C++" & "Exceptional C++ Style"
* Scott Meyers - "Effective C++" & "More Effective C++" & "Effective STL"
* James Coplien "Multi-Paradigm Design For C++"
* Josuttis "C++ Standard Library"
* Josuttis, Vandevoorde "C++ Templates. The Complete Guide"
* Александреску "Modern C++ Design"
* Gamma, Helm, Johnson, Vlissides "Design patterns: elements of reusable object-oriented software"
* Martin Fowler "Analysis patterns", "Refactoring..."
* Charnecki, Eisenecker "Generative Programming"
* Александреску "C++ coding standart. 101 guidlines,tips" - Без прочтения предыдущих лучше не читать, т.к. постоянно ссылается на них.
---

(no subject)

21/10/05 06:18 (UTC)
Posted by [identity profile] gdy.livejournal.com
'C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond' by David Abrahams, Aleksey Gurtovoy