LINUX.ORG.RU
ФорумTalks

О функциональном (и не только) программировании


0

0

>ORM+Model-View+Workflow-DSL

Товарищ Луговский назвал это, а не мог бы он объяснить для нас, быдлокодеров, что это есть, зачем оно нужно, или дать ссылки, где можно прочитать в двух словах (объём текста до страницы) об этом?

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

Заранее спасибо за толковое разъяснение.


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

Меня больше интересует скорость разработки проекта и усовершенствований после запуска проекта.

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

>А разве вышеупомянутый "Товарищ" - это последняя инстанция? ^_^

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

suser
() автор топика
Ответ на: комментарий от CrazyPit

>И при чём тут функциональное программирование?

Не знаю. Я вообще впервые слышу эти заклинания. Знаю только, что тов. Луговский распространяет учение о функциональном программировании, поэтому осмелился предположить, что это как-то связано.

suser
() автор топика
Ответ на: комментарий от Pi

>туториал по хаскелю почитай, что ли :)

Это не вопрос. Вопрос такой: что я получу от функционального программирования и от других вещей, продвигаемых Луговским.

suser
() автор топика

Вот была же хорошая ссылка
http://en.wikipedia.org/wiki/Functional_programming
Я прочитал и даже немного понял :)
С удивлением выяснил, что я, оказывается, немного знаю один из ф-циональных языков - xslt (он действительно функциональный?)... хотя какой это язык... regexp'ы на стероидах Ж)

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

>прочитай туториал :D

Чтобы узнать, стоит ли мне работать врачом, надо выучиться в медицинском институте? :)

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

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

А про то что перечислено посмотри в википедии.

CrazyPit ★★★
()

Была в talks или в Development тема не далее месяца назад, о том, "для каких задач больше подходят ФЯ?" Только вот найти ее с помощью этого дурацкого поиска не получается

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

>туториал по хаскелю почитай, что ли :)

А хаскель самым продвинутым среди функциональных считается, самым ярковыраженным или как (т. е. почему ты советуешь именно его)?

suser
() автор топика
Ответ на: комментарий от W98

>знаю один из ф-циональных языков - xslt (он действительно функциональный?)... хотя какой это язык... regexp'ы на стероидах Ж)

а) он декларативный

б) регекспы составляют менее 10% от фич xslt

>Он говорил это в контексте обсуждения веб девелопмента и заодно приводил примеры фрэймворков.

Представляю, как vsl обрадуется, когда узнает про MS Access, про то, что в нем есть "таблицы" и "формы". Это ли не мечта Rubyста? Готовый фреймворк и не надо заморачиваться со статическими типами, и производительность Java/100

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

>А хаскель самым продвинутым среди функциональных считается, самым ярковыраженным или как (т. е. почему ты советуешь именно его)?

он самый функциональный:) В твоём ВУЗе ФП не проходят чтоль?

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

Судя по вот этому http://shootout.alioth.debian.org/benchmark.php?test=all&lang=ocaml&l... OCaml очень хорош. Меньше строк кода и производительность на уровне C++.

Небольшой примерчик:

(*Слегка измененный пример из OCaml tutorial*) (*С помощъю этой фигни мы можем вычислить производную какой-либо функции*) let df f dx x = (f(x +. dx) -. f(x)) /. dx;; (*Что это значит? Теперь df - функция, которая принимает в качестве аргумента функцию, и возвращает функцию, которая принимает вещественное число и возвращает функцию, которая принимает вещественное число и возвращает вещественное число (не запутал?)*) (*Более длинная (и понятная) форма*) (*let df = function f -> function dx -> function x -> (f(x +. dx) -. f(x)) /. dx;;*)

let sqr x = x *. x;; (*Икс в квадрате*)

(*А теперь самое интересное!*) let sqr' = df sqr 1e-7;; (*Что здесь происходит? Фактическим параметром df является sqr. В результате получаем функцию, фактическим параметром которой является число 1e-7. Теперь sqr' - производная sqr*)

Printf.printf "f(x) = %f\nf\'(x) = %f\n" (sqr 5.0) (sqr' 5.0);; (*Догадайтесь, что происходит здесь:)*)

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

Пардон за нечитаемый код

(*Слегка измененный пример из OCaml tutorial*)
(*С помощъю этой фигни мы можем вычислить производную какой-либо функции*)
let df f dx x = (f(x +. dx) -. f(x)) /. dx;;
(*Что это значит? Теперь df - функция, которая принимает в качестве аргумента функцию, и возвращает функцию, которая принимает вещественное число и возвращает функцию, которая принимает вещественное число и возвращает вещественное число (не запутал?)*)
(*Более длинная (и понятная) форма*)
(*let df = function f -> function dx -> function x -> (f(x +. dx) -. f(x)) /. dx;;*)


let sqr x = x *. x;;
(*Икс в квадрате*)


(*А теперь самое интересное!*)
let sqr' = df sqr 1e-7;;
(*Что здесь происходит? Фактическим параметром df является sqr. В результате получаем функцию, фактическим параметром которой является число 1e-7. Теперь sqr' - производная sqr*)


Printf.printf "f(x) = %f\nf\'(x) = %f\n" (sqr 5.0) (sqr' 5.0);;
(*Догадайтесь, что происходит здесь:)*)

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

>он самый функциональный:) В твоём ВУЗе ФП не проходят чтоль?

Нет, только пролог проходят.

suser
() автор топика

Вообще-то ты немножко смешал понятия, ORM, Model-view можно вполне себе реализовать на императивном языке. Товарищ Луговской в том треде утверждал, что гвозди должны забиваться молотком, а не кухонным комбайном, и если делать это кухонным комбайном, то это возможно, но только через большую вонючую извилистую задницу, тем не менее несознательные товарищи, коих большинство, предпочитают делать через эту самую задницу, в своей ничтожности не смысля того, что все это можно сделать правильно и не любить чужой мозг и остальные нервы.

Каким боком здесь ФП? Ну... Знаешь ли, даже я в своей быдлонесознательности, когда перешел от подхода "разжуй шаги к решению" (ИП) к "опиши решение" (ФП), даже в той ограниченной мере, которую я и не смею называть полноценным ФП, программы ни с того ни с сего стали более стройными, компактными, а главное -- понятными даже через полгода, при том, что комментирован код весьма скудно.

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

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

Я помню лабу по СиАОД на тему динамического программирования. Писал на C. Помню тот геморрой. На функциональном языке можно было бы просто записать уравнения Беллмана. А в ФП я вообще-то новичек. Неделю назад OCaml'ом заинтересовался.

Вообще я поражаюсь, насколько у моих однокурсников мозг делфями загажен. Нет, я не собираюсь ругать Delphi, просто многие ничего дальше не видят!

Zenom ★★★
()

Попиши немного на scheme, очень простом, но красивом языке. И почитай
SICP. Просветление не обещаю, но некоторое понимание обязательно появится.

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

> Ну опиши решение это не только ФП.

С ходу и двумя словами сказать не получилось... :) Да и надо оно? Кто попробует -- поймет.

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

да, он проще, лиспоподобный: на нём и императивно писать можно

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

>С помощъю этой фигни мы можем вычислить производную какой-либо функции

После статьи Jerzy Karczmarczuk-а "Functional Differentiation of Computer Programs" этот пример выглядит совсем никак.

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

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

anonymous
()

>где можно прочитать в двух словах

В двух словах - почитай тут ==>оно рулит<==.

>объём текста до страницы

Такой обьем тебя не убедит - почти всё, помещающееся на 1 страницу, одинаково просто при любом подходе. Нужно читать о задачах, в которых разница _заметна_ невооруженным глазом.

DonkeyHot ★★★★★
()

> ORM+Model-View+Workflow-DSL

Какое это отношение имеет к ФП???

MVC - это стандартный подход и в императивных языках для построения модульных инфраструктур, будь то Swing или JavaServer Faces. Сопровождать крупные non-MVC большие системы практически не возможно. Или возможно, но T.O.C. возрастает немеренно, потому что не возможно!

ORM нужен для отображения структуры РСУБД в объектную модель. Без Hibernate, JDO или даже EEJB, будет не проект, а "каша".

Все эти подходы, а также АОП (Spring, АОП для Eclipse - AspectJ) нужны тогда, когда возникает сложный проект. Также, ФП на сегодняшний день является вершиной в решении проблем сложности построения программных комплексов.

Естественно, для задач типа "Hello, World!" данные технологии используются только в учебно-демонстрационных целях.

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

> MVC - это стандартный подход и в императивных языках для построения модульных инфраструктур, будь то Swing или JavaServer Faces. Сопровождать крупные non-MVC большие системы практически не возможно. Или возможно, но T.O.C. возрастает немеренно, потому что не возможно!

> ORM нужен для отображения структуры РСУБД в объектную модель. Без Hibernate, JDO или даже EEJB, будет не проект, а "каша".

> Все эти подходы, а также АОП (Spring, АОП для Eclipse - AspectJ) нужны тогда, когда возникает сложный проект. Также, ФП на сегодняшний день является вершиной в решении проблем сложности построения программных комплексов.

(Зевая) И чо, типа без жабы большой проект сдохнет? Ты прям так заявляешь, будто за пределами жабских фреймворков жизнь не существует...

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

> И чо, типа без жабы большой проект сдохнет?

Ты догадлив и проницателен.

> Ты прям так заявляешь, будто за пределами жабских фреймворков жизнь не существует...

Так разве это жизнь?

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

>После статьи Jerzy Karczmarczuk-а "Functional Differentiation of Computer Programs" этот пример выглядит совсем никак.

Ну так это же просто пример, демонстрирующий, что в ФП функция ничем не отличается от других данных. Статью не читал (сейчас ищу), но мне кажется, что это все равно, что заявить "Программа Hello world проигрывает echo по универсальности".

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

>Ну так это же просто пример

Но пример настолько "простой", что на C он, пожалуй, выглядел бы так же просто. То ли дело производные произвольного порядка без потери точности и почти без лишнего кода. Читал, правда, давно - подробностей не помню.

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