LINUX.ORG.RU

Вышел 2-й выпуск журнала «Практика функционального программирования»

 , , ,


1

0

Вышел в свет второй выпуск журнала «Практика функционального программирования».

Центральная тема второго выпуска журнала — демонстрация применения функционального программирования в реальных, а не академических проектах.

Первые четыре статьи — Дмитрия Зуйкова, Дмитрия Астапова, Сергея Зефирова в соавторстве с Владиславом Балиным, и Алексея Отта — вытаскивают на поверхность «кухню» нескольких компаний. Статьи демонстрируют, что функциональные языки находят применение в промышленном программировании в самых разных нишах. Конечно, использование «нестандартных» языков накладывает на проекты некоторые сложно оценимые риски, и далеко не все из них рассмотрены в статьях. Но если статьи этого номера позволят развеять хоть часть сомнений, мифов и предрассудков и поднять дискуссию о применимости функциональных языков в промышленном программировании на новый уровень, мы будем считать свою задачу выполненной.

Статья Александра Самойловича рассматривает создание на языке Erlang игрушечного, но практичного проекта — рекурсивного многопоточного обходчика сайтов. К третьему выпуску журнала мы планируем подготовить ещё несколько статей про Erlang.

Завершающая статья Романа Душкина в большей степени ориентирована на теорию: она познакомит вас с концепцией алгебраических типов данных (АТД) в Haskell и других функциональных языках.

>>> Подробности

★★★★★

Проверено: maxcom ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> единственное что я не понял, так это зачем авторы популяризуют хаскелл, если это так круто и он приносит им прибыль. где-то тут подвох.

Например, чтобы потом народ на работу нанять. :)

pitekantrop ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Сложно представить язык ещё проще чем лисп.

Внешняя простота ещё не говорит о лёгкости его применения. Мы мыслим императивно - весь наш быт представлен последовательностями действий. Вопрос: зачем ломать мозг рекурсией, когда есть более простые и понятные алгоритмы? Не говоря уже о крышесносе "отсутствие побочных эффектов". Это белка в колесе - без побочных, а нам нужны эффекты от действий. Вощем, извечный спор между разумом и ФП.

matumba ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

Нет никаких намёков. В то время, когда Лёша прекратил заниматься "Дозором", а я, соответственно" -- "Тропой" и прочим "Z-2", дела с прордажами идти не важно. Сейчас, судя по открытым источникам (а иных у меня почти нет), дело с "Дозором" выправилось. В 2006м году его как-то хорошо напродавали на все вертикальные рынки. Сколько в том было "политических" продаж. а сколько "жизненно-необходимых" я не знаю, но поелику давно живу в России и давно загнимаюсь безопаасностью вообще и разработкой всяческого "сертифицированного" дерьма^Wсофта в частности, то могу проредположить, что политики там больше.

Собственно, я тут высказал тезис о независимости технологических решений от коммерческого успеха. А на российских рынках -- тем более.

gns ★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Поднять дискуссию о применимости функциональных языков в промышленном программировании на новый уровень не удалось.

Ну почитай ещё отчёты CUFP (http://cufp.galois.com/).

pitekantrop ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Мы мыслим императивно

Я рад за вас. А вот мне конструкция вида

[code] x=x+1 [/code]

Наглухо вынесла мозг. Ибо с нормальной человеческой точки зрения это уравнение совершенно безумно.

> Вопрос: зачем ломать мозг рекурсией,

Ответ, затем, что многие процессы черезвычайно легко описываются на рекурсивном языке, а на императивном --- длинно нудно и с матюгами.

...

всякая чушь поскипана

...

> Вощем, извечный спор между разумом и ФП.

извечный спор между кастрированным бэйсиком разумом и ФП.

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

ну насчет продаж ты погорячился - Тропа и З-2, да - продавались плохо, а вот продажи Дозора постоянно росли, что в 2004-м, что в 2005-м... Да и по фичам мы сильно отличались от конкурентов - практически все компании реально его использовали, а не только по политическим мотивам - я постоянно с клиентами общался

ott ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> мне конструкция вида

> [code] x=x+1 [/code]

> Наглухо вынесла мозг. Ибо с нормальной человеческой точки зрения это уравнение совершенно безумно.

Для таких, как ты, придумали Паскаль: x := x+1

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Ну почитай ещё отчёты CUFP (http://cufp.galois.com/).

Спасибо, порж^Wпочитал.

В отчетах по ссылке все та же старая песня: DSL, да моделирование аппаратуры (VHDL), да академическая жвачка.

И потом, если требуется специально _доказывать_, что-де "функциональные языки могут быть не целью, но средством" (цитата с сайта) - значит, что-то не то в консерватории? Нэ?

Kuka ★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

Jane Street Capital - использует окамл в трейинге, Credit Suisse - насколько я помню тоже. Erricson использует в телефонных станциях

это все академическая жвачка?

ott ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

Академический интерес: какого рода программа должна быть написана в рамках ФП, чтобы ты признал ФП хорошим, годным для продакшана?

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Мы мыслим императивно - весь наш быт представлен последовательностями действий.

Хочу поесть, для этого мне нужно приготовить яичницу.
Чтобы приготовить яичницу, мне нужно разогреть сковородку, налить туда масла и пожарить яйца.
Чтобы пожарить яйца, мне нужно достать 3 яйца из холодильника, разбить каждое над сковородкой, посолить... и т.д.

Да, кстати, "разбить каждое" звучит натуральнее, чем "считать до трёх, каждый раз разбивая яйцо", не так ли? :)

pitekantrop ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> какого рода программа должна быть написана в рамках ФП, чтобы ты признал ФП хорошим, годным для продакшана?

Морда к БД же.

А мне было бы интересно что-нибудь числодробильное.

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

http://www.serpentine.com/blog/2009/09/19/a-new-pseudo-random-number-generato... - пойдет в качестве числодробилки?

ott ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

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

psv1967 ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> http://www.serpentine.com/blog/2009/09/19/a-new-pseudo-random-number-generato.. . - пойдет в качестве числодробилки?

Нет. Мне бы что-нибудь DSP-подобное, или мультимедиа-кодек.

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> > Ну, к примеру, работа со строками та же, насколько помню. Надо еще раз открывать книжечку про лисп что начинал читать. В общем, хочу питон, только с синтаксисом скобочками как у лиспа, понимаешь? Чтоб он был хакбл и нацелен на функциональное программирование всем своим синтаксисом.

> Как бы вам сюда clojure.org. Вот тут[1] прямо сравниваются элементарные синтаксические конструкции clojure и python.


> [1] http://groups.google.com/group/clojure/browse_thread/thread/d5e041cb8e4fd1c4/.. .


Класс! Спасибо.

kost-bebix ★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Собственно, я тут высказал тезис о независимости технологических решений от коммерческого успеха. А на российских рынках -- тем более.

Вот теперь это стало более очевидно. Спасибо и извините за возможно показавшимся резким тон...

satanic-mechanic ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> http://haskelldsp.sourceforge.net/ ?

Что-то похожее, да. Только уже доведенное до ума и сравненное по скорости с Си или Фортраном, а то фраза "I have tested these routines, but not extensively" как бы намекает, что проект очень молодой :)

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Мне бы что-нибудь побыдлее :)

А в чём вообще сложность? sql-запрос к БД декларативен. Описание представления результата запроса на клиенте декларативно по сути тоже. таким образом наш интерфейс к БД сводится к преобразованию сложных структур данных. Вполне себе фп задача.

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Jane Street Capital - использует окамл в трейинге

дык там сплошная математика, для расчетов-то функциональное программирование - самое то, никаких сайд-эффектов, сплошная красота. Вы нам что-нибудь более реальное и более сложное, завязанное разные технологии - например, формочку к БД в ГУИ :)

anonymous ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> sql-запрос к БД декларативен. Описание представления результата запроса на клиенте декларативно по сути тоже. таким образом наш интерфейс к БД сводится к преобразованию сложных структур данных.

Я же написал - морда. Т.е. GUI. Навороченный GUI, сделанный средствами функционального языка. Потому что почти все примеры успешного использования ФП, которые мне попадались - это как раз "преобразования сложных структур данных". А меня интересует применение ФП к быдлокодерской задаче типа "налабать морду".

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

Как-то продавался... Как на "вертикальном рынке" появилось много денег -- стал продаваться лучше и даже "совсем хорошо". :) Если товар купили по "политическим мотивам", то это не значит, что его не используют (хотя я и такое видел).

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

gns ★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Хочу поесть, для этого мне нужно приготовить яичницу. Чтобы приготовить яичницу, мне нужно разогреть сковородку, налить туда масла и пожарить яйца. Чтобы пожарить яйца, мне нужно достать 3 яйца из холодильника, разбить каждое над сковородкой, посолить... и т.д.

Ээ, ну это полностью императивное описание. Какбы, чтобы приготовить яичницу мне нужно выполнить определенный _порядок_ действий (запятая у вас исполняет роль операции "а затем"), а это, извините, уже попахивает несвежими монадами.

> Да, кстати, "разбить каждое" звучит натуральнее, чем "считать до трёх, каждый раз разбивая яйцо", не так ли? :)

Это в дурацких языках с счетчиком так делается, в нормальных императивных, ООП языках будет - для всех яиц разбить. И кстати, работа со списками и коллекциями, она не только в функциональных языках есть.

anonymous ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Вы нам что-нибудь более реальное и более сложное, завязанное разные технологии - например, формочку к БД в ГУИ :)

http://cufp.galois.com/2009/report/report.html#the-big-board - продвинутая риал-тайм викимапия с чатом для всяких пожарников.

pitekantrop ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Ээ, ну это полностью императивное описание.

Это вложенные вызовы функций. Просто тебе надо раскрепостить мышление, чтобы это понять.

> определенный _порядок_ действий

разогреть сковородку, налить туда масла --- два независимых события, представимые в виде формальных параметров ленивой функции пожарить_яйца.

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

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

Вы что из циклов - только сишный (++) for знаете? Я циклы в быту постоянно использую - рекурсии, как-то не очень. Для меня намного естественнее - "пробежать 10 кругов" (кстати, счетчик в этой ситуации используется явно), "работать до 17.30", "читать до конца страницы", "выполнить все задачи в todo листе" и тд.

> ну нету счетчиков циклов никаких "в нашем быту".

Есть и много, просто они настолько естественны, что их особо и не замечаешь.

anonymous ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> http://qthaskell.berlios.de/

> Эта штука сделает тебя счастливым.

Не сделает. По двум причинам: 1) это всего лишь привязки к ОО-тулкиту; 2) "Latest qtHaskell release: v1.1.2 (September 2008) This is the second preview release of qtHaskell". Ну еще я не люблю Хаскел, но это уже мелочи :) Про lablgtk для Ocaml напоминать тоже не надо.

Есть какие-нибудь Ъ-ФП либы для GUI? Пусть у них на нижнем уровне будет qt, wx или gtk, но только на нижнем уровне, чтобы был виден ФП-подход к GUI.

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

web-gui в качестве примера пойдет? на последней странице моей статьи есть скриншот интерфейса, который как раз работает с БД

ott ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Это вложенные вызовы функций. Просто тебе надо раскрепостить мышление, чтобы это понять.

Ну распиши это "правильно" на Haskelle (я его немного знаю, думаю пойму).

> разогреть сковородку, налить туда масла --- два независимых события, представимые в виде формальных параметров ленивой функции пожарить_яйца.

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

anonymous ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Сча мрачную шутку нашли в о всех версиях - называется try finally catch finally да-е-мое-finally. > Надеюсь будет фикс для ветки 2.7 ASAP, а то я скалу запихнул уже в продакшен:)

А можно точнее что за "штука" ? А то я тоже собираюсь её в продакшен запускать.

Darkman ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

http://haskell.cs.yale.edu/FranTk/

FranTk (pronounced "frantic") is a declarative library for building GUIs in Haskell. It's designed to allow you to build your application in a declarative manner. It uses behaviours and events, concepts from Conal Elliot's Functional Reactive Animation. These allow you to model a system over time. Events are used to describe values that occur discretely, such as button clicks. Behaviors are continuous quantities that vary over time. They are used to represent the state of an application. Events and behaviors can interact. For instance, we can have a behavior that changes on every event. You can then render this application on to an interface.

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Grapefruit? ну и вообще, по списку - http://www.haskell.org/haskellwiki/Applications_and_libraries/GUI_libraries#H.. .

Изучить это всей жизни не хватит. Чем пользуется большинство, Grapefruit?

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> web-gui в качестве примера пойдет? на последней странице моей статьи есть скриншот интерфейса, который как раз работает с БД

там scheme - это не чистое фп - с таким же успехом можно было показать web-gui на питоне, меня интересуют чистые функциональные языки - Haskell, CLean.

anonymous ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

Явно виден порядок выполнения - это чистый императив,

тогда и

sin(exp(log(4)))

тоже императивное вычисление, т.к. чтобы узнать значение синуса нужно вычислить экспоненту, а для этого, в свою очередь требуется посчитать логарифм.

Тебе не кажется, что с твоим определением императивности что-то не так?

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Изучить это всей жизни не хватит.

Бедняжка, ты смертельно болен и пишешь нам из хосписа?

ugoday ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

Есть какие-нибудь Ъ-ФП либы для GUI?

denis@laptop:~$ ls /usr/lib/erlang/lib/wx-0.98.2/examples/demo/
demo.beam             ex_choices.beam         ex_gauge.beam     ex_pickers.beam     ex_sizers.beam          ex_textCtrl.beam
demo.erl              ex_choices.erl          ex_gauge.erl      ex_pickers.erl      ex_sizers.erl           ex_textCtrl.erl
ex_button.beam        ex_cursor.beam          ex_grid.beam      ex_popupMenu.beam   ex_slider.beam          ex_treeCtrl.beam
ex_button.erl         ex_cursor.erl           ex_grid.erl       ex_popupMenu.erl    ex_slider.erl           ex_treeCtrl.erl
ex_canvas.beam        ex_dialogs.beam         ex_listCtrl.beam  ex_radioBox.beam    ex_splitterWindow.beam  image.jpg
ex_canvas.erl         ex_dialogs.erl          ex_listCtrl.erl   ex_radioBox.erl     ex_splitterWindow.erl
ex_canvas_paint.beam  ex_frameutilities.beam  ex_notebook.beam  ex_sashWindow.beam  ex_static.beam
ex_canvas_paint.erl   ex_frameutilities.erl   ex_notebook.erl   ex_sashWindow.erl   ex_static.erl
isden ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

>> Изучить это всей жизни не хватит.

> Бедняжка, ты смертельно болен и пишешь нам из хосписа?

Из отделения реанимации, а что?

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> из-за чего-то же ты уверен в своей скорой смерти.

Ты зачем-то врешь, но если тебе это нужно, то ради ТНБ.

tailgunner ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

http://happstack.com/ - фреймворк для веб-программирования. там у них есть ссылки на проекты, которые его используют

ott ★★★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Ээ, ну это полностью императивное описание.

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

> несвежими монадами

Аргументы весомее эпитетов будут?

> Это в дурацких языках с счетчиком так делается, в нормальных императивных, ООП языках будет - для всех яиц разбить.

foreach - это всё равно цикл, т.е. "брать по одному и разбивать", а map - это именно "разбить каждое". Цикл - это последовательная обработка, а map можно выполнять параллельно.

Да, и как насчёт фильтрации по условию?

> И кстати, работа со списками и коллекциями, она не только в функциональных языках есть.

Сейчас очень многие идеи функционального программирования в традиционные языки перекочёвывают.

pitekantrop ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

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

А противоречие то в чём? Результат одной операции идёт на вход другой. Или ты думаешь, что ФП позволяет отказаться от причинно-следственных связей?

pitekantrop ★★★ ()

Re: Вышел 2-й выпуск журнала "Практика функционального программирования"

> Вы что из циклов - только сишный (++) for знаете? Я циклы в быту постоянно использую - рекурсии, как-то не очень. Для меня намного естественнее - "пробежать 10 кругов" (кстати, счетчик в этой ситуации используется явно), "работать до 17.30", "читать до конца страницы", "выполнить все задачи в todo листе" и тд.

Хм. "слава роботам"? :) все приведенное насилие над разумом человека есть. Работать надо пока не сделаешь или пока видишь что делать. Бежать надо не "10 кругов" а "в темпе 150 ударов сердца в минуту до выделения нужного кол-ва пота"... и да, что такое "читать до конца страницы"? :)

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

psv1967 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.