К последнему абзацу стоит добавить магические числа, широко распространенные, например, в ядре линукса. Так, например, модули ядра (т.е. драйверы) огорожены от неправильной загрузки не только номером версии, но и магическим числом, генерируемом при каждом билде. Соответственно, modprobe не даст загрузить модуль от другого ядра (другой сборки), даже если он имеет тот же номер версии - на случай разницы в конфиге. (Впрочем, если совсем приперло, insmod воткнуть такой модуль позволит). Или вот в системный вызов reboot нужно передать целых два магических числа, первое 0xfee1dead, а за вторым нужно лезть в ман к конкретной версии ядра. Защита от случайного вызова.
Ну с этой точки зрения "магические методы" в каком-нибудь пыхе тоже никакой магии не содержат. Так, синтаксический сахар... Другой вопрос, что злоупотребление сахаром приводит к ожирению и диабету. Также как и магия по вашей ссылке в последнем абзаце - несколько тактов оно когда-то экономило, но с переносимостью там беда в большинстве случаев.
> Случайности же проявляются только тогда когда их привносишь
Ну так и в магии случайности только привнесённые. Разница не в детерминизме, а в наличии/отсутствии достаточно полной модели в голове практикующего. Об чём и закон Кларка намекает.
Хотя программы суть "идеи", выполняются они на "материальном" железе. А весь материальный мир живет, увы, по вероятностным законам. Пролетит через процессор какой-нибудь высокоэнергетический протон, исказится какой-нибудь битик и кирдык детерЬминизЬму.
Ну если опускаться на квантовый уровень - то там конечно да, бардак полнейший. Но поднимаясь обратно в наш грешный макро-мир всю эту квантовую фигню можно вынести за скобки и обратно наслаждаться статистическим детерминизмом.
Нет, я считаю что наиглавнейшим способом построения абстракций является DRY, иначе - погрязнем в эксплицитности, а где много понаписано - там больше вероятности ошибок.
Comments 13
Или вот в системный вызов reboot нужно передать целых два магических числа, первое 0xfee1dead, а за вторым нужно лезть в ман к конкретной версии ядра. Защита от случайного вызова.
Reply
Reply
Также как и магия по вашей ссылке в последнем абзаце - несколько тактов оно когда-то экономило, но с переносимостью там беда в большинстве случаев.
Reply
Reply
Reply
Ну так и в магии случайности только привнесённые. Разница не в детерминизме, а в наличии/отсутствии достаточно полной модели в голове практикующего. Об чём и закон Кларка намекает.
Reply
Reply
Reply
Reply
Reply
А во-вторых: ты что, не согласен?
Reply
Reply
Leave a comment