Влияние побочных эффектов.

Mar 02, 2011 23:56

Как побочные эффекты мешают выводу типов, а точнее, почему в OCaml/F# взаимно рекурсивные определения надо помещать в группы let ... and ... and ....

ocaml, системы типов

Leave a comment

Comments 32

alexandermarkov March 2 2011, 21:43:05 UTC
One day, a disciple of another sect came to Xavier Leroy and said mockingly:

"The OCaml compiler seems very limited: why do you have to indicate when a function is recursive, cannot the compiler infer it?"

Xavier paused for a second, and replied patiently with the following story:

"One day, a disciple of another sect came to Xavier Leroy and said mockingly..."

Reply

thesz March 2 2011, 21:50:33 UTC
Вот-вот.

И расползаются эти and по всему коду.

Reply

alexandermarkov March 3 2011, 18:32:35 UTC
Никогда за собой такого не замечал.

Обычно с помощью and я соединяю пару-тройку мелких функций, когда лень думать, как сделать по-другому.

Reply

thesz March 3 2011, 19:38:35 UTC
А у меня тут же расползлись, когда я на F# попробовал писать.

Reply


geniepro March 3 2011, 05:21:29 UTC
Та проблема не в самих побочных эффектах, а в том, что программы пишутся в стиле бейсика -- строка за строкой сверху вниз идёт сразу же выполнение.
Если бы программы на Окамле оформлялись как в Паскале/Си -- описания типов, переменных, функций, и выполнение главной функции где-то там в конце текста программы -- то этой проблемы не было бы, имхо.

Reply

geniepro March 3 2011, 12:01:20 UTC
Возможно, у авторов Окамля было просто желание сделать однопроходный компилятор, вот и вылезли эти let rec...

Reply


thedeemon March 3 2011, 05:49:12 UTC
Что-то неубедительно.
1. Для определения рекурсивных частей reordering делать совершенно незачем. А значит, побочные эффекты никак тут не мешают.
2. Generalization step после определения рекурсии - что это и зачем? Насколько я помню, Хиндли-Милнер и без этого вполне справляется, сразу давая самый общий тип (он начинает с общих, конкретизируя по мере появления ограничений).

Reply

lionet March 3 2011, 07:09:05 UTC
3. Побочные эффекты в ocaml не вылезают на уровень type system. Такшта...

Reply

thesz March 3 2011, 08:28:32 UTC
Там есть ссылка на stackoverflow. Там можно повторить вопросы. ;)

Reply

thedeemon March 3 2011, 08:52:07 UTC
Посту почти два года. И вопросы уже задавали (про reordering в частности), ответов не последовало.

Reply


potan March 3 2011, 09:35:15 UTC
Ну я бы он простого let (не let rec) и в Haskell бы не отказался.
Вместо let x = ... in ... писать flip ($) ... (\x -> ...) не эстетично.

Reply

thesz March 3 2011, 09:38:27 UTC
Это ты о чём вообще?

Reply

potan March 3 2011, 09:49:24 UTC
О том, что let ... and ... and ... полезны и так.

Reply

thesz March 3 2011, 09:54:58 UTC
Чем это они полезны, если можно без них обойтись совершенно свободно, как это сделано в Хаскеле?

Reply


Leave a comment

Up