tarasv>Хотя сейчас состояние оптимизаторов таково что или ассемблер для очень критических частей или профессинальный компилятор выдаст код примерно одинакового быстродействия с любого компилируемого языка Ассемблер без ручного потокового оптимизирования (распределения по конвейерам, ручного подсчёта тактов и т.п.) даёт код заметно более медленный, чем ЯВУ
Я приводил тесты для лобового решения того же Фибоначчи
Понятно, что вручную можно написать, как минимум, не хуже ЯВУ. Но на это уйдёт СТОЛЬКО времени... Я уже молчу про непереносимость, вероятность ошибок и т.п.
Даже для всяких наоврочанных 3D-экшн программирование на ассемблере давно уже даже в критических местах не окупается
Проще поменять алгоритм
При чём, как я уже писал, тут зависимость прямая. Чем выше уровень ЯВУ, тем проще реализовать более сложные алгоритмы, что в итоге при общем падении скорости языка может привести к серьёзному росту быстродействия программы.
Я уже приводил пример с тем же Хаскеллом. Язык сам очень неторопливый, на два порядка медленнее "рекордсменов". Но! Например, позволяет записать те же числа Фибоначчи ни чуть не сложнее рекурсивного метода:
code text
fibz = 1 : 1 : [ x+y | (x,y) <- zip fibz (tail fibz)]
Это массив (бесконечный, т.к. Хаскелл - язык ленивый, считает только то, что нужно), где каждый первые два элемента - единички, а каждый новый элемент является суммой двух вершин срезов этого же массива на один и на два элемента (т.е. фактически - сумма предыдщих элементов). "Извлечение", скажем, 50000-го числа Фибоначи (все 10452 знака! - int в Хаскелле неограниченной разрядности) этого массива занимает 1.1сек
… чтобы понять рекурсию, нужно сперва понять рекурсию …