Давно я не писал сюда ничего кроме кода, да мелких мыслей-одиночек. А это - неправильно таки.
Начнем с того, что писать практически нечего. Да, тут несколько недель у меня тусили Трин, Мозг, Тами, Орл и Степа. Но право-дело писать об этом я не хочу ровно ничего, ибо пересказывать много, да и неупомню уже. Но лулзов было много. А писать отрывками не хочется.
Помнится, пару недель назад, я посмотрел на резюме автора centericq и был неприятно для себя удивлен. Разница в возрасте небольшая, а вот достижений больше. (Да-да, я, сцуко, завистливый!) Вот и задумался в очередной раз о необходимости дальнейшего просвещения. Не, в аспирантуру я не хочу идти - как ни крути, а защита диплома наложила свой неприятный отпечаток. И да, я знаю, что это глупо.
А думать я начал ни о чем ином, как о самообразовании путем чтения умных книг. Только вот незадача: читать их особо некогда, ибо дома у мя и так занятий полно, а на работе - тем более. Есть вариант - метро, но для этого они должны быть бумажными, а это дорого. Таскать с собой ноут совсем не хочется.
Посему подумал я о покупке кпк/ебука... но, цена кусается оч. Есть еще вариант распечатывать на работе, но боюсь огрести за это по голове от начальства.
А еще, намаявшись в очередной раз с линзами и благополучно ступив утром под радостную музыку из соседней школы, благодаря которой я оставил контейнер и жидкости для линз дома - я подумал, а не забить ли мне на эти риски с глазными операциями и не сделать ли?.. Страшно, конечно, но это лучше, чем постоянно красные и быстро сохнущие глаза.
Думал-думал... и все ж не удержусь я от
кормления троллей рабочего.
Ну, где же ваши розовые тапки? Из рабочего будут только личные выводы из обзора чужого кода.
Памятка на будущее1. Если уж мне понадобится писать библиотеку, то перво-наперво - проектирование интерфейса. Иначе - получится такая же хня, как со злосчастным ptlib, у которого от версии к версии меняется API. Сами понимаете, в какие пляски с бубнами выливается обновление библиотеки, да?
2. Кросс-платформа - это очень хорошо, удобно и практично, но... во-первых, надо отделять мух от котлет. И платформозависимое лучше всего выделять в статические библиотеки. Чтобы не путалось. Во-вторых, никогда, нет - НИКОГДА!!! - не мешать *nix- и win-подходы к компиляции. Configure-скрипты - это хорошо, но хорошо ТОЛЬКО в пределах *nix-системы. А когда студийный(!) аналог configure-скрипта зачем-то находит у вас какой-нить установленный Firebird-сервер и начинает требовать от него lib-файлы, которых у вас отродясь не было... ну вы поняли, да?
3. Шаблонный код - хорошо. Без злоупотреблений и там, где нужно, конечно. Но если что-то меняется - ТЩАТЕЛЬНО прочитать остальные сорцы во избежание таинственных макросов. Либо - в обязательном порядке документировать механизм работы таких хитростей. Знание стандартов С++ - это хорошо и их должен знать каждый (в теории, разумеется), но не все это знают. А вот тратить чужое время в размере 2 суток на попытки понять эзотерику мысли автора - это не этично.
4. Если и писать код, то тестировать и отлаживать перед выпуском релиза. А то, пардон, релиз с утечками памяти (притом столь явными, как, например, тут) - это, простите, пиздец. Так и хочется спросить авторов: "Вы там что, совсем охуели, да?"
5. Наверное, самое главное. Взять себе на вооружение Бритву Оккама и нещадно махать ей направо и налево. Чтобы не было подобного. Не надо порождать явно лишних сущностей там, где можно обойтись, например, typedef. Дешево, красиво, понятно и в 1 строчку.
6. Раз уж начали придерживаться стандартов - не изобретать велосипеды. Есть замечательные контейнеры из stl, вошедшие в стандарт. Зачем в ptlib наплодили целую прорву страдающих утечками памяти контейнеров - ума не приложу. (Хотя местами юзают тот же std::vector, например. Странные люди)
7. Все же прав Вадим - библиотеки реализовывать на С++ только в случае крайней необходимости. Ибо все равно тормознее и не так практично, как на чистом С. Да, простыни кода. Да, кошмар. Однако есть один большой плюс: такое жесткое ограничение не дает при проектировании и реализации растекаться мыслью по древу и ограничивает реализацию в рамках четких потребностей. Зачем нужна громаднейшая библиотека-на-все-случаи-жизни, когда требуются конкретные и четкие вещи на пару килобайт? К тому же более мелкие кирпичики проще подменять, нежели вносить изменения в большую и толстую универсальную библиотеку. Я все ж за четкий функционал, да.
Я не говорю, что С++ плох. С++ великолепен. Но для реализации бизнес-логики или для ядра приложения, так же как С# хорош для реализации интерфейсной части. Для библиотеки, которая реализует тупой функционал, нужен чистый С. Ибо быстро и надежно. Не зря ж ядро линукса написано на pure С, а не на С++?
8. Никогда не придерживаться одной, пусть очень надежной парадигмы проектирования. Подход проектирования MFC не так хорош, чтобы его юзать везде, где можно. Тем более - в кроссплаторме и еще тем более - к библиотеке. Нам же не нужен классовый пиздец? В общем, авторам библиотеки ptlib от меня - громадный disrespect. И я еще ни от одного своего сотрудника не слышал хорошего слова об этой библиотеке.