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