Нужно ли лямбда-лифтинг? - PullRequest
0 голосов
/ 20 мая 2019

Многие компиляторы функционального языка программирования имеют проход Lambda Lifting, и мне интересно, это лучший способ реализовать функциональный язык программирования?

Давайте рассмотрим следующий пример:

foo :: Int -> Int -> Int
foo = \x -> \y -> x * x * x + y

main = print $ sum (map (foo 5) [0..100])

если без лямбда-лифтинга нам нужно рассчитать x * x * x только 1 раз, но если с лямбда-лифтингом нам нужно будет вычислить x * x * x 100 раз.

Так что мне интересно, всегда ли GHC делал лямбда-лифтинг даже в вышеупомянутом случае? это необходимо? Или есть какая-нибудь альтернативная технология компиляции FP lang, которая может лучше справиться с вышеуказанным случаем?

...