Выбрать главу

Провалился! Ай, карамба! Вспомнил! Переход по веткам конструкции выбора switch-case компилятор Си преобразовывает в машинный код, аналогичный goto. Но за использование кейза никто предателем заветов дедушек Кнута и Вирта меня не назовёт. Спасибо вам, мистер Кэш. Ваша музыка здорово прочищает мозги. Я на ваш концерт схожу, чтобы свой респект высказать.

В приступе кодерского вдохновения я положил руки на клавиатуру и родил выносящий мозг нормальному человеку код. Уродца с циклом while, вложенным в switch и начинающемся в первом ветвлении, а заканчивающимся после последнего. Восемь веток, немного копипаста и готово. Я восхитителен.

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

– Это не будет работать. Компилятор выкинет тебе ошибку, – сказал мне подглядевший через плечо аспирант Гарланд.

Точь-в-точь мои мысли, когда доцент написал на доске странную конструкцию с огромным количеством фигурных скобочек, за которыми попробуй уследи. Эх… где там моя IDE c подсветкой. На мощном университетском серваке отлично крутилась бы. Моник, правда, монохромный, с зеленым люминофором.

– Спорим, что заработает, профессор? – я еще раз окинул код взглядом и не нашел в нашем с пиксаровцем уродце явного изъяна. Мы просто сокращаем накладные расходы на цикл… ну, не в восемь раз, но очень сильно. Можно и еще несколько ветвлений добавить, добить до 10 или 16. Больше, скорее всего, лишено смысла.

– Заключать пари со студентами непрофессионально.

– На шоколадку, сэр. Это мелочь.

Уместнее было бы на пиво, по-“одмински”. Но от одной мысли всего передернуло и в ногу кольнуло. Психосоматика – она такая.

– Ладно, купишь мне сникерс, если так того хочешь, – в неформальной манере согласился Сэм. – Я лично обещаю, что выкуплю половину сладостей из вендингового автомата для того, чей код уложится в полторы секунды.

Слева и с тыла послышались смешки. Сидящий позади студент наверняка имел возможность подглядеть мне в монитор и увидеть психоделическую конструкцию из переплетения кейза и вайла, как будто бы операторы страстной любовью занялись.

Не бережет он свой кошелек. И не верит в то, что кто-то из студентов добьется результата.

Переходим в командный режим vi, :wq – сохранить файл и выйти. Запускаем компиляцию, супермощный компьютер справился с преобразованием программы в машинные коды непривычно быстро – всего за две-три секунды. Офигеть, хочу! Где такие продают? Мой 5150 провозился бы секунд 20, и то благодаря старине Корвусу. С дискетами совсем печальная картина прогнозируется.

Не слишком ли я самоуверен? Что, если компилятор Си из 1982-го обрабатывает кейзы как-то по-другому? Я даже не помню, в каком году пиксаровец придумал свой хак. Где-то в середине восьмидесятых, кажется. Но это не точно.

Скомпилилось, уже хорошо. Теперь запускаем. На секунду с небольшим я дыхание затаил. И… 1.35. У меня вскоре от шоколадок что-нибудь слипнется! А ну и ладно, одногруппников угощу. Они высокомерные задницы, но отношения налаживать надо, кое-кого я и нанял бы.

– Как? – спросил сосед сзади.

– Очень изобретательно, мистер Колон, – похвалил Сэм Гарланд. – По-своему изящно, – лихорадочная работа мысли прямо читалась в том, как по лбу молодого препода складки гуляли. – Я объясню всем желающим смысл решения после занятия, у вас есть еще пять минут, чтобы добиться успеха.

Глава 19

– Мистер Колон, раз вы уже достигли цели, подойдите, мне есть что вам сказать по поводу статьи о вашем алгоритме сортировки.

Сэм утянул меня за дверь, но как и ожидалось, говорить начал не о джулайсорте.

– Объясните ваш код. Кратко, если возможно. Он просто не должен работать, а вместо этого приблизился к ассемблерному по производительности.

– Всё дело в goto…

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

Под мой рассказ аспирант опустошил торговый автомат. Три десятка разных шоколадок – всё, что оставалось в продаже. Всё купленное тут же сгружал мне.