Home
dump -0f - /dev/mind
Баечки о мобильной связи (GSM, CDMA) и IT индустрии
Несем опиум в народ :) 
20th-Apr-2007 09:15 am
Написал короткую статью про ФП для developers.org.ua. Читайте, ругайте :)
Comments 
20th-Apr-2007 06:23 am (UTC)
Излишне кратко имхо. Упомянуть pugs стоило бы.
20th-Apr-2007 09:38 am (UTC)
Fixed.
28th-Sep-2007 01:31 pm (UTC)
Fixed.

А жаль. Людей, программирующих на perl, этот факт скорее оттолкнет, чем заинтересует.
28th-Sep-2007 08:26 pm (UTC)
Почему?
28th-Sep-2007 09:28 pm (UTC)
Потому что perl6 - это страшный уродец, фактически похоронивший perl, как язык.
8th-Oct-2007 08:21 pm (UTC)
8th-Oct-2007 09:38 pm (UTC)
Да. Но была надежда - до появления внятной информации о perl6.
Это несколько печально, для некоторых задач perl весьма удобен. Например, описанная вами задача решается на нем надежнее и проще.

А ссылку я утащу к себе в журнал.
20th-Apr-2007 06:54 am (UTC)
а для меня вообще в новинку. узнал что-то новое, спасибо! продолжение в студию!
20th-Apr-2007 07:06 am (UTC)
я оставил там комментарий.
в принципе, статья хорошая - именно, чтобы заинтересовать людей.
про альфа и бета редукции и ФП, можно будет почитать на русском после окончания перевода "Introduction to Functional Programming" - у харрисона очень хорошо там написано
20th-Apr-2007 07:35 am (UTC)
Обидно читать C++/Java/Python на одном дыхании. Питон все-таки... другой. Троеточие поставил бы, что ли, змей! :)
20th-Apr-2007 09:46 am (UTC)
"С высоты моего положения не видно разницы даже между Вами и королем" (с) Стругацкие ;-)
20th-Apr-2007 07:46 am (UTC)
Во-первых, спасибо за общественно-полезное дело.
Согласен с [info]alexott, для того, чтобы заинтересовать, статья в самый раз. Можно было бы собрать большее примеров _практического_ применения - финансовая аналитика на Haskell в банке Credit Suisse, применение в криптографии, security - Galois Connections. Все-таки не всех впечатлит проект Эйлера.

В терминологии, на мой взгляд, есть огрехи, но в такого рода статье это несущественно.

ОО-полиморфизм - это inclusion polymorphism (согласно L.Cardelli), ad-hoc polymorphism - это перегрузка. И каким образом переименование переменных (альфа-конверсия) позволяет оптимизировать программы?

20th-Apr-2007 07:48 am (UTC)
s/большее/больше/
20th-Apr-2007 09:16 am (UTC)
С проектом Эйлера аргумент совсем слабый, во-первых там больше всего C/C++/C#, во-вторых главное там - алгоритм.

И Haskell вверху не потому, что он очень хороший, а потому, что если человек хорошо знает Haskell, то у него и общий уровень выше среднего.

Больше половины тех, кто у меня в ленте написал о смерти John Backus, любит ФП.
20th-Apr-2007 09:39 am (UTC)
Принимается. Но я свой некорректный аргумент в статье все-таки оставлю :)
20th-Apr-2007 02:00 pm (UTC)
В Проекте "Эйлер" главный язык, по-моему, - ассемблер... :о)
20th-Apr-2007 02:05 pm (UTC)
Ну я к первой сотне подошёл на perl :-)
24th-Apr-2007 07:27 pm (UTC)
Чистый перл, без всякий Math::PARI и аналогов? Сильно.
24th-Apr-2007 07:34 pm (UTC)
Math::BigInt в паре примеров (но обошёлся бы и без него).
24th-Apr-2007 07:27 pm (UTC)
Pencil & paper :)
20th-Apr-2007 09:25 am (UTC)
Оба пункта - принимаются. Плохо, когда вычитываешь после написания всего один раз :)
20th-Apr-2007 09:38 am (UTC)
Fixed и терминологию, и примеры.
20th-Apr-2007 09:43 am (UTC)
Я забыл уточнить, что Galois Connections применяют Ocaml ;)
20th-Apr-2007 10:23 am (UTC)
Точнее, Haskell, OCaml и что-то еще. Я это помню абсолютно отчетливо.
20th-Apr-2007 08:01 am (UTC)
Умеешь остановить работу! Зачот!
20th-Apr-2007 08:02 am (UTC)
За примеры низачот. mldonkey хорош только на безрыбьи, ejabberd -- со своими закидонами притча воязыцах, кто пользуется darcs'ом я не знаю, даже у hg аудитория больше...

А mldonkey и ejabberd представляют собой типичную болезнь OSS -- если есть что-то хоть как-то работающее, то с большой вероятностью оно единственным и останется, хотя бы и было качеств поганых.
20th-Apr-2007 08:17 am (UTC)
Поддерживаю, mldonkey и ejabberd - убожища еще те. :(
20th-Apr-2007 09:23 am (UTC)
Ну, удобство/неудобство/закидоны - они как бы мало зависят от языка, больше от архитектуры, подхода и т.п. Я ж не говорил, что приведу примеры _хорошего_ софта, я привел примеры просто софта :)

В принципе, критика по делу, но она - деструктивная :) Давай альтернативные примеры :)
20th-Apr-2007 09:31 am (UTC)
Нету конструктивных. Ходят слухи что в AMD дофига софта на лиспе, еще где-то, чуть не в Боинге, etc. Вообще -- пойти на сайт того же францз-лиспа и посмотреть, там список впечатляющий. только не подтверждён теми, кто в нём упомянут :)
20th-Apr-2007 10:20 am (UTC)
Если не конкретный софт, а подобные слухи или ссылки на людей, использующих ФП в работе в известных компаниях, то можно упомянуть:
Главные разработчики GHC, Simon Peyton Jones и Simon Marlow, работают под крылом Microsoft. Ralf Laemmel работает там же. Как говорил Винни Пух, это неспроста - все "революционные" изменения в C# попадут туда из Haskell.
Philip Wadler, один из главных авторитетов в мире CS и Haskell в частности, работал над generics в Java.
Автор блога Good Math, Bad Math Mark Chu-Carroll работает в Гугле.
Лиспер Питер Норвиг работает в Гугле.
Выдающаяся личность современности, Олег Киселев, взрывающий людям мозг при помощи Haskell, Scheme и Ocaml, работает на американских военных.
John Harrison, известный своими учебниками по ФП, работает в Intel.
Joel Reymont - вы должны были заметить это имя, если изредка читаете мейл-листы Haskell, Ocaml, Erlang. Фрилансер, поднимает довольно-таки сложные проекты в одиночку (игровой сервер, финансовый софт), используя все вышеупомянутые технологии.
Список можно продолжать.
20th-Apr-2007 10:25 am (UTC)
Все вот эти ``работает там-то'' не очень интересны, потому что я-то знаю, что у таких компаний еак Гугл, Интел и Майкрософт есть специальный класс людей, которые формально работают, а реально выхода от них никто не ожидает (хотя иногда он случается, и тогда выигрыш -- ОГО-ГО!!!) -- т.е. фактически академическая наука внутри корпорации... Мало кто так крут, что бы оказатся в таких условиях...

И чем поможет FP (прив сём моем к нему уважении) обычному среднему оффисному кодеру -- не ясно. А таких программистов -- 99.9%
20th-Apr-2007 10:28 am (UTC)
Типа, использование "filter p (map f lst)" в питоне вместо двух циклов за помощь не считается? :)
20th-Apr-2007 10:32 am (UTC)
Ну, я и на JavaScript так пишу, и на perl (на питоне вовсе не пишу), но это именно крохотные кусочки. Они проникают, конечно. Но всё же в основной массе я бы их не считал.

Так же как любой программист, пишушщий Make-файл пишет на прологе. Но это не значит, что пролог -- промышленный язык :)
20th-Apr-2007 10:49 am (UTC)
Т.е. filter p (map f list) пишется и на plain c (ладно, ладно, да, memory manahment). Это вопрос библиотеки по сути для оффисного программиста :)
Знать FP для того, что бы этими пользоватся, не надо.
24th-Apr-2007 07:40 pm (UTC)
(мы, имхо, стремительно катимся ко спору о вкусах)

Я бы сказал, что знание о том, что можно писать filter p (map f list) ценно не тем, что какой-то там язык дает возможно так написать, а ценно само по себе. Например, тем, что человек будет видеть возможности для генералиации там, где они есть, и использовать их.

Можно я еще резко вильну от конкретных паттернов кодирования к, например, type inference при статической типизации в контексте фразы "в чем польза от FP для офисного программера"? Будет ли обычному офисному кодеру польза от того, что ему не прийдется писать руками сигнатуры типов для всех или части функций? несомненно будет, особенно при рефакторинге кода.

Соответственно, даже если офисный программер пишет на языке без type inference, но знает о нем, то при необходимости выбрать язык для задачи/проекта (такое редко, но бывает) потенциально сможет облегчить себе жизнь.

Ну, и на закуску можно вспомнить хороший пример от, кажется, Пола Грэхема. Офисный программинг - это дело тоже непостоянное. 8 лет тому назад ява была экзотикой, а приложения полагалось писать только на С++. Сегодня в яве появляются generics и closures - еще один шаг в направлении ФП. И появляются отнюдь не потому, что это модно звучит ... Раз появляются - то это кому-то нужно.
20th-Apr-2007 10:31 am (UTC)
Ну, а проекты фрилансера -- это безумие для заказчика. Потому что что они будут делать через год для развития, кроме как нанимать ЕГО ЖЕ -- не ясно. Такая первая доза бесплатно.
20th-Apr-2007 10:46 am (UTC)
Проблемы экономического и организационного характера, естественно, имеют значение.
Но т.к. мы обсуждаем статью для программистов, лучше сфокусироваться на технических проблемах, которые лучше решаются в рамках ФП. Пример Реймонта показывает, что сложность проектов, которые можно реализовать в сжатые сроки в одиночку, довольно высока; решаемые проблемы - не академические, а практические; я уверен, что Реймонт, пользуясь "игрушками для математиков", заработал совершенно реальные деньги.
Это важный момент, т.к. компаний, применяющих ФП на всю катушку, немного - можно повысить _собственную_ эффективность, решать _собственные_ локальные задачи на ФЯ, работая где угодно.
20th-Apr-2007 01:14 pm (UTC)
Я вот не решил ни одной локальной задачи средствами ФП. Потому как мне, как тупому админу никода не понять зачем люди придумали
1. этот нечеловеческий синтаксис
2. монады для IO
Поэтому тупо фигачу на python. Жаль что функциональный подход в нем как-то совершенно неразвит. Хотя я неверно хочу невозможного.
20th-Apr-2007 01:45 pm (UTC)
Монады - это долгая песня в дюнах, поднимать эту тему здесь не стоит (скажу только, что их применение не гораничивается вводом-выводом). Если они являются серьезным препятствием, можно взглянуть на другие языки, в которых ввод-вывод не использует монады.
А что такого нечеловеческого в синтаксисе?
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
20th-Apr-2007 01:46 pm (UTC)
s/гораничивается/ограничивается/
20th-Apr-2007 06:23 pm (UTC)
Про неограничивается я знаю. Может где-то они и нужны и полезны. Но IO через них - это издевательство над моим маленьким мозгом. Из чисто функциональных и не использующих монады мне известен только Clean. Всем хорош, но несколько нестабилен и его создатели любят винду, а я нет.
Теперь про синтаксис. Примеров приводить не буду, но на мой взгляд синтаксис недружелюбный для новичка. Я посмотрев на код почти любой haskell программы с ходу не скажу что она делает. Про python вот скажу, там все просто и понятно, а про haskell - нет. Конечно можно сказать что все придет со временем, но для этого это время у меня должно быть.
24th-Apr-2007 07:45 pm (UTC)
Ну, удобство написания и удобство чтения - это tradeoff, как не печально. Плюс - tradeoff сугубо индивидуальный.

Просто для сравнения поделюсь своим опытом.

Мне, например, сложнее понять, что делает питоновский код (как вспомню поптыки разобраться в потрохах bittorrent по reference реализации на питоне без единого комментария - так вздрогну) потому, что его сложнее "препарировать" и пробовать на зуб мелкими частями. Плюс - типы не выводятся, и чтобы понять, что делает метод от 7 аргументов, приходится его вычитывать ... Бррр...
24th-Apr-2007 07:42 pm (UTC)
Как было справедливо замечено, монады - это действительно долгая песня.

Надо нести монады в массы :) Например, привести пример кода, который простым изменением монады с Maybe на List изменяет свою функциональность с "поиск первого решения" на "поиск всех решений" ...
20th-Apr-2007 10:38 am (UTC)
а F# - это вообще неспроста :-) и он в последнее время стал очень часто упоминаться во всяких журналах и статьях. Стали даже выпускать F# Journal, но по заоблачным ценам :-((((
20th-Apr-2007 09:01 am (UTC)
А есть у нас русскоговорящее коммьюнити по ФП ? Если да, то где ?
20th-Apr-2007 09:07 am (UTC) - Welcome
20th-Apr-2007 01:00 pm (UTC)
xineohp_drol
раздумываю о haskell :)
21st-Apr-2007 09:11 am (UTC)
Хм, какой-то эффект она на меня странный проивзела - на лисп потянуло :))
А ещё Эрик Реймонд вспомнился, как-то он рассуждал о том что есть разные языки и что их все полезно знать.
This page was loaded May 22nd 2008, 12:02 am GMT.