Andrei
Мы говорим про рантайм.
Andrei
foo(x*x , y);
Andrei
y заранее неизвестно
Andrei
плюсы всегда вычислят x*x
Anonymous
т.е. последовательно
Anonymous
а в хаскеле по логике
Andrei
Алдар
в хаскеле вместо того чтобы аргументы вычислять просто заменит тело функции на её определение
Andrei
Ну не по логике, там просто вычисление это кое-что другое. Не то, что мы в плюсах понимаем.
Anonymous
Значит ленивые это круто?)
Andrei
Это не круто, это просто одна из стратегий.
Anonymous
Не нужно тратить лишних ресурсов, скорость вычисление и т.п.
Andrei
Иногда тебе надо форсировать вычисления.
Andrei
в хаскеле для этого есть специальные операторы
Andrei
Алдар
большой недостаток, что при ленивых вычислениях остаются ненужные выражения, которые жрут память
Алдар
иногда
Ned
Алдар
не всегда
Andrei
И да, вот это тоже. У тебя сслыки на непроделанные вычисления.
Andrei
Но там тоже это решаемо.
Andrei
Но это уже детали реализации языка.
Ned
Andrei
Ну, для этого есть оптимизация хвостовой рекурсии и всё такое
Andrei
вычисления с аккумулятором
Andrei
и форсирование вычислений.
Ned
Память.
Anonymous
Большое спасибо вроде как понял)
Andrei
Не за что.
Andrei
Но отложенные вычисления не всегда лучше энергичных.
Andrei
Особенно если это вычисления на массиве например, отложенные медленее.
Andrei
Из-за дополнительной индирекции на данные, и из-за гарантированного мисса мимо кеша инструкций.
Ned
Я за ленивые только в ФП
Ned
Имхо
Anonymous
А вот интересно, в каком-нибудь языке функции выполняются заранее, независимо от их вызова?
Andrei
Да.
Ned
Andrei
Во всех языках на самом деле.
Andrei
:3
Ned
Andrei
Не путайся, просто дело не в языках.
Andrei
В процессорах.
Алдар
ещё у ленивых вычислений недостаток, что приходится одно и то же выражение много раз вычислять
Алдар
с этим борятся конечно
Andrei
Ned
Andrei
в хаскеле сслыки на отложенные вычисления
Anonymous
Andrei
Не,не о том.
Andrei
Сейчас.
Andrei
Процессоры например arm-ы
Алдар
правда, если бы не было оптимизации
Ned
А, понял
Gcc умеет в инлайн когда простые функции. Итд
Andrei
в общем архитектуры power
Andrei
выполняют иногда инструкции
Andrei
не в том порядке, в каком они написаны
Andrei
а на x86 любом есть branch prediction
Andrei
то есть если у тебя есть if в коде, у тебя процесор попытается угадать, какое значение условного выражения будет и начнет заранее вычислять тело if-а
Andrei
или else
Andrei
в зависимости от предсказания перехода
Ned
Anonymous
Интересно
Ned
Если элс пустой
Andrei
суперскалярные вычисления итд
Anonymous
Что "курить" чтобы все это знать?)
Andrei
у тебя процессор фетчит(вытаскивает из памяти) не по одной инструкции
Andrei
а сразу пачку
Andrei
и выполняет их как ему заблагорассудится
Andrei
Лишь бы зависимости между порядком сохранялись
Andrei
Не знаю, я курил сотни случайных источников.
Ned
Andrei
Опыт на работе итд.
Andrei
Постараюсь.
Ned
Где-то читал про обёртку асм команд в С-шные чтобы С-железячникам не учить асм. Как это называется?
Ned
Сама обёртка, или принцип оборачивания под конкретные процы. И тд...
Anonymous
Andrei
есть microapl relogix непример, который умеет так делать