• Haskell stg В понимании семантики stg у меня остались следующие отверстия: зачем нужен letrec (честно говоря я даже синтаксис letrec представляю себе не очень однозначно)? как исполняются primop'ы, насколько они далеки от ffi и могут ли возвращать коробкованные значения? в каком случае нужно форсировать вычисления связанные с раскоробкованными значениями? Последний момент вроде описан в Unboxed value as class citizens in a non-strict functional language. С остальным как-то совсем глухо.

Replies (3)

  • @ndtimofeev, let x = 1 in (let x = x in x) -> 1
    let x = 1 in (letrec x = x in x) -> |
  • @sopvop, Ммм… Я правильно понимаю что letrec считает имя биндинга годной свободной переменной? Но тогда мне всё равно непонятно зачем разделять let и letrec. Что должно так остро различать их с точки зрения кодогенератора? Также не очень понятно как дело обстоит с toplevel биндингами: рекурсивные они или нет?
  • @ndtimofeev, Именно.
    Насколько я понимаю разделено для "оптимизации" кодегена.
    И да, toplevel бинды видны в теле.