Хотел бы выразить благодарность за ruhaskellbook, была проделана восхитительная работа. У меня вопрос по одной из глав, про STG. Там написано, что FUN - это определение функции. Не знаю, может быть, это специально для упрощения сделано, но все же считаю должным написать. Речь идет ведь об объектах кучи, а тело функции не лежит в куче, оно расположено в секции кода. А FUN (насколько я понял) - замыкание. Т.е. если взять:
f x y = x + y
f' x -> \y -> x + y
,то в первом случае после скармливания функции одного аргумента (и редукции) мы получим PAP, а во втором - FUN. Ну, с натяжкой можно сказать, что лямбда и есть определение, но тут ведь не только лямбда, а еще и захваченный контекст (первый аргумент), таким образом, это замыкание. Т.е. мне подумалось после чтения, что FUN заключает в себе просто указатель на функцию в секции кода, а это не так. Может, я где-то что-то неправильно понял, а то и свое додумал, я себя не считаю достаточно компетентным, вот источник:
Привет.
Хотел бы выразить благодарность за ruhaskellbook, была проделана восхитительная работа. У меня вопрос по одной из глав, про STG. Там написано, что FUN - это определение функции. Не знаю, может быть, это специально для упрощения сделано, но все же считаю должным написать. Речь идет ведь об объектах кучи, а тело функции не лежит в куче, оно расположено в секции кода. А FUN (насколько я понял) - замыкание. Т.е. если взять:
,то в первом случае после скармливания функции одного аргумента (и редукции) мы получим PAP, а во втором - FUN. Ну, с натяжкой можно сказать, что лямбда и есть определение, но тут ведь не только лямбда, а еще и захваченный контекст (первый аргумент), таким образом, это замыкание. Т.е. мне подумалось после чтения, что FUN заключает в себе просто указатель на функцию в секции кода, а это не так. Может, я где-то что-то неправильно понял, а то и свое додумал, я себя не считаю достаточно компетентным, вот источник:
https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapObjects