Да. Но была надежда - до появления внятной информации о perl6. Это несколько печально, для некоторых задач perl весьма удобен. Например, описанная вами задача (http://users.livejournal.com/_adept_/74058.html) решается на нем надежнее и проще.
я оставил там комментарий. в принципе, статья хорошая - именно, чтобы заинтересовать людей. про альфа и бета редукции и ФП, можно будет почитать на русском после окончания перевода "Introduction to Functional Programming" - у харрисона очень хорошо там написано
Во-первых, спасибо за общественно-полезное дело. Согласен с alexott, для того, чтобы заинтересовать, статья в самый раз. Можно было бы собрать большее примеров _практического_ применения - финансовая аналитика на Haskell в банке Credit Suisse, применение в криптографии, security - Galois Connections. Все-таки не всех впечатлит проект Эйлера.
В терминологии, на мой взгляд, есть огрехи, но в такого рода статье это несущественно.
ОО-полиморфизм - это inclusion polymorphism (согласно L.Cardelli), ad-hoc polymorphism - это перегрузка. И каким образом переименование переменных (альфа-конверсия) позволяет оптимизировать программы?
За примеры низачот. mldonkey хорош только на безрыбьи, ejabberd -- со своими закидонами притча воязыцах, кто пользуется darcs'ом я не знаю, даже у hg аудитория больше...
А mldonkey и ejabberd представляют собой типичную болезнь OSS -- если есть что-то хоть как-то работающее, то с большой вероятностью оно единственным и останется, хотя бы и было качеств поганых.
Ну, удобство/неудобство/закидоны - они как бы мало зависят от языка, больше от архитектуры, подхода и т.п. Я ж не говорил, что приведу примеры _хорошего_ софта, я привел примеры просто софта :)
В принципе, критика по делу, но она - деструктивная :) Давай альтернативные примеры :)
Нету конструктивных. Ходят слухи что в AMD дофига софта на лиспе, еще где-то, чуть не в Боинге, etc. Вообще -- пойти на сайт того же францз-лиспа и посмотреть, там список впечатляющий. только не подтверждён теми, кто в нём упомянут :)
Если не конкретный софт, а подобные слухи или ссылки на людей, использующих ФП в работе в известных компаниях, то можно упомянуть: Главные разработчики GHC, Simon Peyton Jones (http://research.microsoft.com/~simonpj/) и Simon Marlow (http://research.microsoft.com/~simonmar/), работают под крылом Microsoft. Ralf Laemmel (http://blogs.msdn.com/ralflammel/) работает там же. Как говорил Винни Пух, это неспроста - все "революционные" изменения в C# попадут туда из Haskell. Philip Wadler, один из главных авторитетов в мире CS и Haskell в частности, работал над generics в Java (http://homepages.inf.ed.ac.uk/wadler/topics/gj.html). Автор блога Good Math, Bad Math (http://www.scienceblogs.com/goodmath/) Mark Chu-Carroll работает в Гугле. Лиспер Питер Норвиг (http://norvig.com/) работает в Гугле. Выдающаяся личность современности, Олег Киселев (http://okmij.org/ftp), взрывающий людям мозг при помощи Haskell, Scheme и Ocaml, работает на американских военных (https://www.fnmoc.navy.mil/PUBLIC/index.html). John Harrison (http://www.cl.cam.ac.uk/~jrh13/), известный своими учебниками по ФП, работает в Intel. Joel Reymont (http://wagerlabs.com/) - вы должны были заметить это имя, если изредка читаете мейл-листы Haskell, Ocaml, Erlang. Фрилансер, поднимает довольно-таки сложные проекты в одиночку (игровой сервер, финансовый софт), используя все вышеупомянутые технологии. Список можно продолжать.
Все вот эти ``работает там-то'' не очень интересны, потому что я-то знаю, что у таких компаний еак Гугл, Интел и Майкрософт есть специальный класс людей, которые формально работают, а реально выхода от них никто не ожидает (хотя иногда он случается, и тогда выигрыш -- ОГО-ГО!!!) -- т.е. фактически академическая наука внутри корпорации... Мало кто так крут, что бы оказатся в таких условиях...
И чем поможет FP (прив сём моем к нему уважении) обычному среднему оффисному кодеру -- не ясно. А таких программистов -- 99.9%
Ну, я и на JavaScript так пишу, и на perl (на питоне вовсе не пишу), но это именно крохотные кусочки. Они проникают, конечно. Но всё же в основной массе я бы их не считал.
Так же как любой программист, пишушщий Make-файл пишет на прологе. Но это не значит, что пролог -- промышленный язык :)
Т.е. filter p (map f list) пишется и на plain c (ладно, ладно, да, memory manahment). Это вопрос библиотеки по сути для оффисного программиста :) Знать FP для того, что бы этими пользоватся, не надо.
(мы, имхо, стремительно катимся ко спору о вкусах)
Я бы сказал, что знание о том, что можно писать filter p (map f list) ценно не тем, что какой-то там язык дает возможно так написать, а ценно само по себе. Например, тем, что человек будет видеть возможности для генералиации там, где они есть, и использовать их.
Можно я еще резко вильну от конкретных паттернов кодирования к, например, type inference при статической типизации в контексте фразы "в чем польза от FP для офисного программера"? Будет ли обычному офисному кодеру польза от того, что ему не прийдется писать руками сигнатуры типов для всех или части функций? несомненно будет, особенно при рефакторинге кода.
Соответственно, даже если офисный программер пишет на языке без type inference, но знает о нем, то при необходимости выбрать язык для задачи/проекта (такое редко, но бывает) потенциально сможет облегчить себе жизнь.
Ну, и на закуску можно вспомнить хороший пример от, кажется, Пола Грэхема. Офисный программинг - это дело тоже непостоянное. 8 лет тому назад ява была экзотикой, а приложения полагалось писать только на С++. Сегодня в яве появляются generics и closures - еще один шаг в направлении ФП. И появляются отнюдь не потому, что это модно звучит ... Раз появляются - то это кому-то нужно.
Ну, а проекты фрилансера -- это безумие для заказчика. Потому что что они будут делать через год для развития, кроме как нанимать ЕГО ЖЕ -- не ясно. Такая первая доза бесплатно.
Проблемы экономического и организационного характера, естественно, имеют значение. Но т.к. мы обсуждаем статью для программистов, лучше сфокусироваться на технических проблемах, которые лучше решаются в рамках ФП. Пример Реймонта показывает, что сложность проектов, которые можно реализовать в сжатые сроки в одиночку, довольно высока; решаемые проблемы - не академические, а практические; я уверен, что Реймонт, пользуясь "игрушками для математиков", заработал совершенно реальные деньги. Это важный момент, т.к. компаний, применяющих ФП на всю катушку, немного - можно повысить _собственную_ эффективность, решать _собственные_ локальные задачи на ФЯ, работая где угодно.
Я вот не решил ни одной локальной задачи средствами ФП. Потому как мне, как тупому админу никода не понять зачем люди придумали 1. этот нечеловеческий синтаксис 2. монады для IO Поэтому тупо фигачу на python. Жаль что функциональный подход в нем как-то совершенно неразвит. Хотя я неверно хочу невозможного.
Монады - это долгая песня в дюнах, поднимать эту тему здесь не стоит (скажу только, что их применение не гораничивается вводом-выводом). Если они являются серьезным препятствием, можно взглянуть на другие языки, в которых ввод-вывод не использует монады. А что такого нечеловеческого в синтаксисе?
increment = (+1)
even x = x `div` 2 == 0
Напоследок, пара ссылок на решения админских задач на Haskell (вторая более практичная, но, к сожалению, без понимания монад там не разобраться): http://haskell.org/haskellwiki/Simple_unix_tools Practical Haskell: shell scripting with error handling and privilege separation (http://cgi.cse.unsw.edu.au/~dons/blog/2007/03/10#programmable-semicolons)
Про неограничивается я знаю. Может где-то они и нужны и полезны. Но IO через них - это издевательство над моим маленьким мозгом. Из чисто функциональных и не использующих монады мне известен только Clean. Всем хорош, но несколько нестабилен и его создатели любят винду, а я нет. Теперь про синтаксис. Примеров приводить не буду, но на мой взгляд синтаксис недружелюбный для новичка. Я посмотрев на код почти любой haskell программы с ходу не скажу что она делает. Про python вот скажу, там все просто и понятно, а про haskell - нет. Конечно можно сказать что все придет со временем, но для этого это время у меня должно быть.
Ну, удобство написания и удобство чтения - это tradeoff, как не печально. Плюс - tradeoff сугубо индивидуальный.
Просто для сравнения поделюсь своим опытом.
Мне, например, сложнее понять, что делает питоновский код (как вспомню поптыки разобраться в потрохах bittorrent по reference реализации на питоне без единого комментария - так вздрогну) потому, что его сложнее "препарировать" и пробовать на зуб мелкими частями. Плюс - типы не выводятся, и чтобы понять, что делает метод от 7 аргументов, приходится его вычитывать ... Бррр...
Как было справедливо замечено, монады - это действительно долгая песня.
Надо нести монады в массы :) Например, привести пример кода, который простым изменением монады с Maybe на List изменяет свою функциональность с "поиск первого решения" на "поиск всех решений" ...
а F# - это вообще неспроста :-) и он в последнее время стал очень часто упоминаться во всяких журналах и статьях. Стали даже выпускать F# Journal, но по заоблачным ценам :-((((
Хм, какой-то эффект она на меня странный проивзела - на лисп потянуло :)) А ещё Эрик Реймонд вспомнился, как-то он рассуждал о том что есть разные языки и что их все полезно знать.
(no subject)
Date: 2007-04-20 06:23 am (UTC)(no subject)
Date: 2007-04-20 09:38 am (UTC)(no subject)
Date: 2007-09-28 01:31 pm (UTC)А жаль. Людей, программирующих на perl, этот факт скорее оттолкнет, чем заинтересует.
(no subject)
Date: 2007-09-28 08:26 pm (UTC)(no subject)
Date: 2007-09-28 09:28 pm (UTC)(no subject)
Date: 2007-10-08 08:21 pm (UTC)http://steve.yegge.googlepages.com/ancient-languages-perl
(no subject)
Date: 2007-10-08 09:38 pm (UTC)Это несколько печально, для некоторых задач perl весьма удобен. Например, описанная вами задача (http://users.livejournal.com/_adept_/74058.html) решается на нем надежнее и проще.
А ссылку я утащу к себе в журнал.
(no subject)
Date: 2007-04-20 06:54 am (UTC)(no subject)
Date: 2007-04-20 07:06 am (UTC)в принципе, статья хорошая - именно, чтобы заинтересовать людей.
про альфа и бета редукции и ФП, можно будет почитать на русском после окончания перевода "Introduction to Functional Programming" - у харрисона очень хорошо там написано
(no subject)
Date: 2007-04-20 07:35 am (UTC)(no subject)
Date: 2007-04-20 09:46 am (UTC)(no subject)
Date: 2007-04-20 07:46 am (UTC)Согласен с
В терминологии, на мой взгляд, есть огрехи, но в такого рода статье это несущественно.
ОО-полиморфизм - это inclusion polymorphism (согласно L.Cardelli), ad-hoc polymorphism - это перегрузка. И каким образом переименование переменных (альфа-конверсия) позволяет оптимизировать программы?
(no subject)
Date: 2007-04-20 07:48 am (UTC)(no subject)
Date: 2007-04-20 09:16 am (UTC)И Haskell вверху не потому, что он очень хороший, а потому, что если человек хорошо знает Haskell, то у него и общий уровень выше среднего.
Больше половины тех, кто у меня в ленте написал о смерти John Backus, любит ФП.
(no subject)
Date: 2007-04-20 09:39 am (UTC)(no subject)
Date: 2007-04-20 02:00 pm (UTC)(no subject)
Date: 2007-04-20 02:05 pm (UTC)(no subject)
Date: 2007-04-24 07:27 pm (UTC)(no subject)
Date: 2007-04-24 07:34 pm (UTC)(no subject)
Date: 2007-04-24 07:27 pm (UTC)(no subject)
Date: 2007-04-20 09:25 am (UTC)(no subject)
Date: 2007-04-20 09:38 am (UTC)(no subject)
Date: 2007-04-20 09:43 am (UTC)(no subject)
Date: 2007-04-20 10:23 am (UTC)(no subject)
Date: 2007-04-20 08:01 am (UTC)(no subject)
Date: 2007-04-20 08:02 am (UTC)А mldonkey и ejabberd представляют собой типичную болезнь OSS -- если есть что-то хоть как-то работающее, то с большой вероятностью оно единственным и останется, хотя бы и было качеств поганых.
(no subject)
Date: 2007-04-20 08:17 am (UTC)(no subject)
Date: 2007-04-20 09:23 am (UTC)В принципе, критика по делу, но она - деструктивная :) Давай альтернативные примеры :)
(no subject)
Date: 2007-04-20 09:31 am (UTC)(no subject)
Date: 2007-04-20 10:20 am (UTC)Главные разработчики GHC, Simon Peyton Jones (http://research.microsoft.com/~simonpj/) и Simon Marlow (http://research.microsoft.com/~simonmar/), работают под крылом Microsoft. Ralf Laemmel (http://blogs.msdn.com/ralflammel/) работает там же. Как говорил Винни Пух, это неспроста - все "революционные" изменения в C# попадут туда из Haskell.
Philip Wadler, один из главных авторитетов в мире CS и Haskell в частности, работал над generics в Java (http://homepages.inf.ed.ac.uk/wadler/topics/gj.html).
Автор блога Good Math, Bad Math (http://www.scienceblogs.com/goodmath/) Mark Chu-Carroll работает в Гугле.
Лиспер Питер Норвиг (http://norvig.com/) работает в Гугле.
Выдающаяся личность современности, Олег Киселев (http://okmij.org/ftp), взрывающий людям мозг при помощи Haskell, Scheme и Ocaml, работает на американских военных (https://www.fnmoc.navy.mil/PUBLIC/index.html).
John Harrison (http://www.cl.cam.ac.uk/~jrh13/), известный своими учебниками по ФП, работает в Intel.
Joel Reymont (http://wagerlabs.com/) - вы должны были заметить это имя, если изредка читаете мейл-листы Haskell, Ocaml, Erlang. Фрилансер, поднимает довольно-таки сложные проекты в одиночку (игровой сервер, финансовый софт), используя все вышеупомянутые технологии.
Список можно продолжать.
(no subject)
Date: 2007-04-20 10:25 am (UTC)И чем поможет FP (прив сём моем к нему уважении) обычному среднему оффисному кодеру -- не ясно. А таких программистов -- 99.9%
(no subject)
Date: 2007-04-20 10:28 am (UTC)(no subject)
Date: 2007-04-20 10:32 am (UTC)Так же как любой программист, пишушщий Make-файл пишет на прологе. Но это не значит, что пролог -- промышленный язык :)
(no subject)
Date: 2007-04-20 10:49 am (UTC)Знать FP для того, что бы этими пользоватся, не надо.
(no subject)
Date: 2007-04-24 07:40 pm (UTC)Я бы сказал, что знание о том, что можно писать filter p (map f list) ценно не тем, что какой-то там язык дает возможно так написать, а ценно само по себе. Например, тем, что человек будет видеть возможности для генералиации там, где они есть, и использовать их.
Можно я еще резко вильну от конкретных паттернов кодирования к, например, type inference при статической типизации в контексте фразы "в чем польза от FP для офисного программера"? Будет ли обычному офисному кодеру польза от того, что ему не прийдется писать руками сигнатуры типов для всех или части функций? несомненно будет, особенно при рефакторинге кода.
Соответственно, даже если офисный программер пишет на языке без type inference, но знает о нем, то при необходимости выбрать язык для задачи/проекта (такое редко, но бывает) потенциально сможет облегчить себе жизнь.
Ну, и на закуску можно вспомнить хороший пример от, кажется, Пола Грэхема. Офисный программинг - это дело тоже непостоянное. 8 лет тому назад ява была экзотикой, а приложения полагалось писать только на С++. Сегодня в яве появляются generics и closures - еще один шаг в направлении ФП. И появляются отнюдь не потому, что это модно звучит ... Раз появляются - то это кому-то нужно.
(no subject)
Date: 2007-04-20 10:31 am (UTC)(no subject)
Date: 2007-04-20 10:46 am (UTC)Но т.к. мы обсуждаем статью для программистов, лучше сфокусироваться на технических проблемах, которые лучше решаются в рамках ФП. Пример Реймонта показывает, что сложность проектов, которые можно реализовать в сжатые сроки в одиночку, довольно высока; решаемые проблемы - не академические, а практические; я уверен, что Реймонт, пользуясь "игрушками для математиков", заработал совершенно реальные деньги.
Это важный момент, т.к. компаний, применяющих ФП на всю катушку, немного - можно повысить _собственную_ эффективность, решать _собственные_ локальные задачи на ФЯ, работая где угодно.
(no subject)
Date: 2007-04-20 01:14 pm (UTC)1. этот нечеловеческий синтаксис
2. монады для IO
Поэтому тупо фигачу на python. Жаль что функциональный подход в нем как-то совершенно неразвит. Хотя я неверно хочу невозможного.
(no subject)
Date: 2007-04-20 01:45 pm (UTC)А что такого нечеловеческого в синтаксисе?
Напоследок, пара ссылок на решения админских задач на Haskell (вторая более практичная, но, к сожалению, без понимания монад там не разобраться):
http://haskell.org/haskellwiki/Simple_unix_tools
Practical Haskell: shell scripting with error handling and privilege separation (http://cgi.cse.unsw.edu.au/~dons/blog/2007/03/10#programmable-semicolons)
(no subject)
Date: 2007-04-20 01:46 pm (UTC)(no subject)
Date: 2007-04-20 06:23 pm (UTC)Теперь про синтаксис. Примеров приводить не буду, но на мой взгляд синтаксис недружелюбный для новичка. Я посмотрев на код почти любой haskell программы с ходу не скажу что она делает. Про python вот скажу, там все просто и понятно, а про haskell - нет. Конечно можно сказать что все придет со временем, но для этого это время у меня должно быть.
(no subject)
Date: 2007-04-24 07:45 pm (UTC)Просто для сравнения поделюсь своим опытом.
Мне, например, сложнее понять, что делает питоновский код (как вспомню поптыки разобраться в потрохах bittorrent по reference реализации на питоне без единого комментария - так вздрогну) потому, что его сложнее "препарировать" и пробовать на зуб мелкими частями. Плюс - типы не выводятся, и чтобы понять, что делает метод от 7 аргументов, приходится его вычитывать ... Бррр...
(no subject)
Date: 2007-04-24 07:42 pm (UTC)Надо нести монады в массы :) Например, привести пример кода, который простым изменением монады с Maybe на List изменяет свою функциональность с "поиск первого решения" на "поиск всех решений" ...
(no subject)
Date: 2007-04-20 10:38 am (UTC)(no subject)
Date: 2007-04-20 09:01 am (UTC)Welcome
Date: 2007-04-20 09:07 am (UTC)(no subject)
Date: 2007-04-20 01:00 pm (UTC)(no subject)
Date: 2007-04-21 09:11 am (UTC)А ещё Эрик Реймонд вспомнился, как-то он рассуждал о том что есть разные языки и что их все полезно знать.