anton-k / ru-haskell-book

учебник по Haskell
Other
274 stars 24 forks source link

Неточное определение для FUN в главе про STG (Антон Круглов в вк) #91

Open anton-k opened 7 years ago

anton-k commented 7 years ago

Привет.

Хотел бы выразить благодарность за ruhaskellbook, была проделана восхитительная работа. У меня вопрос по одной из глав, про STG. Там написано, что FUN - это определение функции. Не знаю, может быть, это специально для упрощения сделано, но все же считаю должным написать. Речь идет ведь об объектах кучи, а тело функции не лежит в куче, оно расположено в секции кода. А FUN (насколько я понял) - замыкание. Т.е. если взять:

f x y = x + y
f' x -> \y -> x + y

,то в первом случае после скармливания функции одного аргумента (и редукции) мы получим PAP, а во втором - FUN. Ну, с натяжкой можно сказать, что лямбда и есть определение, но тут ведь не только лямбда, а еще и захваченный контекст (первый аргумент), таким образом, это замыкание. Т.е. мне подумалось после чтения, что FUN заключает в себе просто указатель на функцию в секции кода, а это не так. Может, я где-то что-то неправильно понял, а то и свое додумал, я себя не считаю достаточно компетентным, вот источник:

https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapObjects