Добавить комментарий

Изображение пользователя Alexey_Donskoy.

Процессорная зависимость

Ну, положим, пример с rep movs vs MMX принципиального значения не имеет, не об этом речь... Можно привести сотни примеров на десятках разных процессоров...

Макро тоже не в тему, поскольку это всего лишь техническая разновидность реализации словаря...

Проблема в том, что алгоритмическое решение задачи существенно зависит от исполнителя.

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

Прелесть проблемы, с другой стороны, и в том, что алгоритм вообще теряется как таковой, превращаясь в последовательность вызовов [зависимых от исполнителя] функций. Форт идёт сюда же, он увеличивает словарь уже просто по определению, это его основная особенность... То есть подобное усложнение противоречит требованиям эргономики.

Если же мы пойдём по второму пути, мы будем вынуждены (строго алгоритмически!) писать [на том же С] копирование области памяти поэлементно в цикле! Когда нам это надоест, мы напишем процедуру с ассемблерной вставкой (или макрос, что непринципиально) - и тем самым свернём на первый путь - увеличения сложности...

А тема началась с того, что народ был очарован Драконом и предлагал использовать его в качестве универсального средства проектирования алгоритмов... А я примерил это предложение к своей текущей работе (нам как раз сейчас мультиплатформенность нужна). И оказалось, что задача вообще не решается.

Другими словами, есть разные виды алгоритмов - простые, канонические, которые рассматривает тот же Каймин и которые применимы в очень многих местах, вплоть до Бурана... и совсем неприменимы в сильно машинно-зависимых задачах...

Принципиальной разницы, конечно, нет... Просто любой, даже канонический алгоритм не есть математическая абстракция, а имеет конкретный "физический смысл", всегда являясь программой конкретного (пусть даже канонически-абстрактного) исполнителя.

А Дракон, как и простая блок-схема, расчитан на настолько простого исполнителя, что возникает иллюзия математической абстракции ;)