Сегодня международный день проверки микрофона: 12.12.12.
А 20-го будет международный день перемены порядка байт: 2012.12.20.
Author Archives: himself
Раз два, раз два, раз два
Консты нереально круты
Да, я понимаю, что тут никто не пишет на дельфи, но раз уж я иногда что-то пишу о ней, то позвольте мне.
В дельфи есть элемент языка, которым все пренебрегают. Очень крутой. Это атрибут входного параметра const.
Вместо:
function IsStringAbrakadabra(s:string): boolean
Получится:
function IsStringAbrakadabra(const s:string): boolean
Зачем?
Строки в Дельфи ведут учёт ссылок. Каждое присваивание увеличивает счётчик на 1. Каждое зануление – уменьшает его. Поэтому любая функция, которая получает строки, преобразуется компилятором в следующую:
UStrLAsg(s); //увеличить счётчик ссылок
try
//сама функция
finally
UStrLClr(s); //уменьшить счётчик ссылок
end;
Два лишних вызова! И фрейм try..finally (это очень дорогая конструкция). Эта обёртка легко может тратить больше времени, чем сама ваша функция! Скомпилите и посмотрите в ассемблер – инлайнить такую дуру тоже пропадает всякая выгода.
На помощь спешит модификатор const! Он говорит компилятору, что вы клянётесь героиней любимого мультика не трогать полученной строки. Тогда можно учёт ссылок не вести, и фрейм try..finally тоже не нужен. Вместо 60 ассемблерных инструкций ваша функция внезапно компилируется в шесть!
Но это ещё не всё.
Мало добавлять const к строковым параметрам. Строки могут передаваться неявно. Функция, которая получает структуру со строкой внутри, тоже требует учёта ссылок и фрейма try..finally. Даже хуже: вместо прямолинейного UStrLAsg будет вызван AddRefRecord, который с помощью некоего подобия рефлекшна изучает вашу структуру и решает, каким полям нужен какой учёт ссылок. И так в каждой функции!
Дельфи не глупая, и если структуре совсем не нужен учёт ссылок, она поймёт это при компиляции, и фрейм не вставит. Но когда хоть одно поле требует учёта, вы получите пенальти в размере полного разбора всей структуры дважды.
Поэтому ставьте const везде, где можно. Ставьте const всему, что передаёте на копирование во всевозможные “SetSomething” или “InitSomething”. В крайнем случае он будет просто подсказкой читающему код.
Ещё очень важная информация: отключайте “String format checking” в настройках компиляции. Всегда. Сразу же. Эту опцию следовало бы назвать “замедлить в три раза все операции со строками, для того, чтобы спрятать от вас чудовищные баги в вашем коде”.
Два страшных выражения
Смысла которых никто не знает:
1. Всплеснуть руками.
2. Трагически заламывать руки.
Как “всплескивают руками”? Когда это делают? Вспоминается только, что со словами “Какой кошмар!”. А заламывание рук – знак отчаяния.
Облачный атлас
“Люди свободны. Люди не принадлежат сами себе. Каждое мгновение – развилка, определяющая, как дальше пойдёт история. Всё предрешено прошлым и будущим, изменить ничего нельзя. Любое наше действие порождает волны, которые расходятся по времени. Каждый проступок и каждое доброе дело отражаются снова и снова. Главное – быть храбрым. Любовь – это движущая сила вселенной. Негров обижать нельзя.
Мы как кванты, которые… в общем, кванты.”
Если забыть о прекрасной музыке, увлекательном сюжете и общей грандиозности, вы только что посмотрели “Облачный атлас”. В его обширном философском подтексте каждый найдёт свои любимые ответы на свои любимые вопросы.
Shifuku
В японской прозе постоянно встречается “обычная”, “повседневная” или “будничная одежда” (shifuku, 私服 ). “Навстречу мне вышел отец в обычной одежде”, “в коридоре стояла Кирино в обычной одежде”, “по пути нам встретился Акаги в повседневной одежде”.
Понятно, что это значит “не в школьной форме, не в костюме готик-лолиты и не в рабочем пиджаке”. Но переводить-то неудобно! Читатель скажет – вот заладили: обычная одежда, обычная одежда… Если она обычная, чего о ней говорить?
Дело в том, что в Японии значительно теплее, чем у нас.
В России десять месяцев из двенадцати на улице ветер, слякоть или мороз. Поэтому у нас существуют “домашняя” и “уличная одежда”. Мы привыкли к ним так же, как японцы привыкли к своей “обычной”. Нам не покажутся странными фразы:
“Навстречу мне вышел отец в домашней одежде”
“В коридоре стояла Кирино в уличной одежде”
“По пути нам встретился Акаги в уличной одежде”
Это какие-никакие, а уточнения. Конечно, лучше бы сказать “Акаги в джинсах и куртке поверх футболки”, но “Акаги в обычной одежде” звучит хуже, согласитесь.
Итак, если текст позволяет – если нет картинок – заменяйте “обычную одежду” на “домашнюю” или “уличную”, по обстоятельствам. Ничего страшного, если герой в “уличной одежде” сразу пройдёт к себе в комнату: в тёплом климате Японии это не вызовет вопросов (на самом деле ведь так и происходит).
А если мешают картинки (трудно назвать “уличной одеждой” майку с шортами) – просто замените “обычную одежду” её описанием.
Это вольность перевода, но результат того стоит.
Верните болт
Был у нас переходник с евророзетки на советскую. Маленький белый такой. Если присмотреться, он состоял из двух частей, воткнутых одна в другую и соединённых болтом.
Кто-то пришёл.
Болт выкрутил.
Унёс.
А две части оставил.
Вот нафига? Болтов других не было?
Breaking Bad
В пятом сезоне каждая серия – это очередной гвоздь в крышку гроба для симпатий к Волтеру Вайту. Столбик градусника приязни падает на глазах: теперь уже хочется, чтобы Волт проиграл. Он умудрился, не став по-настоящему крутым, как этого все ждали, стать по-настоящему плохим. Получился трусоватый и нелепенький, но жестокий учитель химии с манией величия.
Трусость, конечно, понемногу уходит, но заменяет её не уверенность в себе, а ощущение вседозволенности. Выходит, Breaking Bad показывает нам историю становления диктатора того сорта, который в глубине души остался кроликом, просто вырастил броню и когти-ножи.
Майк – старикан-убийца – сказал про Волтера: “Это бомба с часовым механизмом, который отстукивает: тик-так, тик-так, тик-так. Рано или поздно она рванёт, и уничтожит всех вокруг, и я не хочу в это время быть рядом”. Наверное, он говорил про манию величия: для химика нет правил, он никогда не удовлетворится тем, что имеет. Волт всегда будет рисковать, бросаться в огонь:
“You asked me if I’m in it for the money business or the drug business? I’m neither. I’m in it for the empire business.”
Я сочувствовал Волту первые сезоны, даже когда ему приходилось поступать жестоко – именно потому, что его вынуждали обстоятельства. Я сочувствовал ему даже тогда, когда Волт был сухарём и врал, что ему жалко погибшего ребёнка: некоторые люди просто лишены эмоций, тут ничего не поделаешь. Но теперь Волтера всерьёз решили сделать плохишом.