LINUX.ORG.RU

Функциональщина


0

1

Кто больше в теме, киньте ссылкой на те задачи, для которых ФП является хорошим выбором. Я знаю не много, к примеру задачи, связанные с формальными грамматиками. Часто говоря про параллелизм, но что-то не увидел особого профита. Может я плохо смотрел.

★★★★★

Ответ на: комментарий от Rastafarra

Ну на лоре даже самый лох знает 100500 способов написания факториала на хаскеле, это уже проходили :) Хочется чего-то реального. Понятно, что есть что-то кроме факториалов, но наверняка такое же специфичное.

dizza ★★★★★ ()

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

vkos ★★ ()
Ответ на: комментарий от vkos

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

Вот это одно из самых часто встречающихся заблуждений. Конечно, существуют какие-то простые случаи, где это возможно. Но к примеру, СУБД не напишешь так. Приложение должно иметь архитектуру с оглядкой на параллелизм. А потом все равно человек должен принимать решение что нужно параллелить, а что нет. Ведь параллелизм связан с издержками.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

Хочется чего-то реального.

работать иди, че.

зы. тут был? это видел? так вот бойся, но что мешает попробовать «реальную» задачу?

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

???

профит!

Rastafarra ★★★★ ()
Ответ на: комментарий от dizza

>Вот это одно из самых часто встречающихся заблуждений.

Конечно, существуют какие-то простые случаи, где это возможно.

Так в чём же заблуждение-то? Если в некоторых случаях это возможно, а в других по крайней мере проще?

Понятно, что функциональщина не панацея, но таки часто удобней и на не (чисто) функциональных языках писать в функциональном стиле.

vkos ★★ ()
Ответ на: комментарий от arhibot

Да-да слышал. Даже тыкал. Но в эрланге самое ценное - акторная модель. А это императивная концепция, близкая к объектам.

Riak - вообще супер тема.

dizza ★★★★★ ()
Ответ на: комментарий от Rastafarra

работать иди, че.

Работаю и так, но душа хочет романтики, а жопа, пардон - хаскеля.

зы. тут был? это видел?

Ок, посмотрю.

тут есть пачка «просто» задач.

Не, это синтетические задачи, не годится.

dizza ★★★★★ ()
Ответ на: комментарий от Rastafarra

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

Сравнивать надо на больших задачах, а не факториалах.

anonymous ()
Ответ на: комментарий от Rastafarra

Я имею ввиду направление в задачах, которое перспективно разрабатывать на ФП языках. Но 90% задач довольно приземленные и решаются не такими умными языками. Например, на сайты на хаскеле без слез не глянешь. ПЕХапе и то лучше для сайтов.

dizza ★★★★★ ()
Ответ на: комментарий от Rastafarra

> ты думаешь картинки зависят от языка? в фп тебе пока рано :)

хаскелл не совсем готов. Каждый второй фреймворк гордится type safety html страниц и движками на cps-монадах, а не быстротой развертки, легкостью поддержки.

anonymous ()
Ответ на: комментарий от Rastafarra

дурак, что ли или троль? конечно я имел ввиду код сайтов на хаскеле. вообще как ты мог модумать, что в контексте кодинга я буду иметь ввиду картинки?

dizza ★★★★★ ()
Ответ на: комментарий от dizza

> Да это все онанизм программерский, понятно же.

Чисто для фп задач нет. По идее основные преимущества - модульность и легкость склейки совсем разных кусков кода должны проявляться на больших задачах. Однако больших и полезных программ enterprise уровня нет (по крайней мере я таких не знаю).

anonymous ()

> Кто больше в теме, киньте ссылкой на те задачи, для которых ФП является хорошим выбором.

Если у тебя хватило здоровья распарсить как здесь http://www.polyomino.f2s.com/david/haskell/hs/CombinatoricsCounting.hs.txt считается combianations и/или Permutations поделись с общественностью.)))

anonymous ()
Ответ на: комментарий от Diecae8i

> Функциональщина - write-only, ее не нужно парсить. Написал и забыл, не работает - написал заново.

На функциональщине тоже надо уметь понятно писать.

anonymous ()
Ответ на: комментарий от dizza

> А можно вот про это по-подробнее?

google://hughes why functional programming matters

anonymous ()

Не знаю, как кто, а мне удобнее оперерировать в голове функциями и данными. Никаких объектов с их интерфейсами, наследованием, деструкторами и прочей байды. К чему это я - на мой взгляд с использованием ФП куда больший класс задач решается красиво и аккуратно, по сравнению с тем же ООП/С++.

anonymous ()
Ответ на: комментарий от anonymous

Я тоже скланяюсь, что с точки зрения удобства разработки от ФП в основном те же плюшки, что и от процедурного (модульного) программирования, а именно четкое разделение данных и логики.

dizza ★★★★★ ()
Ответ на: комментарий от anonymous

Функциональное программирование - это процедурное программирование с ФВП.

если вы прочтете СИКП, то возможно согласитесь с его авторами ни не будете относить фп к процедурному программированию.

«В этой главе мы иссле- дуем две важных организационных стратегии, которые соответствуют двум достаточно различным взглядам на мир и структуру систем. Первая из них сосредотачивается на объектах (objects), и большая система рассматривается как собрание индивидуальных объектов, поведение которых может меняться со временем. Альтернативная стратегия строится вокруг потоков (streams) информации в системе, во многом подобно тому, как в электронике рассматриваются системы обработки сигналов.»

так вот, любая переменная, коих в процедурных программах хватает - объект.

kyz ()
Ответ на: комментарий от kyz

> если вы прочтете СИКП

Я его читал. Надо только отметить, что SICP - не про ФП и не про процедурное программирование, он про программирование в общем.

то возможно согласитесь с его авторами ни не будете относить фп к процедурному программированию

То, что кроме процедурного программирования ФП относится еще и к чему-то другому - это очевидно, но ФП является и процедурным программированием _в том числе_. Если нет - то каким характеристикам прцедурного программирования он не удовлетворяет?

anonymous ()
Ответ на: комментарий от dave

Значит, направление поиска знакомо

Знакомство с ФП языками никак не направляет не область их применения. Только масса факториалов и прочего онанизма. Succcess stories не такие уж и success stories.

dizza ★★★★★ ()
Ответ на: комментарий от anonymous

>SICP - не про ФП и не про процедурное программирование, он про программирование в общем.

я утверждал обратное?

ФП является и процедурным программированием _в том числе_. Если нет - то каким характеристикам прцедурного программирования он не удовлетворяет?

из википедии

Процедурное (императивное) программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 1940-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием Машина Тьюринга.

Основным является оператор присваивания, служащий для изменения содержимого областей памяти.

kyz ()

ИМНО берешь языка с элементами ФП и пишешь на нем свои реальные аздачи. Где надо - юзаешь ФП, где не надо - не юзаешь. Это удобный инструмент, но сувать его во все дыры так же глупо, как скажем всюду сувать полиморфные классы и потом с этого дела переться. Скажем файл с данными читать на питоне удобней с ФП (одна строка), а для каких то вещей удобней обычный цикл залудить.

И да, правильно примененное ФП сокращает объем кода без потери нагляжности. Иначе ФП было не по делу всунуто;-)))))))))

AIv ★★★★★ ()

отвечу ТС, цитатой из того-же СИКП-а:

Потоковый метод может изменять взгляд на вещи, так как он позволяет строить системы с другими границами модулей, не такими, как в системах, основанных на присваивании переменным состояния. Например, можно сосредоточивать внимание на всей временной последовательности (или сигнале), а не на значении переменных состояния в отдельные моменты. Оказывается удобно сочетать и сравнивать параметры состояния в различные моменты времени

kyz ()
Ответ на: комментарий от kyz

Забавная, кстати, штука - если есть в языке аналог yield, то можно сделать генератор, который делает yield при вызове определенного события и потом блокируется до следующего вызова. Тогда у нас получается последовательность событий, которая представлена некоторым объектом языка, с которым можно работать как с абстрактной последовательностью. Например, можно из всех лефткликов выбрать каждый второй клик, который происходит после райтклика и попадает в некоторую зону окна - в результате получим новую последовательность, и дальше можно на нее повесить обработчик событий. И выглядеть это все будет элементарно - как-то вроде: map(filter(leftclick, predicate), action)

anonymous ()
Ответ на: комментарий от anonymous

на счет событий и ф-ны. про реактивное программирование не слышал?

я его попробовал на примере Эф-шарпа и возрадовался. насколько все удобно и читабельно

kyz ()
Ответ на: комментарий от dizza

А ты не путаешь гибридные языки с чистыми функциональными? Гибридное программирование, сочетающее в себе функциональное и ООП (the best of two worlds), вполне себе практично. Сразу видно, что ты не дотнетчик :)

dave ★★★★★ ()
Ответ на: комментарий от kyz

> а как это сделано в С-шарпе, читабельно?

Туда await скоро добавят. Реактивное программирование в F# основано на продолжениях, а именно на монаде Async + IObservable и IEvent. Быть может, в C# появится что-то подобное, хотя у них там внутрях await будут не продолжения, а будет конечный автомат.

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