Кстати, я недавно, кажется, выработал Единственно Верный Способ Объяснения Монад – он сработал на умном парне, который начал учить хаскелл, но монады не знал – вроде, минут за 15 он их просек, хотя конечно надо еще проверить
Начать изучение в любом случае стоит с книги SICP. Она свободно доступна в инете в электронном виде на английском и русском языке; также свободно доступен курс видео-лекций от авторов на английском. Эту книгу уже столько раз восхваляли в интернете и в этой группе, что повторять восхваления не буду
По хаскеллу две самых лучших, но очень разных книжки – это "Real World Haskell" (она также свободно доступна в инете: //book.realworldhaskell.org/read/) и книга Richard Bird "Introduction to functional programming using Haskell".
Первая концентрируется на решении практических задач, вторая концентрируется на достижении мастерства в самом функциональном стиле проектирования и преисполнена невероятно красивых примеров. Любой уважающий себя хаскеллист должен прочитать обе
Вообще же учебных материалов по хаскеллу навалом. Достаточно зайти на //haskell.org/ и посмотреть в секцию "Learning". Если что-то становится непонятно – спрашивать в списке рассылки haskell-cafe@haskell.org или на IRC-канале #haskell @ chat.freenode.net. Коммунити хаскеллистов также, по-моему, не знает себе равных по уровню взаимоуважения и вежливости общения, желанию и умению помогать новичкам, и тем более по профессионализму (и там, и там сидят в числе прочих участников – десятки докторов наук). Так что можно смело спрашивать – без помощи не останешься.
Хаскелл, кстати, на несколько голов опережает все остальные языки программирования по возможностям многопоточного и параллельного программирования. У него есть:
- Обычная многопоточность на зеленых и не-зеленых нитях. Его зеленые нити и примитивы синхронизации работают быстрее эрланговских и неприлично быстрее "родных" нитей и примитивов ОС. К сожалению, родных средств распределенного программирования у хаскелла нет; правда, есть библиотеки.
- Неявный параллелизм
- Data Parallel Haskell
- Транзакционная память (STM)
См. //donsbot.wordpress.com/2009/09/03/parallel-pro...
Кстати, мне непонятно, как люди на ruby умудряются командной разработкой заниматься, он тоже весь из себя мета, и динамически типизированный.
2: в ФП языках есть огромное количество механизмов абстракции и повторного использования кода:
- Функции высшего порядка. Мощнее них, пожалуй, ничего и не придумаешь – например, большинство паттернов GOF в функциональных языках сводятся к простенькому применению ФВП и не заслуживают специального названия.
- Ленивые вычисления
- Классы типов
- Семейства типов
- Экзистенциальные типы (подходят для эмуляции некоторых фич ООП)
- view patterns
- Модули как пространства имен
- Модули в более мощном смысле этого слова в OCaml
- Монады
- …
"Прошу аргументировать."
1. "Опасность лиспа в том, что он слишком гибкий, и дает слишком мало гарантий корректности. Если несколько членов команды понапишут, например, своих "единственно верных" макросов на все случаи жизни, программа превратится в полную кашу"
2. Это скорее не аргумент, а вопрос: А какими средствами обеспечить например модульность и возможность заменять компоненты. Это основной козырь ОО подхода. Там для этого есть классы, интерфейсы, паттерны, пространства имен и т.д. А что есть в ФП языках ? Насколько этим просто воспользоваться ?
Сложность хаскелла – попробуй объяснить своим коллегам, что такое ContT. Или ладно, без Cont можно и обойтись. А вот почему у функций для работы с STArray именно такие типы и что они, блин, вообще означают
Опасность лиспа в том, что он слишком гибкий, и дает слишком мало гарантий корректности. Если несколько членов команды понапишут, например, своих "единственно верных" макросов на все случаи жизни, программа превратится в полную кашу. См. пост gaperton: //gaperton.livejournal.com/37289.html#cutid1
1 – Эрланг гораздо более медленный во всем, что НЕ касается многозадачности и сетевого ввода-вывода. В вычислительных задачах он почти такой же тормозной, как Ruby, или даже хуже.
2:
а) Да, тут не поспоришь.
б) А какие нужны инструменты?
в) Прошу аргументировать. Мне кажется, это не так.
1. Компилятор питона не из быстрых, это не для кого не секрет.
2. Я не пользуюсь ФП языком, не за то что он быстрый или медленный, а по следующим причинам:
a) Это не мэинстрим, потому меньше готовых решений, труднее найти специалистов
б) Как следствие первого пункта, меньше доступных инструментов.
в) Затруднена разработка в составе группы, ОО языки намного лучше с этим справляются.
Вместе с тем, я уважаю ФП, прежде всего за простоту и математическую основу. Изучать его надо, для расширения кругозора. Да и в последнее время многие ОО языки стали добавлять ФП приемы в свой арсенал.
Вывод мой отнюдь не глубокомысленный и к теме имеет такое же отношение как и ваш пост: если читать его с правильным настроем, вполне подбадривающий…
Для тех, кто не знает английского или ленится, ретранслирую:
Tornado – веб-фреймворк на питоне, написанный в Facebook с прицелом на масштабируемость.
Написанный на эрланге "влоб", без всяких ухищрений, примитивный веб-сервер рвет его на сцаные тряпки.
Можно было бы сказать, что дело в том, что веб-фреймворк тяжелый, а примитивный сервер – легкий, поэтому, дескать, можно простить масштабируемому фреймворку то, что он нихера не масштабируется – но дело в том, что эрланговский тяжелый веб-фреймворк Yaws тоже рвет Tornado на, пусть и чуточку менее сцаные, но тряпки.
ФП тут при том, что Erlang – функциональный язык, и тест следует воспринимать как очередной аргумент против странных утверждений, что-де функциональные языки – бесполезные игрушки.
Кстати, Лев Валкин – CTO в компании js-kit.com, у которой 600 тысяч коммерческих клиентов, и бОльшая часть серверного софта написана на Erlang+OCaml+Haskell (часть переписана с перла и С++ с сокращением кода в 4-5 раз).
"Лев Валкин измерил производительность веб-серверов на эрланге и питоне."
зависит от компиллятора и прокладки между стулом и клавой, фп здесь не причём.
24 сентября 2009 в 21:05
не ну это понятно что скачать мало… но я другое имел ввиду
24 сентября 2009 в 21:01
Как показывает практика и опыт предков – скачать мало )
24 сентября 2009 в 17:00
sicp я уже скачал…
24 сентября 2009 в 16:05
И то и другое, но сначала лисп (SICP)
24 сентября 2009 в 16:02
а что бы Вы порекомендовали haskell или lisp??
24 сентября 2009 в 15:04
спасибо
23 сентября 2009 в 23:02
Кстати, я недавно, кажется, выработал Единственно Верный Способ Объяснения Монад – он сработал на умном парне, который начал учить хаскелл, но монады не знал – вроде, минут за 15 он их просек, хотя конечно надо еще проверить
23 сентября 2009 в 21:02
А мне по хаскелу эта штука понравилась…
//learnyouahaskell.com/chapters
Кстати говоря, Харрисон и Филд у меня пошли гораздо легче SICPа
23 сентября 2009 в 20:03
Начать изучение в любом случае стоит с книги SICP. Она свободно доступна в инете в электронном виде на английском и русском языке; также свободно доступен курс видео-лекций от авторов на английском. Эту книгу уже столько раз восхваляли в интернете и в этой группе, что повторять восхваления не буду
По хаскеллу две самых лучших, но очень разных книжки – это "Real World Haskell" (она также свободно доступна в инете: //book.realworldhaskell.org/read/) и книга Richard Bird "Introduction to functional programming using Haskell".
Первая концентрируется на решении практических задач, вторая концентрируется на достижении мастерства в самом функциональном стиле проектирования и преисполнена невероятно красивых примеров. Любой уважающий себя хаскеллист должен прочитать обе
Вообще же учебных материалов по хаскеллу навалом. Достаточно зайти на //haskell.org/ и посмотреть в секцию "Learning". Если что-то становится непонятно – спрашивать в списке рассылки haskell-cafe@haskell.org или на IRC-канале #haskell @ chat.freenode.net. Коммунити хаскеллистов также, по-моему, не знает себе равных по уровню взаимоуважения и вежливости общения, желанию и умению помогать новичкам, и тем более по профессионализму (и там, и там сидят в числе прочих участников – десятки докторов наук). Так что можно смело спрашивать – без помощи не останешься.
23 сентября 2009 в 19:03
А какую книжку посоветуете по хаскелл? и вообще какой ФП начать изучать?
23 сентября 2009 в 17:04
Хаскелл, кстати, на несколько голов опережает все остальные языки программирования по возможностям многопоточного и параллельного программирования. У него есть:
- Обычная многопоточность на зеленых и не-зеленых нитях. Его зеленые нити и примитивы синхронизации работают быстрее эрланговских и неприлично быстрее "родных" нитей и примитивов ОС. К сожалению, родных средств распределенного программирования у хаскелла нет; правда, есть библиотеки.
- Неявный параллелизм
- Data Parallel Haskell
- Транзакционная память (STM)
См. //donsbot.wordpress.com/2009/09/03/parallel-pro...
23 сентября 2009 в 17:03
Кстати, мне непонятно, как люди на ruby умудряются командной разработкой заниматься, он тоже весь из себя мета, и динамически типизированный.
2: в ФП языках есть огромное количество механизмов абстракции и повторного использования кода:
- Функции высшего порядка. Мощнее них, пожалуй, ничего и не придумаешь – например, большинство паттернов GOF в функциональных языках сводятся к простенькому применению ФВП и не заслуживают специального названия.
- Ленивые вычисления
- Классы типов
- Семейства типов
- Экзистенциальные типы (подходят для эмуляции некоторых фич ООП)
- view patterns
- Модули как пространства имен
- Модули в более мощном смысле этого слова в OCaml
- Монады
- …
23 сентября 2009 в 16:03
"Прошу аргументировать."
1. "Опасность лиспа в том, что он слишком гибкий, и дает слишком мало гарантий корректности. Если несколько членов команды понапишут, например, своих "единственно верных" макросов на все случаи жизни, программа превратится в полную кашу"
2. Это скорее не аргумент, а вопрос: А какими средствами обеспечить например модульность и возможность заменять компоненты. Это основной козырь ОО подхода. Там для этого есть классы, интерфейсы, паттерны, пространства имен и т.д. А что есть в ФП языках ? Насколько этим просто воспользоваться ?
23 сентября 2009 в 8:04
хм… ну наверно со временем пойму… спасибо
23 сентября 2009 в 8:03
Сложность хаскелла – попробуй объяснить своим коллегам, что такое ContT. Или ладно, без Cont можно и обойтись. А вот почему у функций для работы с STArray именно такие типы и что они, блин, вообще означают
Опасность лиспа в том, что он слишком гибкий, и дает слишком мало гарантий корректности. Если несколько членов команды понапишут, например, своих "единственно верных" макросов на все случаи жизни, программа превратится в полную кашу. См. пост gaperton: //gaperton.livejournal.com/37289.html#cutid1
23 сентября 2009 в 7:04
ну сложность хаскелла я особо наверно пока не понял, вроде пока все понятно, может со временем пойму. А чем лисп опасен?
23 сентября 2009 в 0:01
Думаю, да. Хаскелл слишком сложный, лисп слишком опасен в неопытных руках, и читаемость его, скажем так, на любителя.
22 сентября 2009 в 21:00
а разве у лиспа и хаскела меньше шансов как Вы говорите пойти в массы?
22 сентября 2009 в 20:01
Ну из функциональных языков F#, Scala и Erlang, несомненно, наиболее перспективные в плане шансов пойти в массы.
Но это не значит, что не надо учить лисп и хаскелл
22 сентября 2009 в 19:01
Есть предположение, что если F# пойдет в массы, то мейнстрим не заставит себя ждать
22 сентября 2009 в 18:01
1 – Эрланг гораздо более медленный во всем, что НЕ касается многозадачности и сетевого ввода-вывода. В вычислительных задачах он почти такой же тормозной, как Ruby, или даже хуже.
2:
а) Да, тут не поспоришь.
б) А какие нужны инструменты?
в) Прошу аргументировать. Мне кажется, это не так.
22 сентября 2009 в 17:05
1. Компилятор питона не из быстрых, это не для кого не секрет.
2. Я не пользуюсь ФП языком, не за то что он быстрый или медленный, а по следующим причинам:
a) Это не мэинстрим, потому меньше готовых решений, труднее найти специалистов
б) Как следствие первого пункта, меньше доступных инструментов.
в) Затруднена разработка в составе группы, ОО языки намного лучше с этим справляются.
Вместе с тем, я уважаю ФП, прежде всего за простоту и математическую основу. Изучать его надо, для расширения кругозора. Да и в последнее время многие ОО языки стали добавлять ФП приемы в свой арсенал.
Вывод мой отнюдь не глубокомысленный и к теме имеет такое же отношение как и ваш пост: если читать его с правильным настроем, вполне подбадривающий…
22 сентября 2009 в 17:02
спасибо…
22 сентября 2009 в 16:03
ghc, конечно
22 сентября 2009 в 16:00
Может вопрос не в тему.
Какой компилятор посоветуете для haskell?
22 сентября 2009 в 14:04
Ооо, поздравляю
22 сентября 2009 в 11:04
Я, кстати, хвастался, что сумел найти и купить SICP в русском издании?
22 сентября 2009 в 9:04
Антон, почитай статью "Обзор литературы об ФП" в журнале fprog.ru Если понадобится еще информация – спрашивай здесь.
22 сентября 2009 в 9:03
А есть "ФП для чайников?" 0_о для себя спрашиваю
22 сентября 2009 в 7:03
Для тех, кто не знает английского или ленится, ретранслирую:
Tornado – веб-фреймворк на питоне, написанный в Facebook с прицелом на масштабируемость.
Написанный на эрланге "влоб", без всяких ухищрений, примитивный веб-сервер рвет его на сцаные тряпки.
Можно было бы сказать, что дело в том, что веб-фреймворк тяжелый, а примитивный сервер – легкий, поэтому, дескать, можно простить масштабируемому фреймворку то, что он нихера не масштабируется – но дело в том, что эрланговский тяжелый веб-фреймворк Yaws тоже рвет Tornado на, пусть и чуточку менее сцаные, но тряпки.
ФП тут при том, что Erlang – функциональный язык, и тест следует воспринимать как очередной аргумент против странных утверждений, что-де функциональные языки – бесполезные игрушки.
Кстати, Лев Валкин – CTO в компании js-kit.com, у которой 600 тысяч коммерческих клиентов, и бОльшая часть серверного софта написана на Erlang+OCaml+Haskell (часть переписана с перла и С++ с сокращением кода в 4-5 раз).
22 сентября 2009 в 7:01
Александр, почитай пост прежде чем изрекать столь глубокомысленные выводы.
22 сентября 2009 в 4:05
"Лев Валкин измерил производительность веб-серверов на эрланге и питоне."
зависит от компиллятора и прокладки между стулом и клавой, фп здесь не причём.
21 сентября 2009 в 22:04
Жека, ты быстрый, очень. =)
За журнал – спасибо. Завтра распечатаю, буду читать.
21 сентября 2009 в 22:03
28 сентября выйдет 2й номер журнала //fprog.ru. Он будет большой частью состоять из описаний применения ФП в продакшн-системах.
Лев Валкин измерил производительность веб-серверов на эрланге и питоне. Эрланг всех рвет на сцаные тряпки. //lionet.livejournal.com/42016.html