Как стать автором
Обновить

The Old New Thing, или папа окон

Время на прочтение3 мин
Количество просмотров1.5K
Бывают книги, осилив которые наполовину, чувствуешь себя героем. А очень редко случается, что на середине книги жалеешь, что осталось так мало. Книга 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.
Ссылки
Теги:
Хабы:
+23
Комментарии18

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн