?

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 11:49 am (UTC)
(Link)
(а, list проимпортирован - снимается)
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:antilamer
Date:November 8th, 2009 07:54 am (UTC)
(Link)
Вообще я тоже согласен, что в некотором смысле монады моделируют императивные вычисления, но мне кажется, что акцентировать на этом внимание стоит лишь тогда, когда человек уже хорошенько поймет, что такое монада.

Абсолютно все случаи непонимания монад, что я встречал, связаны именно с превратным и упрощенным представлением о них как о "всего лишь" способе эмуляции старых добрых императивных вычислений.

Представление упрощенное потому, что люди забывают о design dimensions тех же императивных языков и забывают, что императивный язык может быть, например, многозначным (List), недетерминированным (статистические распределения), асинхронным (F# async), поддерживающим "присваивание" только к одной-единственной "глобальной переменной" (State), поддерживающим исключения (Error), поддерживающим простой останов при первой неудаче (Maybe), основанным на стиле передачи продолжений (Cont), неявно откусывающим куски от некоторой строки (Parsec), комбинирующим в себе какие-то из этих свойств (трансформеры), инкрементальным (Monads for incremental computing) и т.п.

Т.е. проблема в том, что "императивный язык" - слишком нечеткое понятие, которое слишком легко недопонять (не из-за его сложности, а из-за своего упрямства и самоуверенности), оставаясь при этом в полной уверенности, что тебе все понятно, просто монады - сложная херня для простых вещей.
[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:trinkomali
Date:November 7th, 2009 09:59 pm (UTC)
(Link)
программерского )
From:rssh
Date:November 7th, 2009 10:14 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:lionet
Date:November 9th, 2009 04:00 am (UTC)
(Link)
Суперкоротко:
a) проблема с проталкиванием новых библиотек и развитием старых в ocaml; игнорирование проблемы multicore; stale libraries; комьюнити, не ориентированная на развитие базы языка.
b) нерабочий hipe (and noone cares enough), не[совсем]рабочие и не фиксящиеся годами базовые библиотеки. пассивное отношение к разумной критике основных дифференцирующих инструментов (mnesia, dets) (типа: не работает для вас - так мы ничего и не обещали).

Всё это, конечно, в сравнении с Haskell или даже C#.
[User Picture]
From:thesz
Date:November 9th, 2009 08:47 pm (UTC)
(Link)
Я начинаю подозревать, что с моей дихотомией "нужный и интересный" и следствием из неё - лучше выбрать интересный, чем нужный, - я не так уж и не прав.
[User Picture]
From:gaperton
Date:November 9th, 2009 09:28 pm (UTC)
(Link)
С чего это тебе в голову-то пришло? :)
[User Picture]
From:thesz
Date:November 9th, 2009 10:32 pm (UTC)
(Link)
С чего это мне в голову пришло что конкретно?
[User Picture]
From:gaperton
Date:November 9th, 2009 10:51 pm (UTC)
(Link)
Как что?

Что с твоей дихотомией "нужный и интересный" и следствием из неё - лучше выбрать интересный, чем нужный, - ты не так уж и не прав.

Ты ответил на комментарий, что начинаешь это подозревать. Вот мне и интересно - что именно в посте, на который ты отвечаешь, натолкнуло тебя на эти подозрения.
[User Picture]
From:thesz
Date:November 9th, 2009 11:02 pm (UTC)
(Link)
Товарищам из OCaml и Erlang не интересно исправлять библиотеки потому, что они уже удовлетворяют их нужды.

Поскольку OCaml и Erlang, скорее, нужные, чем интересные, языки, то это совпадает с моим соображением насчёт дихотомии и выбора.

Возникает проблема с C#, который нужный, но ситуация лучше, чем в более интересных OCaml и Erlang. Здесь, я думаю, интерес просто-напросто куплен. "Почему бы и нет" (С) ЧиП.
[User Picture]
From:gaperton
Date:November 9th, 2009 11:07 pm (UTC)
(Link)
Вынужден признать, что да, что-то в этом есть. :)
[User Picture]
From:pufpuf
Date:November 8th, 2009 11:30 am (UTC)
(Link)
Именно эти цитаты привел просто как иллюстрацию из последних дискуссий (то, что было под рукой), чтобы долго не рыться в архивах. Могу даже в comp.lang.lisp найти что-то подобное.
[User Picture]
From:permea_kra
Date:November 8th, 2009 09:08 am (UTC)
(Link)
Если уж цитируете, то цитируйте целиком: __general-purpose__ языки с динамической типизацей.
[User Picture]
From:pufpuf
Date:November 8th, 2009 11:16 am (UTC)
(Link)
мне кажется, это ничего не меняет
[User Picture]
From:permea_kra
Date:November 8th, 2009 11:18 am (UTC)
(Link)
Вам кажется.
[User Picture]
From:pufpuf
Date:November 8th, 2009 11:32 am (UTC)
(Link)
В контесте этих дискуссий речь не шла о special-purpose языках
[User Picture]
From:permea_kra
Date:November 8th, 2009 11:54 am (UTC)
(Link)
Хм. Тогда я не понимаю, что такого ценного в динамической типизации, чтобы тащить её во взрослые применения. Я только про один большой успешный проект на динамически типизированных знаю - emacs, и то он довольно сомнительный (в том смысле, что елисп, емнип, заточен под написание емакса, то есть очень даже domain-specific, да и размеры там не то чтоб очень большие).
[User Picture]
From:love5an
Date:November 8th, 2009 04:05 pm (UTC)
(Link)
[User Picture]
From:permea_kra
Date:November 8th, 2009 04:17 pm (UTC)
(Link)
Хрен его знает, незнаком с областью.
[User Picture]
From:love5an
Date:November 8th, 2009 04:23 pm (UTC)
(Link)
а вы ценники посмотрите, например, и заказчиков
[User Picture]
From:permea_kra
Date:November 8th, 2009 04:48 pm (UTC)
(Link)
Мать мать мать...

Во-1ых Their names are generally given as constituted at the time of purchase, and current ownerships may differ after mergers and takeovers, а названия части заказчиков мне говорят чуть более чем ничего
Во-2ых к ней есть база, которая куда интересней собственно программы, и даже если сама программа говно, она может выехать за счёт базы (авторы наверняка ориентируются в структуре базы лучше других, поэтому написать к ней альтернативную смотрелку - это вопрос)
В-3их по крайней мере для части заказчиков деньги за программу - тьфу, они могут купить просто на попробовать -).
В-4ых, я понятия не имею о сложности используемых в программе моделей и структур, поэтому проникнуться масштабностью не смогу при всём желании.

Я знаю что в некоторых областях есть проекты на динамических языках. Но модели в тех областях, с которыми я знаком, относительно простые, а проекты оказываются сравнительно маленькими по объёму. Здесь лимитирующим фактором для авторов оказывается явно не фичастость языка, а простота его освоения, поскольку проекты пишут не программисты. perl осваивается легко, и часть QSAR на нём вполне пишется (сам пользовался им для анализа вывода счётных программ. Это не мешает относится к языку критически и периодически его попинывать. ) Fortran осваивается сравнительно просто, но назвать его general-purpose у меня язык не поворачивается.

Да, возможно из моей лужи болото выглядит иначе, чем из вашей. Ну так и откройте мне ваш вид, если вы хотите что-то показать.

Уф, накипело. Перлист там, перлист сям (в оффлайне), а тут ещё склоняют меня, да ещё и явно не понимая посыла фразы. Воистину можно уверовать в правоту Гоблина.
[User Picture]
From:love5an
Date:November 8th, 2009 05:10 pm (UTC)
(Link)
Пойнт в том, что у того же лиспа(как семейства языков) в истории огромное множество success stories в совершенно различных областях - от подсистем для космических телескопов до тридэ игрушек, и то, что, несмотря на это, люди из некоторых сообществ имеют наглость разводить FUD и троллинг на тему опупенности и всеприменимости некоего одного языка и бесполезности и непрактичности лиспов, и, вообще, языков с динамической типизацией, неслабо раздражает.
[User Picture]
From:permea_kra
Date:November 8th, 2009 05:21 pm (UTC)
(Link)
А то, что некоторые не умеют и не хотят уметь читать склоняет к вере в обречённость рода людского.
[User Picture]
From:thesz
Date:November 9th, 2009 08:49 pm (UTC)
(Link)
Тут важней динамика, чем история.
[User Picture]
From:love5an
Date:November 9th, 2009 11:38 pm (UTC)
(Link)
Полезность лиспа, и динамической типизации вообще, доказывает история. А полезность хаскеля?
[User Picture]
From:thesz
Date:November 10th, 2009 08:48 am (UTC)
(Link)
Доказывает динамика.
[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)
А ссылка интересная - спасибо !
[User Picture]
From:thesz
Date:February 26th, 2010 09:24 am (UTC)
(Link)
Всегда пожалуйста. ;)
Powered by LiveJournal.com