?

Log in

No account? Create an account

rssh

Previous Entry Share Next Entry
02:30 am: Наверное надо высказаться о двудольных графах
Раз уж пошла такая пьянка , то и я выскажусь
1. А что такого сложного в монадах ? То есть где заковырка, которую народ не может понять ?
2. Гон Севы - это конечно провокация. То есть претензий на серьезную критику как-то особо и нет: это критика отдельных представителей сообщества а не языка. Нафига потом демагогия в виде подмены понятий и замены "есть люди в сообществи, которые используют Haskell в основном для обучения" на "Прагматика Haskell'а заключается в том, что он существует прежде всго для исследования... Haskell'а" я не понимаю.
Прагматика, кстати, вещь контекстно-зависимая, то есть прагматика одной и той-же штуки у разных субъектов разное, поэтому утвержление о какой-то 'общей' прагматике языка заведомо некорректны.
3. А вобще основная проблема Хаскеля в том, что он однопарадигмный. Поэтому и нишевый. Можно представить язык в виде какого-то стенда, на котором строится программа и набора точек зрения (дорожек) вокруг этого стенда и инструментов. Однопарадигменный язык предполагает что есть как-бы единственная точка, встав на которую видишь предмет наилучшим образом. Мультипарадигменный - что можно обойти вокруг, выбрать то расстояние которое надо и тот инструмент, который удобнее. Те=же монады: они сложно описываются просто из-за того, что это эмуляция императивных вычислений на функциях. Императивные программисты имеют право смеятся над монадами ровно столько, сколько хаскелисты смеются над эмуляцией функций императивными вычислениями в 'обычных' языках программирования.

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

По крайней мере в статье, на которую ссылается стандартная библиотека, написано:

Wadler’s main contribution was to show that monads, previously studied in depth in the context of abstract category theory [16], could be used as a practical method for structuring functional programming, and particularly for modelling ‘impure’ features in a purely functional setting.

Согласен что моя фраза не вполне точна, но тем не менее, мне кажеться что в тексте она вполне адекватна.


Tags: ,

Comments

[User Picture]
From:jtootf
Date:November 7th, 2009 01:22 am (UTC)
(Link)
Те=же монады: они сложно описываются просто из-за того, что это эмуляция императивных вычислений на функциях

accumMap = snd . mapAccumL (\acc list -> (acc + 1, ((map (+acc)) . accumList) list)) 0
    where accumList = snd . mapAccumL (\acc elem -> (acc + 1, elem + acc)) 0


императивный цикл по двум переменным как он есть - и ни одной монады. аналогично монада List, скажем, никакого отношения к императивному программированию не имеет
From:rssh
Date:November 7th, 2009 11:45 am (UTC)
(Link)
А что такое mapAccumL ?
From:rssh
Date:November 7th, 2009 09:44 pm (UTC)
(Link)
Да ну, сравни с
import List
import Control.Monad.State

accuMap::[[Int]]->[[Int]]

accuMap lst = evalState (am lst) 0
 where
  am [] = return []
  am (h:t) = do
                acc <- get
                put (acc+1)
                rest <- am t
                return $ (map (+acc) (evalState (al h) 0)):rest
    where
     al [] = return []
     al (h:t) = do
                  acc <- get
                  put (acc+1)
                  rest <- al t
                  return $ (h+acc):rest


разница все таки есть ;)

// тем более я же не писал что кроме монад другую эмуляцию сделать нельзя, или что монады ни длч чего другого непригодны
[User Picture]
From:antilamer
Date:November 7th, 2009 06:31 am (UTC)
(Link)
> mapM (\x -> [x-1, x+1]) [1,2,3]
[[0,1,2],[0,1,4],[0,3,2],[0,3,4],[2,1,2],[2,1,4],[2,3,2],[2,3,4]]

Ну и где тут эмуляция императивных вычислений?

Вот это-то в них и сложно, что они похожи на эмуляцию императивных вычислений, но ею не являются :)
From:rssh
Date:November 7th, 2009 10:13 pm (UTC)
(Link)
Ну, наверное, привнос императивщины в List состоит в том, что можно написать
do { x<-[1,2,3]; y<-[2,3,4]; return (x+y) }


Вобще мне кажеться это придирки к словам - я же не говорю, что технически монады нельзя приспособить ни для чего, кроме эмуляции императивных вычислений. Сейчас попробую как-то перефразировать эту фразу в посте.
[User Picture]
From:trinkomali
Date:November 7th, 2009 09:16 pm (UTC)
(Link)
кля.
я не понимать хуиз монады и как их жрать
доктор, скажите - я окончательно потерян для общества? (
From:rssh
Date:November 7th, 2009 09:49 pm (UTC)
(Link)
Это смотря какого ;)
[User Picture]
From:pufpuf
Date:November 7th, 2009 10:31 pm (UTC)
(Link)
Категорически не согласен с тем, что я гоню. Конечно, как и любое мнение, это ангажировано и субъективно. Но для него есть определенные основания, иначе бы не было столько людей, его в той или иной степени разделяющих.

Одно из оснований, это то, что, как я сказал на Хабре, Haskell-комьюнити глобально занимается троллингом, распространяет FUD: а именно, что Haskell -- это решение всех проблем разработки. На остальные языки и подходы они смотрят так: OCaml еле терпят, а создателей динамических языков "надо расстреливать в профилактических целях" :) (Это, конечно, не значит, что, например, ADEpt троллит, наоборот его всегда интересно почитать. Но, в целом, такая тенденция на мой взгляд прослеживается очень основательно).
Я сказал в заметке, по сути: "деньги на стол" (или как правильно перевести "show me the money"?). Где примеры, что Haskell действительно решает все проблемы и не приносит вместо них новые? И не игрушечные алгоритмы (притом, что даже и те умудряются запутать), и не группу математиков, которые с его помощью решили какую-то приближенную к математике задачу. Нет, взял бы кто-то и сравнил, например, darcs, git и mercurial: метрики по коду, модульность, насколько легко писать расширения, быстродействие и т.д...

На счет подмены понятий: без сообщества любой язык мертвый; а сообщество идет в форватере создателей языка, да и во многом формирует направление его развития. Поэтому претензии к сообществу Haskell'а -- это именно претензия к прагматике языка, поскольку, по моему мнению, имеет место изоморфизм.

А ФП в целом -- это, конечно, очень важно и нужно, не понимать и не использовать -- просто глупо. Главное, без фундаментализма. И на счет однопарадигменности -- конечно, согласен.

И, наконец, монады -- это, действительно, очень просто: кое-что по этому поводу написал, и добавлю еще. Но только вот то, что монады -- это самый удачный подход к абстракции вычислительных процессов (могу найти цитаты) -- это тоже FUD. Во всяком случае гипотеза, которую, мне кажется, доказать не удастся.
From:rssh
Date:November 7th, 2009 11:40 pm (UTC)
(Link)
Если у тебя претензии у некоторому множеству русскоязычных пользователей Хаскелля, троллящих у себя в блогах и нереферируемых источниках, то надо говорить об этом сообществе а не о языке. Если ты думаешь, что это сообщество определяет развития языка - посмотри удельный вес контрибов представителей этого множества в hackageDB

Что касается использования в индустрии - ну какие-то вещи есть, например опыт написание операционной системы: http://web.cecs.pdx.edu/~mpj/pubs/plos07.html
Иди индустриальный консорциум:http://industry.haskell.org/partners
В принципе, тесмпы коммерческого применения и поддержкм сравнимо с OСaml

Серебрянной пулей этот язык, естественно не является. Но жизнь там проистекает и много хорошиз вещей придумывается -- настоящее haskell коммюнити действительно производит смысл.
[User Picture]
From:lionet
Date:November 8th, 2009 08:31 am (UTC)
(Link)
Если разделишь мнения на разные банки, окажется, что разные люди из "хаскель-комьюнити" имеют разную агенду и преследуют разные цели. Сложишь лебедя, рака и щуку — получишь ядерную смесь.

Между прочим, я (aka "FUD" и "еле терпят") работаю как раз на OCaml и Erlang, и порождаю кода много больше на них, чем на Haskell. И статус того, что по факту происходит в комьюнити этих языков, меня печалит.
[User Picture]
From:thesz
Date:November 8th, 2009 11:06 am (UTC)
(Link)
>И статус того, что по факту происходит в комьюнити этих языков, меня печалит.

Ты про OCaml и Erlang?

А что с ними не то?
[User Picture]
From:permea_kra
Date:November 8th, 2009 09:08 am (UTC)
(Link)
Если уж цитируете, то цитируйте целиком: __general-purpose__ языки с динамической типизацей.
[User Picture]
From:thesz
Date:February 23rd, 2010 09:56 pm (UTC)
(Link)
>А вобще основная проблема Хаскеля в том, что он однопарадигмный.

О, да!

Известно изречение, что "Хаскель - лучший императивный ЯП".

И OOHaskell: supports all the conventional OO features plus more advanced ones, including first-class lexically scoped classes, implicitly polymorphic classes, flexible multiple inheritance, safe downcasts and safe co-variant arguments. Haskell indeed can support width and depth, structural and nominal subtyping.

Не говоря уж про программирование в ограничениях и тп.
From:rssh
Date:February 25th, 2010 08:49 am (UTC)
(Link)
ну что со стороны пуристов мир выглядит совсем по другому - это понятно ;)
From:rssh
Date:February 25th, 2010 09:01 am (UTC)
(Link)
А ссылка интересная - спасибо !
Powered by LiveJournal.com