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

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


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

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

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

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

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

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

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

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

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

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

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

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

Всё.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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. 29th, 2025 01:32 am
Powered by Dreamwidth Studios