Кодеры за работой. Размышления о ремесле программиста - [225]

Шрифт
Интервал

Кнут: Указатели уже настолько вышли из моды, что мне приходится вступать по этому поводу в споры. Если говорить о моем 64-разрядном компьютере, то, если действительно заботиться о производительности моего компьютера, мне приходится признать, что лучше отказаться от использования указателей, поскольку на моей машине 64-битные регистры, но всего 2 гигабайта оперативной памяти. Поэтому у указателя никогда не бывает больше 32 значащих битов. Но каждый раз, когда я использую указатель, это стоит мне 64 бита, и это удваивает размер моей структуры данных. Более того, это еще идет и в кэш-память, и половины кэш-памяти как не бывало, а за это приходится платить - кэшпамять дорогая.

Поэтому я на самом деле пытаюсь сейчас пробовать новые варианты, то есть мне приходится вместо указателей использовать массивы. Я создаю сложные макросы, то есть создаю видимость использования указателей, хотя на самом деле их не использую. Можно сказать, что это незначительное явление, и оно выходит из моды. Но для меня это было важным новшеством в нотации на низком уровне. Когда я пишу код, занимаюсь отладкой или еще чем-то в этом духе, то всегда испытываю огромную благодарность Томпсону и Ричи. Не знаю, кто именно первым это придумал.

Сейбел: Есть ли в вашем программистском арсенале другие важные инструменты?

Кнут: Файлы изменений - их я придумал после того, как уже стал использовать методы литературного программирования, и я не знаю их аналогов в инструментариях других программистов, поэтому позвольте объяснить их вам.

Когда я написал ТеХ и METAFONT, люди стали просить их у меня. У всех этих людей было 200-300 различных комбинаций языков программирования, операционных систем и компьютеров, поэтому я хотел сделать так, чтобы мой код с легкостью можно было адаптировать к любой системе. И мы разработали такое решение: я пишу главную программу, которая работает в Стэнфордском университете, после чего создается дополнение - файл изменений (change file), который может адаптировать эту главную программу для работы на чьем угодно компьютере.

Файл изменений очень прост. Он состоит из ряда небольших фрагментов изменений. Каждое изменение начинается с нескольких строк кода. Вы сравниваете до тех пор, пока не находите первую строку файла главной программы, которая совпадает с первой строкой вашего изменения. Когда вы добираетесь до конца той части изменения, которую нужно было соотнести с главным файлом, появляется часть, в которой написано: “Замените это вот этими строками”.

Может быть, изменение будет состоять в следующем: “Замените эти шесть строк вот этими двенадцатью строками. Или ничем не заменяйте. Как только найдете совпадение, вставляйте те двенадцать строк, что вы изменили. Затем переходите к следующей части”. Вам необходимо написать изменения по порядку — никаких интеллектуальных процессов, связанных со сравнением, нет; просто программа говорит: “Сравнивайте до тех пор, пока не найдете первую строку следующего изменения, которая должна совпасть с какой-либо строкой из главного файла”.

Эту систему можно написать за час, и она достаточно хорошо справляется со своей задачей. После чего все инструменты, которые есть в нашем распоряжении для литературного программирования - программы “сплетания” и “спутывания”, - будут работать с главным файлом и файлом изменений.

Поэтому мне время от времени приходится выпускать новую главную программу. У сотен людей по всему миру есть свои файлы изменений - возможно, их шесть строк, которые должны совпасть с моими, уже не совпадают, поэтому им нужно внести ряд изменений. Но им не приходится делать слишком много. Каждый раз, когда я исправляю ошибку, программа практически сразу заработает - исправление ошибки также отражается и на работе их программ. То есть проблема была решена очень просто, и все сработало. Любой может это понять и сделать.

Примером крайности в этой области может служить случай, имевший место, когда ТеХ адаптировался для работы с Unicode. У них был файл изменений раз в десять больше главной программы. Другими словами, из 8-битной программы они сделали 16-битную, но вместо того чтобы пройтись и переделать мою главную программу, они были настолько увлечены файлами изменений, что просто написали свои файлы изменений и назвали это Omega, - миллион строк файлов изменений для 20 000 строк кода ТеХ. Это крайность.

Но сейчас я постоянно использую файлы изменений, потому что пишу для себя программы, которые использую в своей книге, - есть множество задач, в которых я бы хотел разобраться, и мне бы хотелось поэкспериментировать с различными версиями. Например, вчера я захотел выяснить, насколько большой является булева схема для перемножения л-битных чисел. То есть у меня есть программа, которая берет любую булевскую функцию и вычисляет ее BDD.

В моей исходной программе нужно ввести таблицу истинности функции в процессе работы; она говорит: “Введите таблицу истинности”, - и я ввожу шестнадцатеричное число, потому что у меня есть множество небольших функций, которые я использую в качестве примеров. Но это работает только для небольших функций, которые я хочу ввести в таблицу истинности.


Рекомендуем почитать
Георгий Димитров. Драматический портрет в красках эпохи

Наиболее полная на сегодняшний день биография знаменитого генерального секретаря Коминтерна, деятеля болгарского и международного коммунистического и рабочего движения, национального лидера послевоенной Болгарии Георгия Димитрова (1882–1949). Для воссоздания жизненного пути героя автор использовал обширный корпус документальных источников, научных исследований и ранее недоступных архивных материалов, в том числе его не публиковавшийся на русском языке дневник (1933–1949). В биографии Димитрова оставили глубокий и драматичный отпечаток крупнейшие события и явления первой половины XX века — войны, революции, массовые народные движения, победа социализма в СССР, борьба с фашизмом, новаторские социальные проекты, раздел мира на сферы влияния.


Дедюхино

В первой части книги «Дедюхино» рассказывается о жителях Никольщины, одного из районов исчезнувшего в середине XX века рабочего поселка. Адресована широкому кругу читателей.


Школа штурмующих небо

Книга «Школа штурмующих небо» — это документальный очерк о пятидесятилетнем пути Ейского военного училища. Ее страницы прежде всего посвящены младшему поколению воинов-авиаторов и всем тем, кто любит небо. В ней рассказывается о том, как военные летные кадры совершенствуют свое мастерство, готовятся с достоинством и честью защищать любимую Родину, завоевания Великого Октября.


Небо вокруг меня

Автор книги Герой Советского Союза, заслуженный мастер спорта СССР Евгений Николаевич Андреев рассказывает о рабочих буднях испытателей парашютов. Вместе с автором читатель «совершит» немало разнообразных прыжков с парашютом, не раз окажется в сложных ситуациях.


На пути к звездам

Из этой книги вы узнаете о главных событиях из жизни К. Э. Циолковского, о его юности и начале научной работы, о его преподавании в школе.


Вацлав Гавел. Жизнь в истории

Со времен Макиавелли образ политика в сознании общества ассоциируется с лицемерием, жестокостью и беспринципностью в борьбе за власть и ее сохранение. Пример Вацлава Гавела доказывает, что авторитетным политиком способен быть человек иного типа – интеллектуал, проповедующий нравственное сопротивление злу и «жизнь в правде». Писатель и драматург, Гавел стал лидером бескровной революции, последним президентом Чехословакии и первым независимой Чехии. Следуя формуле своего героя «Нет жизни вне истории и истории вне жизни», Иван Беляев написал биографию Гавела, каждое событие в жизни которого вплетено в культурный и политический контекст всего XX столетия.