История изменений
Исправление
dave,
(текущая версия)
:
А я что-то говорил про ленивость?
Так ты еще из под анонима пишешь?
Речь завели о том, что «Чистые функции оптимизируются и распараллеливаются очень легко.» Привожу дословно.
Ну, что же. Много ли языков, где чистота гарантируется на уровне языка? И много ли среди них языков неленивых, т.е. с энергичной моделью вычислений? По правда говоря, среди популярных языков не знаю ни одного такого. Зато немного знаком с хаскелем, который гарантирует чистоту, и который является ленивым.
Значит, предполагаю, что имелся в виду все же хаскель. Тогда вспомним, что в Real World Haskell есть целая глава, посвященная распараллеливанию. И что, у вас не создалось ощущения чего-то неправильного после ее прочтения? Сколько там надо огорода городить чтобы распараллелить! Это раз.
Во-вторых, по умолчанию много-поточный рантайм хаскеля почему-то отключен в ghc (отключен -threaded). Значит, не все там так благополучно. И это можно понять.
Может быть, дело в санках (thunks)? Мало того, что они непредсказуемы, а потому не всегда ясно, что и где будет исполняться в каком потоке, так эти санки еще требуют некоторой блокировки при первом обращении к санку в много-поточном рантайме (или в Microsoft Research сидят такие кудесники?). Возьмем для примера реализацию Lazy из .NET. Блокировка там присутствует. Ну, а куда без нее?
Нет, конечно, если рантайм немногопоточный, то тогда блокировки для санков не нужны, но мы же говорили о том, что «Чистые функции оптимизируются и распараллеливаются очень легко.»
Тем не менее, не оставляю надежды, что люди из Microsoft Research в тысячи раз умнее меня, и что-нибудь придумают эдакое.
Исходная версия
dave,
:
А я что-то говорил про ленивость?
Так ты еще из под анонима пишешь?
Речь завели о том, что «Чистые функции оптимизируются и распараллеливаются очень легко.» Привожу дословно.
Ну, что же. Много ли языков, где чистота гарантируется на уровне языка? И много ли среди них языков неленивых, т.е. с энергичной моделью вычислений? По правда говоря, среди популярных языков не знаю ни одного такого. Зато немного знаком с хаскелем, который гарантирует чистоту, и который является ленивым.
Значит, предполагаю, что имелся в виду все же хаскель. Тогда вспомним, что в Real World Haskell есть целая глава, посвященная распараллеливанию. И что, у вас не создалось ощущения чего-то неправильного после ее прочтения? Сколько там надо огорода городить чтобы распараллелить! Это раз.
Во-вторых, по умолчанию много-поточный рантайм хаскеля почему-то отключен в ghc (отключен -threaded). Значит, не все там так благополучно. И это можно понять.
Дело в санках (thunks). Мало того, что они непредсказуемы, а потому не всегда ясно, что и где будет исполняться в каком потоке, так эти санки еще требуют некоторой блокировку при первом обращении к санку в много-поточном рантайме (или в Microsoft Research сидят такие кудесники?). Возьмем для примера реализацию Lazy из .NET. Блокировка там присутствует. Ну, а куда без нее?
Нет, конечно, если рантайм немногопоточный, то тогда блокировки для санков не нужны, но мы же говорили о том, что «Чистые функции оптимизируются и распараллеливаются очень легко.»
Тем не менее, не оставляю надежды, что люди из Microsoft Research в тысячи раз умнее меня, и что-нибудь придумают эдакое.