avva: (Default)
[personal profile] avva
Надо иногда выхватывать из памяти куски жизни, жадно их ощупывать, и опускать на хранение в колодец ЖЖ.

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


Когда-то (в совсем другой жизни) у меня было хобби: я обожал решать сложные графические проблемы в ассемблере под x86.
То было время, когда быструю графику под x86 кроме как в ассемблере и невозможно было делать. Время, если считать по главным ориентирам, между Wolfenstein-ом и первым Doom-ом. Кому-то это описание, наверное, ничего не говорит, а кого-то сразу ориентирует.
На тогда же примерно пришёлся расцвет так называемой demo scene. Одни фанаты месяцами работали над сложнейшими трёхмерными алгоритмами и изумительными эффектами, а другие фанаты сотни раз это прокручивали и тащились. Конечно, как и тогда всем было понятно, основная сложность была всё же не в том, чтобы это сделать, а в том, чтобы это сделать быстро. Так, чтобы побежало на стареньком триста-восемьдесят-шестом, или на новеньком 486DX-2.

Я никогда не работал всерьёз над демами, и не пытался присоединиться ни к какой команде. Это казалось мне непозволительно экстравагантной тратой времени: слишком интенсивно, слишком много. Всё-таки это было всего лишь хобби... не более того.

Наверное, зенитом этого хобби следует считать доведенный мной до вполне рабочего состояния движок, полностью соответствовший Вульфенштейновскому по возможностям и скорости работы. Он действительно бежал быстро на моём 386-м. Я безмерно гордился им. Правда, именно тогда же и появился первый Doom ;) Движок мой так никуда и не попал, да я и не стремился никуда его пристроить. Интересно, сохранился ли где-то этот код? Вот бы его отыскать. Ностальгия!

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

Да. Мне нравилось учавствовать в неформальных соревнованиях, которые были тогда популярны. Например: написать самый быстрый алгоритм, к-й рисует прямую линию из одной заданной точки на экране в другую. Естественно, такой алгоритм лежит в основе практически всей остальной графики, поэтому его скорость критична. Счёт шёл не на секунды и не на миллисекунды, а на процессорные такты, т.е. вот просто люди знали, какие инструкции сколько тактов занимали, и стремились общее количество тактов минимизировать. И я тоже знал, правда всегда нетвёрдо, и часто подглядывал (очень характерная деталь, now that I think about it). Мне сейчас трудно в это поверить.

Конечно, далеко не все ухищрения касались именно утилитарно-процессорных штучек типа того, как сэкономить регистр. Сами алгоритмы тоже обрабатывались и перерабатывались. Например, самый очевидный алгоритм рисования прямой использует плавающую точку - слишком медленно! Базисный алгоритм, использующий fixed-point и целочисленные итерации (смылось у меня из памяти его название) все мучили и улучшали, как могли. И я тоже.

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

Конечно, занятие это совершенно бесполезное. Если уж пишешь на ассемблере, насчёт размера кода можно не беспокоиться. Всё равно будет очень маленьким. Из двух основных ограничений: скорость и память - важно здесь только первое.

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

Она рисовала прямую очень медленно по сравнению с другими функциями, зато она была короче всех. Эта совершенная анти-практичность конечной цели грела мне душу. Совершенная, но не абсолютная. Конечная цель осмыслена (функция всё же рисует прямую линию, а не случайные точки). Значит, наверное, не так, а по-другому: анти-практичность не конечной цели, а критерия, по которому её воплощение оценивается.

Теперь я знаю, почему всё это вспомнил: именно эта идея анти-практичности. Откуда она? Что она? Как она?

И не она ли грела душу Харди, когда он заявил, что теория чисел никогда не будет иметь никаких практический применений? Бедняга Харди, наверное, переворачивается в гробу всякий раз, когда кто-то цитирует эту фразу и, хихикая, упоминает современную криптографию.

Всё.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 11:50 pm
Powered by Dreamwidth Studios