The Old New Thing, или папа окон
Бывают книги, осилив которые наполовину, чувствуешь себя героем. А очень редко случается, что на середине книги жалеешь, что осталось так мало. Книга The Old New Thing — это тот самый редкий случай. Чем ближе было к концу, тем больше хотелось читать. Поэтому бонусные главы, которых нет на бумаге, но есть на сайте, пришлись кстати.
Это уже становится традицией, что блоги проходят литературную обработку и издаются в виде книги. Так и тут. Raymond Chen — автор одноимённого блога The Old New Thing, расположенного на сайте MSDN Blogs. Судя по всему, блог должен быть очень популярным.
Про автора и книгу я узнал из статей Джоеля Спольского («Джоэл о программировании», «Лучшие примеры разработки ПО»). Как я понял, Raymond Chen — это «папа» Windows, он «вылепил» её. И вряд ли можно найти кого-либо, кто знает больше о внутренностях системы.
Бывают такие знания, которые ниоткуда больше не получишь, кроме как от других. В книге очень много сведений такого рода. Прочитав её, гораздо сильнее начинаешь ценить, как много невидимого труда вложено в Windows, как тяжело было сделать так, чтобы пользователям было удобно. И не надо кидать в меня тухлые помидоры: последний Windows, с которым я имел дело, был 95-й. С того времени я работаю исключительно под Linux. Но это не значит, что надо поливать грязью альтернативную операционную систему. Даже если в ней есть косяки.
Ибо косяки, на самом-то деле, часто являются историческим наследием, оставленным для обратной совместимости. Например, специальные файлы типа CON и PRN. Изначально, оказывается, они были очень полезным хаком. Есть даже убеждающие объяснения тому, что меня всегда бесило: интерпретация часов BIOS'а как локального времени, а не GMT; перезапись загрузочного сектора при установке Windows.
Помимо объяснений, откуда взялись те или иные фичи, есть много просто забавных историй. Меня особенно повеселило, как после втыкания шнурка, система сказала: «Обнаружено новое устройство: Boeing 747».
Всё это идёт вперемежку с глубокотехническими главами. В них тоже раскрываются тонкости работы привычных вещей, например, диалоговых окон или диспетчера сообщений. Полезное чтение для всех GUI-программистов, причём не только под Windows. Для меня это первая книга, отвечающая на вопрос «почему это работает так», а не просто описывающяя, как сделать что-либо.
Большая глава посвящена интернационализации программ и разборке со вводом-выводом в разных кодировках. Для меня мало нового, но те, кто ещё не «обжигался» на экзотических буквах, узнают о ещё одних трудностях жизни.
Я много слышал о том, что указатель на функцию нельзя класть в int, но не мог придумать, почему. Благодаря обсуждению внутренностей Visual C++, я теперь знаю: указатель на функцию-член класса может быть очень хитрым, он в int не поместится.
Порадовало использование инструментов не по назначению. Например, как нарисовать закрашенный прямоугольник? Использовать функцию Rectangle? Или, может, FillRect? Так вот, оказывается, что самой удобной и эффективной является функция ExtTextOut.
В обсуждении вопросов производительности меня впечатлили разборки с памятью. Были рассмотрены традиционные подходы, которые используются, когда кешировать надо, а думать лениво. Оказалось, что в таких случаях память под кеш расходуется очень неэффективно. Эксперимент показал, что используемая часть кеша составляет только 2%, а остальное потеряно! А небольшое изменение в алгоритме резко всё поменяло, и кеш стал использоваться более чем на 98%, часто близко к 100%. Получается, что кеш с плохим алгоритмом — это просто другое имя для утечки памяти.
Кстати, об утечках. Как понять, где она происходит, не используя специальных инструментов? Оказывается, есть удивительно простой и очень успешный способ. Берём дюжину адресов и делаем дамп памяти. С вероятностью близкой к 100%, там есть утекшие объекты. Остаётся только взглянуть на распечатку и найти часто повторяющийся шаблон. Это и есть утечка. Физики-практики рулят.
В бонусных главах рассказывается, на какие ухищрения пришлось идти разработчикам Windows для того, чтобы заставить работать под своей системой некоторый софт. Эти истории украсили бы WTF. Так что в следующий раз, прежде чем кричать “Windows must die”, подумайте, чьи именно кривые руки накосячили, и постарайтесь прочесть The Old New Thing.
Ссылки
- The Old New Thing — Блог автора книги
- Веб-сайт книги. Отрывки и бонусные главы
- эта книга на amazon.com
- эта рецензия на mustread.ru
комментарии (18)
Вообще, в Windows (как и в любую другую ОС) вложено столько труда, что кричать "must die", осознавая это, просто невозможно. Уважайте чужой труд - и люди будут уважать ваш.
Так что не всё так однозначно я не согласен с утверждением, что некий продукт нужно уважать просто из-за вложения в него гигантских сил.
Продукт же надо либо использовать, либо нет. А если человек испытывает какие-либо чувства неважно к какому софту, это мне кажется как минимум странным.
How Microsoft Lost the API War
http://www.joelonsoftware.com/articles/A…
или
Как Microsoft проиграла битву за API
http://russian.joelonsoftware.com/Articl…
В C этого тоже лучше не делать. Когда-то Ваш код будет скомпилирован на платформе, где sizeof(int) < sizeof(void *). И это отнюдь не далёкое будущее: например, сейчас на x86_64 sizeof(int) = 4, sizeof(void *) = 8.
Позвольте указать на одну опечатку в статье. Правильно будет не "Boing", а "Boeing".
Ну вы блин даёте. Трудно зайти посмотреть кто это такой? Чен конечно давно работает в MS, но говорить что он «папа Windows» — по меньшей мере смешно…
http://en.wikipedia.org/wiki/Raymond_Chen