|
|
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
ДиезМожет я чего-то не понимаю, но о чем спор? Вот, например, рядовая задача - обработка коллекций: Код: plaintext 1. Согласен. Но это малый пласт задач, которые можно параллелить. Яркий пример - интегрирование Симпсоном сложных функций. Этот процесс можно разбить на 2-4 потока и получить некоторое ускорение вычислений за счёт особенностей самого метода. Он - параллелится. Но как быть с другими алгоритмами? Поиски в графах e.t.c ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 10:36:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) wrote: > Давай отделять мух от котлет ? Как вот это можно свернуть в константу: > > (define (run f f1 f2 x y) > (f (f1 x) (f2 y)) > ) Я имел в виду, что накладные расходы сведутся к константе. Я схему не знаю, поэтому не могу сказать, будет ли здесь ОХР. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 11:12:27 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > насколько они высокоуровневые. Так грубо говоря в SQL механизм SELECT'ов > - чисто функциональный язык, а INSERT, UPDATE, DELETE - его императивная > составляющая. Это фигня какая-то. В SQL (без процедурных расширений) все операторы декларативны, в том числе и INSERT, UPDATE, DELETE. То, что они меняют данные, не делает их императивными. Соответственно SQL представляет из себя максимально > функциональное (декларативное) программирование из всех существующих на > данный момент. За ним условно следует Haskell, затем Lisp, затем все > остальные. Это из общеизвестных ессно. LISP - не чисто функциональный язык, он гибридный. Поэтому за Haskel должны в этом отношении следовать все остальные чисто функциональные языки. > Поэтому говорить о будущем функционального программирования некорректно. > Оно уже наступило, про популярность SQL можно судить по названию этого > форума. Правильнее говорить о его развитии... SQL- не функциональный язык. Не путай декларативные языки и функциональные. И кстати не надо путать чисто функциональные и гибридные языки типа лиспа, схемы, питона и т.п. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 11:16:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton wrote: > Я как раз про это и спрашиваю сообщество. Где эти самые критерии? Это уже вопрос конкретного языка и конкретного компилятора с него. "В вакууме" это обсуждать бессмысленно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 11:17:46 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton wrote: > Я опять не понимаю (книга на полке стоит) - можешь дать точную ссылку с > цитатой? > Пруфлинк с цитатой. <http://roman-dushkin.narod.ru/fp_01.html> Однако, Душкин обескураживает и разочаровывает с первых строк своими высказываниями о лиспе. Блин, если не знаешь, ну зачем писать ? Язык обозвал LISP-ом, CLOS обозвал диалектом, почему-то у него лисп -- традиционный интерпретатор. А как вообще книга ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 11:37:46 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Gluk (Kazan) wrote: > Давай отделять мух от котлет ? Как вот это можно свернуть в константу: > > (define (run f f1 f2 x y) > (f (f1 x) (f2 y)) > ) Я имел в виду, что накладные расходы сведутся к константе. Я схему не знаю, поэтому не могу сказать, будет ли здесь ОХР. Накладные расходы на многопоточность ? к константе ??? с учетом необходимости синхронизации f1 и f2 перед выполнением f ????? Это фантастика (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 11:42:27 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Однако, Душкин обескураживает и разочаровывает с первых строк своими высказываниями о лиспе. Блин, если не знаешь, ну зачем писать ? Язык обозвал LISP-ом, CLOS обозвал диалектом, почему-то у него лисп -- традиционный интерпретатор. А как вообще книга ? Пока не могу сказать. Других книг в бумажном варианте по ФП я не читал ибо на русскоязычной ниве больше ничего не издаётся. С первых строк, захватывает люто и бешено, но от некоторых глав у меня честно говоря плавится мозг и вынужнен откладывать книгу на полку а потом перечитывать главу заново. Душкин также жонглирует неведомой мне терминологией из комбинаторики, e.t.c. и читать местами трудно. Вообще-то я искал более практическое руководство. Но на ozon-e есть новое издание. Что-то вроде "Практика работы на языке Haskell". Думаю для меня это будет более подходящим quick start-ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 11:46:47 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, В данном случае я рассматриваю язык SQL с точки зрения того, что INSERT, UPDATE, DELETE - задают условия задачи - выполняются друг за другом в определенные моменты во времени - изменяет текущее состояние системы - императивны, SELECT - вычисляет функцию - иррелевантны ко времени - обладают атрибутами чистой функции - декларативны... Конечно я знаю что в INSERT, UPDATE, DELETE можно использовать семантику SELECT, но для чистоты терминологии мы их расматриваем опять таки раздельно как вычисление функций, и в зависимости от результатов изменение системы... То что LISP - не функциональный язык я в курсе... И SQL не чисто функциональный... Потому как чисто функционального языка быть не может, я же писал... Вопрос в степени функциональности и именно в порядке убывания ее я расставил "языки" в предыдущем посте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 14:42:03 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) wrote: > Накладные расходы на многопоточность ? к константе ??? > с учетом необходимости синхронизации f1 и f2 перед выполнением f ????? На вызов, какая там многопоточность ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 15:42:33 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > То что LISP - не функциональный язык я в курсе... И SQL не чисто > функциональный... SQL вообще нигде ни разу не функциональный. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 15:44:23 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv На вызов, какая там многопоточность ? А кто сказал, что накладные расходы ограничиваются вызовом ? А кванты времени распределить, а потоки синхронизировать ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 15:55:53 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
belugin Код: plaintext 1. 2. 3. 4. 5. 6. Кстати, я правильно понимаю, что здесь 3 потока ? 1. Вычисляет nf1 2. Вычисляет nf2 3. Складывает результаты Если да, то во первых вопрос: Как обеспечивается синхронизация ? Каким образом 3 поток ожидает первых двух ??? Ну и п.2 Запускаем ЭТО для 1000000 и получаем аффигенную кучу потоков ожидающих вычисления nf1 и nf2 (про то что мы дофигища раз будем вычислять одно и то-же скорбно промолчу) и парочку совсем мелких (ради которых не стоило потоки создавать). Шедулер должен быть очень умный, чтобы раздать кванты в правильном порядке (если система не загнется раньше на таком количестве честных потоков). Как пример параллельного программирования конечно катит :) чисто поржать Все это к вопросу о накладных расходах на вызов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 16:08:36 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Все это к вопросу о накладных расходах на вызов И накладные расходы на этот бордель будут отнюдь не константой от мульона ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 16:10:42 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Wikipedia Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний (в значении, подобном таковому в теории автоматов). Функциональное программирование не предполагает изменяемость данных (в отличие от императивного, где одной из базовых концепций является переменная). На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции взаимодействуют и изменяют уже определённые данные. Таким образом, в императивном программировании, при вызове одной и той же функции с одинаковыми параметрами можно получить разные данные на выходе, из-за влияния на функцию внешних факторов. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат в обоих случаях, входные данные не могут измениться, выходные данные зависят только от них. Первые 2 абзаца в википедии про функциональное программирование... Таким образом SQL более удовлетворяет определению функционального программирования чем тот же Haskell или тем более Lisp... PS: Хотя счас конечно скажут, что википедия не аргумент, что у каждого свое определение ФП, и т.п. А когда каждый придумывает сам определения, разговаривать о чем бы то ни было бесполезно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 16:14:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieТаким образом SQL более удовлетворяет определению функционального программирования чем тот же Haskell или тем более Lisp... SQL - это всего-лишь протокол взаимодействия РСУБД и клиента. И наделять его какими-то особыми свер-естественными возможностями не стоит. Это вобщем-то даже не язык. Кроме того у SQL существует несколько стандартов, и несколько реализаций со своими особенностями. Еть также под-разделы SQL: DQL, DML, DDL , рассматривая которые мы неизбежно скатимся в глубокую софистику терминов, понятий и толкований. Есть также масса трюков и уловок, которые могут быть реализованы в одной СУБД для преодоления некоторых ограничений SQL, и полностью отсутствовать в другой. И уж тем более неинтересно рассматривать концептуальные Ansi* SQL. Их практическая польза - под вопросом. Поэтому я предлагаю SQL вообще исключить из темы дискуссии. Это неинтересно и оффтопово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 16:55:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, Угу, также можно сказать что Assembler - это всего-лишь протокол взаимодействия процессора и разработчика, а язык Java - протокол взаимодействия виртуальной машины и операционной системы... Предлагаю их тоже исключить из дискуссии и посмотрим что останется... ЗЫ: Попробуйте рассмотреть СУБД как очень высокоуровневую виртуальную машину типа JVM и все станет на свои места... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 17:08:26 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkiе, я не хочу спорить, но представь себе на минуту, что мы зададимся целью доказать что протокол http является языком ФП ? Разничу чувствуешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 17:13:06 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, Вы имеете в виду HTML и XML? Это не языки вычислений, поэтому сравнивать их с SQL, Haskell, и т.п. не корректно. А вот скажем XSLT как язык преобразований вполне можно... Другой вопрос конечно применимости, на SQL симплекс-метод реализовать можно, но запрос будет диким, с другой стороны в business solutions SQL более применим чем императивные языки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 17:26:52 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЭто не языки вычислений, поэтому сравнивать их с SQL, Haskell, и т.п. не корректно. А вот скажем XSLT как язык преобразований вполне можно... 1) Ты почти сам ответил на свой вопрос. SQL-это прослойка. Это не язык программирования в общем понимании этого слова. 2) XSLT не является подмножеством/частью http. Это отдельная технология. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 17:33:20 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, Java - тогда тоже прослойка между клиентом и виртуальной машиной. Не ставьте телегу впереди лошади... Первичен всегда язык\парадигма, а то что его выполняет JVM, процессор, СУБД это уже технические особенности. ЗЫ: Хм... Интересно что означает последняя буковка в слове SQL... Уже начал сомневаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 17:43:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Не хочу спорить. Можешь оставаться при своём мнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 17:57:25 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv SQL вообще нигде ни разу не функциональный. Как посмотреть. SQL - это алфа Кодда, а алфа - это набор операций рел. алгебры. А операции - это функции. Т.е. и insert? update? delete - это функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 18:00:36 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, Так спорить не о чем... Как я уже писал, вопрос определений... Если у тебя черное это белое, то доказать обратное невозможно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 18:09:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Дискуссия имхо как-то выдохлась. Хочу только ответить на два контраргумента предъявленных мне и дас вере аллес. Первое: Может я чего-то не понимаю, но о чем спор? Вот, например, рядовая задача - обработка коллекций: dest_list = scr_list.foreach(item => process_item(item)); Если process_item() - "чистая" функция, то "умный" компилятор запросто может применить реализацию foreach, запускающую process_item в несколько потоков. Ребят, это уже не смешно, бо третий раз одно и тоже. Вы знаете как называется подобный код на профессиональном жаргоне? Embarrassingly parallel. В переводе на русский - ежу понятно как его параллелить. Если способность автоматически находить и параллелить такой код является главным агрументом за то что ф.п. это парадигма параллельных вычислений будущего, то как то обидно становится за такое будущее. Второе: Компилятор С/С++ не имеет право параллелить твой код. И не знает, где это можно сделать. А в функциональных языках -- наоборот, и знает, и имеет право. Слушай Зифф, ну ладно тут дети всякую хрень пишут, но ты же солидный человек, модератор форума C/C++, это ж твой кусок хлеба! Зачем же ты всем компиляторам C/C++ так походя отказываешь в способности автоматически параллелить код? Зайди на сайт Сана, посмотри чего делает свич -xautopar Сановского C/C++ компилятора и да снизойдёт на тебя просветление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 21:27:21 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
дискуссия как раз очень интересная, ибо развенчивает некоторые мифы. Антарес задал мне интересный вопрос, чуть позже напишу ответ и постараюсь задать вопросы для продолжения дискуссии. Промежуточный итог (на мой взгляд) Пока ясно, что ФП <> декларативное программирование. А многие ждут именно декларативной революции. Современные реализации ФП-языков так-же как и древние SQL сервера мало чего умеют сами, а то что умеют непонятно по каким критериям работает. Спор за автоматическое распараллеливание в ФЯ это выявил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 22:15:01 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36434395&tid=1343707]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
225ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 540ms |

| 0 / 0 |
