|
|
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Народ, уже долгое время пытаюсь понять в чем суть и фишка направления под названием "функциональное программирование". Читаю форумы, качаю книги, но понять что это дает и на каких задачах можно получить выигрыш не понятно. Что видно со стороны: Все доки начинают объяснять про лямбда-исчисление, потом как правило излагается куча жуткой и непонятной математики. Проблема в том, что не объясняется, какой смысл определять функции вместо f(x,y) экзотичной записью /\ x.y. Пока для меня все это выглядит как не стандартный способ записи выражений, не более того. Экзотичная запись порождает экзотичные и нетривиальные записи простых выражений, часто упоминается некие правила интерпретации таких выражений и загадочное слова - карринг. Выглядит очень умно, но ни фига это все не понятно. Фишка номер 2, нет циклов, вообще нет циклов. Все надо определять через рекурсивные функции. Меня еще в школе (начало 90-х) учили на уроках информатики, что рекурсия это плохо, ибо не понятно заранее насколько может быть глубина вызовов. В чем круть абстракции записывать все через рекурсию никто не объсняет. Я могу понять, что если поменять взгляд на жизнь и перейти к новым абстракциям ее описывающим, то можно получить выигрыш в некоторых случаях. К сожалению, я не нашел пока ни одной книги, где-бы анализировался и описывалось преимущество решения задач в ФП-стиле перед императивным способом. И самое главное, не вижу связи между ФП и декларативностью. SQL вот декларативен и обладая этим свойством имеет колоссальное преимущество в своей области перед более слабыми абстракциями типа прцедурным программированием и ООП парадигмой. В общем просьба объяснить простым языком, в чем соль, ради чего это все надо и где зарыт профит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 16:21:10 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Фишка номер 1 т.н. "чистых" функциональных языков (в которых в функциях не допускается побочных эффектов) в том, что программу В ЛЮБОЕ ВРЕМЯ ВЫПОЛНЕНИЯ ГАРАНТИРОВАННО БЕЗОПАСНО моно распараллелить. Т.е. у тебя был один поток выполнения -- мы делаем два потока, три и т.п. Это даёт ф.я. просто билет в будущее, потому как одно из основных направлений IT сейчас -- развитие параллельных вычислений. Но не все ФЯ чистые. Фишка номер 2 любых ф.я. (и не чистых тоже) -- это функции или алгоритмы высших порядков. Это -- возможности писать алгоритмы, абстрагируясь от конкретных структур данных и частностей. Но эта возможность используется вовсю уже давно в других языках (не функциональных), например, C или С++. Ни номер 1, ни номер 2 принципиально ничего в общем для ф.я. не даёт (н.1 даёт, но не для всех ф.я.). Есть ещё другой аспект, третий, как правило, ф.я. -- мощные, удобные и простые языки программирования, сложность только в постижении главных концепций. На них просто и удобно программировать. > И самое главное, не вижу связи между ФП и декларативностью. SQL вот > декларативен и обладая этим свойством имеет колоссальное преимущество в Не все функциональные языки декларативные. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 16:35:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old wrote: К сожалению, я не нашел пока ни одной книги, где-бы > анализировался и описывалось преимущество решения задач в ФП-стиле перед > императивным способом. ФП -- это не обязательно декларативное программирование. А книги наверное надо искать среди книг по чистым ф.я. > И самое главное, не вижу связи между ФП и декларативностью. SQL вот Её и нет. ФЯ не обязан быть декларативным. > декларативен и обладая этим свойством имеет колоссальное преимущество в > своей области перед более слабыми абстракциями типа прцедурным > программированием и ООП парадигмой. Ну, чистые ф.я. имеют такие же преимущества (и недостатки) в некоторых областях. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 16:38:08 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldвместо f(x,y) экзотичной записью /\ x.y. Фактически, ты сам ответил на свой вопрос. В первом определении есть имя функции, а во втором нет. Чегтовски неудобно обращаться с функциями как с переменными, если они должны быть поименованы :( А в этом и заключается цель ФП :) Ggg_old Меня еще в школе (начало 90-х) учили на уроках информатики, что рекурсия это плохо, ибо не Стоит забыть то чему учили в школе и подумать почему рекурсия плохо ??? Очевидно потому-что неконтролируемо жрет стек ? Но во первых в реализациях ФП языков стек устроен по другому (не аппаратный, а на куче), а во вторых хвостовая рекурсия может быть (а в некоторых языках должна быть) реализована как цикл. Видимо не всякая рекурсия это плохо ? IMHO: вместо того чтобы акцентировать внимание на том, что ФП непривычно, следовало задать вопрос, ради чего весь сыр бор ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:02:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldВ общем просьба объяснить простым языком, в чем соль, ради чего это все надо и где зарыт профит. Я частично с тобой согласен. Я тоже ищу полезное применение для для языков lisp, haskell у себя на работе, но к сожалению не нахожу. Есть идеи применить haskell для анализа кучи трассировочных файлов Oracle, но здесь рациональная мысль борется с нерациональной. Ведь тот-же анализ я могу запрограммировать на java+antlr. И бог его знает, какое решение будет дешевле для меня реализовано. На haskell я пока это не могу сделать. Не хватает знаний и опыта! Подытоживая, скажу, что в ФП вроде-бы есть ВСЁ что надо джентльмену. Но только нет экономического обоснования применения ФП. Я когда-то поднимал ветку в Работе по этому вопросу и еще раз убедился в своей правоте. Рынка ФП-программистов у нас де-факто не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:14:22 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton Подытоживая, скажу, что в ФП вроде-бы есть ВСЁ что надо джентльмену. Но только нет экономического обоснования применения ФП. Видимо по той причине, что джентельмены таких вопросов не задают ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:16:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Видимо по той причине, что джентельмены таких вопросов не задают ? Браво! После этого новичкам остаётся поверить в сущестование всемирного заговора ФП и поставить функциональщиков на уровень массонов и прочих ЕРЖ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:30:09 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonGluk (Kazan)Видимо по той причине, что джентельмены таких вопросов не задают ? Браво! После этого новичкам остаётся поверить в сущестование всемирного заговора ФП и поставить функциональщиков на уровень массонов и прочих ЕРЖ. и кому от этого станет хуже ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:32:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Лично мне - ни холодно ни жарко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:34:56 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Впрочем это оффтоп. Давай будем в теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:35:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Хмм, я бы не задавал этот вопрос если бы не одно но. Я использую один принцип, если не можешь понять что-то досконально, то наблюдай за людьми, которые в этом понимают и добиваются результата. Читать, что они пишут и думают. Так вот, интерес к ФП у меня начал появляться по результатам обзорам блогов по конкурсам IFCPC. Конкурсы эти не тривиальны, рассчитаны для очень нетривиальных программистов в правильно поставленными мозгами. Дальнейшее изучение их статей, мыслей привело меня к выводу: эти ребята умнее на два порядка чем я, видят вперед индустрию на порядок дальше чем я. Так вот, практически все результатов на самых сложных и нетривиальных задачах добиваются именно применяя языки ФП. И есть в их среде мнение, что все задачи можно решить на huskell плюс некоторые куски на C. На крайняк - OCAML. Т.е. что-бы быть на острие прогресса надо владеть ФП+С. Изучение причудливого синтаксиса ФП языка, в моем случае это был OCAML, не открыл для меня новые горизонты, т.к. я увидел отсутствие циклов, замысловатый способ записи функций и.т.д. Т.е. главное, что я не понял, это идеологию применения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 19:17:01 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Насчет абстракций, приведу пример. Переход в абстракции, это хорошо. Например, помню как нам рассказывали про Z-проеобразование. Если у вас возник затык, то есть такое прием: перейти в абстрактную алгебраическую форму, в ней решить равнение как линейное. И перейти из нее обратно (правда это не всегда возможно, если не сказать, что почти некогда ;). Вот это я понимаю польза абстракции - выпрыгнуть за границы реальности и тем самым найти решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 19:22:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Думал, куда написать этот пост, либо в чуждый мне ru_declarative или в родной sql.ru Решил запоститься в родные пенаты, тут не страшно задать дурные вопросы. В ru_declarative уже познали ДАО и размышляют исключительно над коанами. Коаны для мене - overkill. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 19:27:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Фишка номер 1 т.н. "чистых" функциональных языков (в которых в функциях не допускается побочных эффектов) в том, что программу В ЛЮБОЕ ВРЕМЯ ВЫПОЛНЕНИЯ ГАРАНТИРОВАННО БЕЗОПАСНО моно распараллелить. Т.е. у тебя был один поток выполнения -- мы делаем два потока, три и т.п. Это даёт ф.я. просто билет в будущее, потому как одно из основных направлений IT сейчас -- развитие параллельных вычислений. Аж дух захватывает... Вот мне интересно, а зачем мне иметь возможность "В ЛЮБОЕ ВРЕМЯ ВЫПОЛНЕНИЯ ГАРАНТИРОВАННО БЕЗОПАСНО распараллелить" какую - либо функцию, которая реализует глубоко сермяжно последовательный алгоритм? Если единственное преимущество ф.я. с точки зрения распаралеливания вычислений состоит в том что они заставляют кодить потокобезопасные проги, то это несомненно круто, но вот заявлять что на этом основании это им даёт какой-то там билет в будущее - имхо перебор. Главные проблемы в этом направлении - минимизация последовательной части алгоритмов (бо закону Амдала глубоко перпендикулярно на каком языке написан код) и количество промахов по кэшу. Так что если затрагивать этот аспект, рассказали б лучше чем паралельные эипиай для ф.я. лучше птреадов, опенМП и МПАИ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 19:41:42 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old, Вот, имхо думаю, что "чистое" ФП интересно больше тем, что егойные идеи постепенно перетекают в мейнстрим. Появляются "постфункциональные" ( (c) Одерский ) языки типа Scala и Nemerle, где можно писать вполне себе императивные программы. А можно применить принципы ФП и забыть про проблемы синхронизации потоков, mutable state, NullPointerException... А заодно выкинуть из головы половину паттернов ООП, ибо более оные не требуются :) /* субъективные впечатления после года писания на Scala */ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 19:52:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, вы уже говорите коанами ;) SCALA - это lisp-подобный язык или я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 20:05:12 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldДиез, вы уже говорите коанами ;) SCALA - это lisp-подобный язык или я ошибаюсь? Нее, скорее java++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 20:18:34 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldИ есть в их среде мнение, что все задачи можно решить на huskell плюс некоторые куски на C. На крайняк - OCAML. Если я не ошибаюсь, все задачи можно решить на языке который обладает некой полнотой по Тьюрингу. И поэтому к их мнению следует отнестись с некой долей скепсиса. По крайней мере пока не пояснят почему. В любом случае, это предмет спора. Т.е. что-бы быть на острие прогресса надо владеть ФП+С. Здесь - согласен. Изучение ФП языка подобно изучению латыни или эсперанто перед погружением в иностранные языки. В любом случае оно - полезно. увидел отсутствие циклов, замысловатый способ записи функций и.т.д. Т.е. главное, что я не понял, это идеологию применения. Будь осторожен! Отсутствие циклов еще не повод для ломания стеретипов или ухода в иную веру. Кстати циклы в Haskel и Lisp присутствуют и не возбороняются к приминению. Короче, подходя к программной реализации вооружайся скепсисом и думай как Одессит - "И шо я с этого буду иметь?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 21:36:36 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZivФишка номер 1 т.н. "чистых" функциональных языков (в которых в функциях не допускается побочных эффектов) в том, что программу В ЛЮБОЕ ВРЕМЯ ВЫПОЛНЕНИЯ ГАРАНТИРОВАННО БЕЗОПАСНО моно распараллелить. Т.е. у тебя был один поток выполнения -- мы делаем два потока, три и т.п. Это даёт ф.я. просто билет в будущее, потому как одно из основных направлений IT сейчас -- развитие параллельных вычислений. Мастер я рискну предположить, что на практике не так всё просто и распараллеливание всего и вся еще не гарантирует быстрого получения результата. Мне например не понятно, КТО и КАК будет диспетчеризировать функции-процессы? На основании каких правил? Нужно учитывать накладные расходы на ту-же мультизадачность. "Столпы" программирования, такие как Дональд Кнут говорят-де "для большего процента ПО параллелизм не даёт ощутимых преимуществ" (очевидно имеют в виду свои фундаментальные алгоритмические блоки). Маэстро Вирт даёт очень нелестную оценку самой парадигме, заявляя что GC - это вовсе не круто и отстой а чистота, при параллелизме имеет очень небольшое преимущество и shared ресурсы всегда легко идентифицировать в программе на императивном языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 21:49:36 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
2mayton: Прямо в точку! Выражение "В чем соль, ради чего это все надо и где зарыт профит." эквивалентно "И шо я с этого буду иметь?". Просто приходится делать скидку на то, что не всем повезло как мене жить в Одессе и излагать свои мысли столь пространным официальным русским языком ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 21:53:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton Мастер я рискну предположить, что на практике не так всё просто и распараллеливание всего и вся еще не гарантирует быстрого получения результата. Мне например не понятно, КТО и КАК будет диспетчеризировать функции-процессы? На основании каких правил? Нужно учитывать накладные расходы на ту-же мультизадачность. Насколько я знаю, диспатчеризацией занимается ОС, а вот декларация параллельности лежит на программисте. Вот например в GPH оно делается вот так: Код: plaintext 1. 2. 3. 4. 5. 6. Где "x 'par' y" означает вычислить y при этом x вычислить параллельно А вот так в F# Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Лично я параллельным программированием не занимаюсь, а просто использую F# в качестве скриптового языка время от времени - мне нравится легкость синтаксиса и возможность комбинировать функции а также поддержка со стороны Visual Studio. Еще фот как-то сделал и подключил к аксапте бьютифаер для SQL на parsec - это такая библиотека для написания парсеров на Haskell. Фишка в том, что грамматика описывается на том же языке, что и семантика и, соотвественно, можно использовать все богатство средств обобщения кода - выносить повторяющиеся правила в функции с параметрами и т.д. Маэстро Вирт даёт очень нелестную оценку самой парадигме, заявляя что GC - это вовсе не круто и отстой а чистота, при параллелизме имеет очень небольшое преимущество и shared ресурсы всегда легко идентифицировать в программе на императивном языке. Одно дело идентифицировать, другое - проверить формально и чтобы компилятор ругнулся. А еще с функциональным кодом легче проводить всякие манипуляции - доказывать его свойства или, например, транслировать в SQL. Не даром LINQ сделал Эрик Майер, один из авторов Haskell. LINQ по сути, это воплощение концепции хаскелевской монады, сейчас еще из функциональных языков тащат функциональное реактивное программирование (Rx Framework). В-общем, с моей точки зрения, стоит поковырять какой-нибудь чисто функциональный язык просто чтобы понять концепции. С использованием сложнее (если есть окружение со своими стандартами), но во-первых, всегда есть какие-то задачи, которые можно решать для себя. Во-вторых, есть гибридные языки (scala, F#, nemerle), которые позволяют плавно интегрироваться распространенные среды (вот сегодня хороший пример нашел в блоге) В-третьих, можно функционально писать на обычных языках, например на javascript это довольно легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 23:16:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton Мастер я рискну предположить, что на практике не так всё просто и распараллеливание всего и вся еще не гарантирует быстрого получения результата. Мне например не понятно, КТО и КАК будет диспетчеризировать функции-процессы? На основании каких правил? Нужно учитывать накладные расходы на ту-же мультизадачность. Насколько я знаю, диспатчеризацией занимается ОС, а вот декларация параллельности лежит на программисте. Вот например в GPH оно делается вот так: Код: plaintext 1. 2. 3. 4. 5. 6. Где "x 'par' y" означает вычислить y при этом x вычислить параллельно А вот так в F# Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Лично я параллельным программированием не занимаюсь, а просто использую F# в качестве скриптового языка время от времени - мне нравится легкость синтаксиса и возможность комбинировать функции а также поддержка со стороны Visual Studio. Еще фот как-то сделал и подключил к аксапте бьютифаер для SQL на parsec - это такая библиотека для написания парсеров на Haskell. Фишка в том, что грамматика описывается на том же языке, что и семантика и, соотвественно, можно использовать все богатство средств обобщения кода - выносить повторяющиеся правила в функции с параметрами и т.д. Маэстро Вирт даёт очень нелестную оценку самой парадигме, заявляя что GC - это вовсе не круто и отстой а чистота, при параллелизме имеет очень небольшое преимущество и shared ресурсы всегда легко идентифицировать в программе на императивном языке. Одно дело идентифицировать, другое - проверить формально и чтобы компилятор ругнулся. А еще с функциональным кодом легче проводить всякие манипуляции - доказывать его свойства или, например, транслировать в SQL. Не даром LINQ сделал Эрик Майер, один из авторов Haskell. LINQ по сути, это воплощение концепции хаскелевской монады, сейчас еще из функциональных языков тащат функциональное реактивное программирование (Rx Framework). В-общем, с моей точки зрения, стоит поковырять какой-нибудь чисто функциональный язык просто чтобы понять концепции. С использованием сложнее (если есть окружение со своими стандартами), но во-первых, всегда есть какие-то задачи, которые можно решать для себя. Во-вторых, есть гибридные языки (scala, F#, nemerle), которые позволяют плавно интегрироваться распространенные среды (вот сегодня хороший пример нашел в блоге) В-третьих, можно функционально писать на обычных языках, например на javascript это довольно легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 23:16:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
извините за дубль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 23:17:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
С одной стороны ответ по-существу и спасибо за это, с другой стороны - то что вы продемонстрировали семантически очень похоже на директивы OpenMP для императивных C/C++ и Fortran: #pragma omp parallel #pragma omp for и т.д. Так что в этом смысле говорить о билете в будущее параллельных вычислений именно для ф.я. всеж таки рановато... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 23:43:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
В приведенном коде на F# не видно ничего функционального. Обычный императивный код, только записанный необычным синтаксисом другого языка: "Для каждого элемента списка вызвать функцию такую-то, которая выполняет строгую последовательно операция". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:22:01 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_n wrote: > Аж дух захватывает... Вот мне интересно, а зачем мне иметь возможность > "В ЛЮБОЕ ВРЕМЯ ВЫПОЛНЕНИЯ ГАРАНТИРОВАННО БЕЗОПАСНО распараллелить" какую > - либо функцию, которая реализует глубоко сермяжно последовательный > алгоритм? Чтобы параллелить алгоритм в любой момент. Например, у тебя есть алгоритм (на ф.я.), который обрабатывает список и что-то считает. Список о 200 элементах. у тебя 10 процессоров. Ты берёшь алгоритм, разбиваешь на 10 частей, и запускаешь на 10 процессорах, потом сливаешь результаты. Получается примерно в 10 раз быстрее. Если единственное преимущество ф.я. с точки зрения > распаралеливания вычислений состоит в том что они заставляют кодить > потокобезопасные проги, то это несомненно круто, но вот заявлять что на > этом основании это им даёт какой-то там билет в будущее - имхо перебор. Ну, как бы я это не сам придумал. > Главные проблемы в этом направлении - минимизация последовательной части > алгоритмов и количество промахов по кэшу. Так что если затрагивать Главные проблемы в этом направлении -- иметь возможность параллелить алгоритмы. Далее уже можно думать о всём остальном. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:41:58 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез wrote: > Одерский ) языки типа Scala и Nemerle, где можно писать вполне себе > императивные программы. А можно применить принципы ФП и забыть про > проблемы синхронизации потоков, mutable state, NullPointerException... > А заодно выкинуть из головы половину паттернов ООП, ибо более оные не > требуются :) Вот кстати да. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:43:11 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old wrote: > Диез, вы уже говорите коанами ;) SCALA - это lisp-подобный язык или я > ошибаюсь? Да ничуть. Лисп-подобный -- это Clojure. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:43:52 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton wrote: > Мастер я рискну предположить, что на практике не так всё просто > и распараллеливание всего и вся еще не гарантирует быстрого > получения результата. Мне например не понятно, КТО и КАК будет > диспетчеризировать функции-процессы? На основании каких правил? Компилятор. Или интерпретатор. > Нужно учитывать накладные расходы на ту-же мультизадачность. Нужно-то нужно, но императивные языки вообще нифига не параллелятся автоматом. Их надо параллелить. Я на самом деле не большой знаток чистой функциональщины, наверное есть там куча своих проблем, но там принципиально хотя бы задача решается. Вообще, параллелизм очень хорошо возникает сам там, где есть абстракции высокого уровня и декларативные операции. Например, операции с матрицами и массивами в фортране, или запросы на SQL, или ещё что-то в этом роде. Там, где есть операнды, правила их обработки, и спецификация на результат, а процесс недетерменирован. В этом случае в условии наличия разных ресурсов можно реализовывать операции так или иначе. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 00:51:57 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Чтобы параллелить алгоритм в любой момент. Например, у тебя есть алгоритм (на ф.я.), который обрабатывает список и что-то считает. Список о 200 элементах. у тебя 10 процессоров. Ты берёшь алгоритм, разбиваешь на 10 частей, и запускаешь на 10 процессорах, потом сливаешь результаты. Получается примерно в 10 раз быстрее. Погоди, погоди... Какой-то пример больно примитивный и удобный для тебя. Я спрашивал про тот случай, когда мне надо что-то сделать и известный мне алгоритм который это что-то делает глубоко последовательный. При работе с императивным языком единственным способом добиться ускорения за счёт распараллеливания - это выбросить известный мне последовательный алгоритм и придумать другой, который будет или полностью (в идеале) или хотя бы частично параллельным. Всё, других вариантов НЕТ. А с ф.я. у тебя что, есть альтернативы??? Главные проблемы в этом направлении -- иметь возможность параллелить алгоритмы. Далее уже можно думать о всём остальном. Опять же, причём здесь ф.я. против и.я? Возможность или невозможность параллелить АЛГОРИТМ зависит от количества и качества мозга в голове, а не от языка или модели программирования. Вообще, параллелизм очень хорошо возникает сам там, где есть абстракции высокого уровня и декларативные операции. Например, операции с матрицами и массивами в фортране, Такие вещи часто пишут в учебниках по программированию люди которые просто не представляют себе всех тонкостей численной реализации методов линейной алгебры. Все абстракции высокого уровня там заканчиваются в тот самый момент когда люди мало-мальски начинают задумываться о точности того, что их высоко абстрактные проги считают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 01:34:24 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_nПогоди, погоди... Какой-то пример больно примитивный и удобный для тебя. Я спрашивал про тот случай, когда мне надо что-то сделать и известный мне алгоритм который это что-то делает глубоко последовательный. При работе с императивным языком единственным способом добиться ускорения за счёт распараллеливания - это выбросить известный мне последовательный алгоритм и придумать другой, который будет или полностью (в идеале) или хотя бы частично параллельным. Всё, других вариантов НЕТ. А с ф.я. у тебя что, есть альтернативы???Пример кстати очень подходящий, но не объясненный до конца :) 1) Есть массив из многих элементов типа А. 2) Есть функция (последовательная) по превращению значения типа А в тип Б. 3) Надо в первом массиве обработать все ячейки и получить массив с данными типа Б. В императивном языке, ты делаешь цикл - обработать первую ячейку, обработать вторую ячейку и так далее. Либо вручную же разбиваешь оригинальный массив на несколько частей (по числу процессоров) и отдаешь каждую часть отдельному процессору. А на ФЯ ты даешь команду обработать такой-то массив такой-то функцией. Транслятор или виртуальная машина решает что если обработка одной ячейки массива не влияет на обработку другой (ничего не пишется обратно в исходные данные или в глобальные переменные) то обработку двух ячеек можно распараллелить, и соотвественно нагружает два процессора. Каждый из них будет заниматься своей ячейкой массива и вот эта обработка будет по прежнему последовательной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 02:08:32 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Хорошо, тогда скажи, чем вот это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. отличается от того что ты описал? Кондовая императивная конструкция, вот просто слово в слово... Пока всё что я вижу из твоего объяснения (сам я ни одного ф.я. не знаю, но в отличии от Пастернака не осуждаю, просто хочу понять чем они так хороши для параллельных вычислений). Пока всё что я понял - цикла не надо. Ну вот я тоже цикл в фукцию спрячу и притворюсь что его там нет. А в остальном OMP озаботится тем чтоб всё было как ты написал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 02:29:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldВ приведенном коде на F# не видно ничего функционального. Обычный императивный код, только записанный необычным синтаксисом другого языка: "Для каждого элемента списка вызвать функцию такую-то, которая выполняет строгую последовательно операция". что делает async и чем use отличается от use! а так же что такое |> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 06:20:43 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Если немного переделать пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 1. Здесь нет гарантии, что someFunction не имеет какого-то побочного эффекта и не изменит свой результат в зависимости от порядка выполнения. В чисто функциональных языках такая гарантия была бы. 2. В функциональных языках это все записалось бы проще - так как развиты сроедства комбинирования функций. Типа Код: plaintext 1. Ну вот я тоже цикл в фукцию спрячу и притворюсь что его там нет В принципе, поверх С++ некоторые пишут функциональные языки - что-то такое в Boost входит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 06:35:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldВ приведенном коде на F# не видно ничего функционального. В принципе, кстати, да - F# не чисто функциональный - там можно писать с побочными эффектами. Но нельзя сказать, что приведенный фрагмент чисто императивный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 06:38:52 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldНарод, уже долгое время пытаюсь понять в чем суть и фишка направления под названием "функциональное программирование". В общем просьба объяснить простым языком, в чем соль, ради чего это все надо и где зарыт профит. Элементы функциональных языков. Евгений Кирпичёв Новые слова, ответы зачем? и почему? По тексту. Лямбда-исчисление. Зачем? В каком-то классе школы (я в третьем) мы изучали уравнения и было такое правило "иксы в левую часть уравнения, остальное в правую". С помощью такого нехитрого способа можно решать псевдологичекие задачки типа "Ваня старше Маши в 2 раза а Егор младше Вани на 15 лет". Беря такю аналогию, можно сказать лямбда-исчисление позволяет представить алгоритм в виде уравнения, которое с помощью алгебры можно упрощать, анализировать и преобразовывать. Карринг. Взмем функцию сложения двух чисел (+ x y) Но выдадим ей один аргумент (funcall #'+ 5) Если ЯП поддерживает карринг то мы получим частично примененую функцию (+5 y) которая будет складывать y и 5. Циклы. Циклы примерно равно "хвостовая рекурсия". Не циклы потому, что если избавились от переменных то зачем нам переменные цикла? Хотя сам процесс итерирования может иметь место. Сама фраза "преимущество решения задач в ФП-стиле перед императивным способом" в отрыве от контекста несколько бессмыслена. Вот императивный бэйсик [code] a = 2 b = 3 c = a + b [code] вот [+ a b] Просто мир императивной парадигмы сейчас включают в себя наряду с переменными, классы, объекты, паттерны, модели и ddd. А из функционального вводные статьи дают только лямбда-термы и рекурси. Почитай приведенную статью это несколько расширит рамки разговора. Или про Лисп, но серьезно. Связь ФЯ с декларативностью. Прямой связи нет, но "комбинаторы и бесточечный стиль". Вобще все зависит от точки зрения, я когда sql смотрю вижу функции select, update и create , замыкающие БД, и попробуй доказать что это не так. P. S. А вобще на этом форуме тема почти бессмысленая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 08:23:26 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldТ.е. что-бы быть на острие прогресса надо владеть ФП+С. Я конечно далек от того, чтобы видеть индустрию на порядок лучше тебя :), но подозреваю, что знание ФП не единственный способ быть на "острие прогресса" во первых и не достаточное условие для такого пребывания там, во вторых. Но то что оно не помешает, это факт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 09:19:33 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
belugin Код: plaintext 1. 2. 3. 4. 5. 6. Оооо да !!! это оооочень полезно. Распараллеливать вычисление чисел Фиббоначи. Еще набивший всем оскомину пример с QuickSort-ом на Haskell-е мне нравится, всем QuickSort-ам QuickSort. А то что сортирует список, а не массив, так это не беда. Ну перестроит он его раз с десяток, так кому от этого плохо ??? А то что средний элемент всегда берет из головы списка, так нам повезет !!! Действительно, кому надо сортировать уже отсортированное ??? Зато алгоритм стал такой понятный понятный (не беда что другой). При знакомстве с трудами некоторых апологетов ФП полезно включать мозг. Некоторые примеры "крутости" ФП граничат с маразмом (Кстати за Кнутом или Виртом я такого не замечал ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 09:40:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Например, у тебя есть алгоритм (на ф.я.), который обрабатывает список и что-то считает. Список о 200 элементах. у тебя 10 процессоров. Ты берёшь алгоритм, разбиваешь на 10 частей, и запускаешь на 10 процессорах, потом сливаешь результаты. Получается примерно в 10 раз быстрее. А на кой здесь ляд ФП ??? Такую замечтательную задачу можно запросто распараллелить даже на фортране ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 09:47:20 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
White Owl wrote: > исходные данные или в глобальные переменные) то обработку двух ячеек > можно распараллелить, и соотвественно нагружает два процессора. Каждый > из них будет заниматься своей ячейкой массива и вот эта обработка будет > по прежнему последовательной. Главное, что если процессоров 100, то точно так же можно загрузить 100 процессоров. А если 500 -- то 500. И при этом это от программиста не зависит. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 09:54:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv White Owl wrote: > исходные данные или в глобальные переменные) то обработку двух ячеек > можно распараллелить, и соотвественно нагружает два процессора. Каждый > из них будет заниматься своей ячейкой массива и вот эта обработка будет > по прежнему последовательной. Главное, что если процессоров 100, то точно так же можно загрузить 100 процессоров. А если 500 -- то 500. И при этом это от программиста не зависит. выше давался пример с omp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 09:55:30 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_n wrote: > #include <omp.h> > ..... > > double a[*100*]; > double b[*100*]; > > int N = *100*; > > void function imp_omp_parallel(int N, double a[], double b[]) > { > int i; > > #pragma omp parallel private(i) shared(a,b,N) > #pragma omp for > for(i = *0*; i < N; i++) > a[i] = i * b[i]; > } > > > отличается от того что ты описал? Кондовая императивная конструкция, вот > просто слово в слово... Компилятор С/С++ не имеет право параллелить твой код. И не знает, где это можно сделать. А в функциональных языках -- наоборот, и знает, и имеет право. > хочу понять чем они так хороши для параллельных вычислений). Пока всё > что я понял - цикла не надо. Ну вот я тоже цикл в фукцию спрячу и > притворюсь что его там нет. А в остальном OMP озаботится тем чтоб всё > было как ты написал... Главное не это , а то, что в ФЯ (чистых) нет побочных эффектов, и результат вызывова твоей фунции предсказуем из кода. И изза этого компилятор ЗНАЕТ где можно параллелить и как. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 09:58:09 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Главное не это , а то, что в ФЯ (чистых) нет побочных эффектов, и результат вызывова твоей фунции предсказуем из кода. И изза этого компилятор ЗНАЕТ где можно параллелить и как. Лепота то какая, Лепота !!! (с) И много они автоматически распараллелили ??? Возможно OCaml автоматически распараллеливает вычисление чисел Фибоначчи ? нет ??? странно Ах да, накладные расходы съедят все бенефиты. QuickSort автоматически параллелить тоже как-то не очень получается :( Очевидно параллельные алгоритмы должны писаться специально, с учетом того, что они параллельные? А если так, то обеспечение функциональной чистоты того что параллелим всего лишь одна из маленьких задачек, решаемых разработчиком алгоритма. А если автоматического параллелизма нет и не будет, то какая разница на чем писать на Haskell-е или на Fortran-е ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 10:34:19 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_nВозможность или невозможность параллелить АЛГОРИТМ зависит от количества и качества мозга в голове, а не от языка или модели программирования. Вообще, параллелизм очень хорошо возникает сам там, где есть абстракции высокого уровня и декларативные операции. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 11:47:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldФишка номер 2, нет циклов, вообще нет циклов. Все надо определять через рекурсивные функции. Дейкстра показал, что применение рекурсии всегда просто не удобно. Поэтому и ввел операторы if-fi и do-od. Собсно вопрос схоластический - то ли ФЯ расширять до императивных, то ли наоборот (имхо так лучше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 11:55:09 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Оооо да !!! это оооочень полезно. Распараллеливать вычисление чисел Фиббоначи. Еще набивший всем оскомину пример с QuickSort-ом на Haskell-е мне нравится, всем QuickSort-ам QuickSort. А то что сортирует список, а не массив, так это не беда. Ну перестроит он его раз с десяток, так кому от этого плохо ??? Добавлю по поводу перформанса. Душкин в своей книге приводит пример метода вычисления списка простых чисел до заданного N. Но здесь-же признаётся, что Haskell-решение реализованное в лоб в характерной функционально манере работает чрезвычайно медленно и явно проигрывает С++-шному. Решение-же оптимальное по скорости на Haskell теряет некую красоту и выразительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:25:39 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) wrote: > выше давался пример с omp Всё понятно, как раз и прикол в том, что OMP для ФЯ не нужно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:36:07 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv....Компилятор. Или интерпретатор. Я не о том. Приведу отвлечённый пример для императивного языка. Мне даны две матрицы A, B, 1000х1000 элементов. Надо их перемножить по правилам математики. Тривиальное решение - итеративный процесс, который обходит все элементы двух матриц и записывает результат в третью матрице. Он работает но не очень быстро. Далее - маргинальное решение, я стартую 1000 процессов(потоков) которые для каждой строки A(i) и столбца B(i) выполняют соотв. скалярное произведение векторов и сохраняют результата в матрицу С(i,j) и т.д по внешнему циклу j. Данное решение распараллелено по критерию который я придумал. Однако оно, очевидно не самое оптимальное. Я теряю время на квантах переключения между процессами (потоками), и теряю время на старт-стопе процессов(потоков), которое несколько выше чем callback функции. Очевидно, что надо увеличивать количество вычислительных потоков, но не сильно. Неплохой вариант - разбить матрицу на две 1000х500 и перемножить в два threads (исходя из предположения что бортовое железо Athlon X2 содержит два ядра и грузятся на 70-80% на момент вычислений). Или, если копнуть еще глубже, и узнать о перезагрузках кешей L1, L2 гарантировать что-бы в кешах лежали только перемножаемые данные, и сделать четыре thread для суб-матриц 1000x250. (Всё вышесказанное - чистая теория. На практике я это не проверял, и возможно где-то ошибаюсь но в общем моя мысль идёт в этом направлении). Так вот. К чему я это. В императивном языке я вручную управлял параллелизмом выбирая ту степень, которая наиболее оптимальня для отклика. Функциональный язык, очевидно будет руководствоваться какими-то другими критериями которых я не знаю. И если он выбырет ТРИВИАЛЬНЫЙ или МАРГИНАЛЬНЫЫЙ критерий количества потоков/процессов на функцию то мы вместо роста performance получим просадку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:54:46 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 12:55:34 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Gluk (Kazan) wrote: > выше давался пример с omp Всё понятно, как раз и прикол в том, что OMP для ФЯ не нужно. Гмм, повторю вопрос снова. Какая из реализаций ФЯ обеспечивает автоматическое распараллеливание ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:27:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, что автоматическое распараллеливание не является killer feature на сегодняшний день. Важно скорее то, что подход ФП в будущем принципиально дает возможность развиваться в этом направлении. Для себя я понимаю, что основными достоинствами на сегодня является быстрая разработка некоторого рода ПО, которое связано с разбором сложных структур данных (парсеры/реализации протоколов/порождающее метапрграммирование). И второе достоинство - разработка более безопасных, безглючных программ за счет статической типизации. Правда последнее достоинство важно в слабораспространенных в наших краях ИТ-направлениях как торговые роботы для бирж, медэлектроника, космос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:50:20 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton wrote: > Так вот. К чему я это. В императивном языке я вручную управлял > параллелизмом выбирая ту степень, которая наиболее оптимальня для > отклика. Функциональный язык, очевидно будет руководствоваться какими-то > другими критериями которых я не знаю. И если он выбырет ТРИВИАЛЬНЫЙ или > МАРГИНАЛЬНЫЫЙ критерий количества потоков/процессов на функцию то мы > вместо роста performance получим просадку. Ещё раз, в ФЯ (определённых, не во всех) этот процесс МОЖЕТ хотя бы иногда происходить без вмешательства человека. В обычных языках человек должен всё сделать руками. Не, конечно есть языки программирования с высокоуровневыми операциями типа перемножения матриц, там ТОЖЕ это возможно. Ключевым тут является то, что есть специфицированная чётко операция, которую можно выполнять как угодно. Либо это встроенная в язык операция, либо , в ЧФЯ -- это вообще любой алгоритм, написанный на этом языке. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:56:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) wrote: > Гмм, повторю вопрос снова. Какая из реализаций ФЯ обеспечивает > автоматическое распараллеливание ??? Не знаю, для меня главное, что это теоретически возможно. Я предупреждаю, я сам не большой фанат читого ФП. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 13:58:03 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Теперь попробую описать какого рода объяснения мне не хватает. Давайте сделаем экскурс в недавнее прошлое, лет на 10-15 назад. В ту славную эпоху мэйнстримом в строении учетных систем были клиент-сервреные комбайны типа dbase/clipper/foxpro/paradox. Уже тогда мало кто напрямую писал код на си по открытию таблиц в своем формате, индексации итп. Программирование выглядело на встроенном интерпретирующем языке типа так: USE таблица 1 с индексом 1 use таблица 2 синдексом 2 Установить фильтр на таблицу 1 по условию ...... открыли курсоры, побежали по ним, поделали операции. закрыли индексы закрыли таблицы Такой подход ручного управления позволял программисту самому в каждом конкретном случае выбирать стратегию работы с объектами БД и достигать максимальной производительности. Потом во второй половине и конце 90-х на арену начали выходить SQL-сервера. Декларативный SQL, оптимизаторы по нынешним дням не ахти вообще, дорогущие и малодоступные. Из преимуществ явно видно только отказоустойчивость и возможность настроить безопасность на доступ. Если поставить себя на место спорящих в то время, что лучше SQL или Fox pro, то фокспрошник мог легко запинать скл-щика, т.к. его прямое управление кодом соединений было более эффективно. Аргументы что разработка на скл проще и быстрее (после значительной перестройки и расширения сознания под концепцию обработки множеств а не записей), да и оптимизаторы станут лучше в будущем и возможно, что даже появится когда-нибудь автоматический параллелизм на те времена выглядели бы слабенько. История показала, что SQL выигрыли и на сегодня стали действительно хороши и гибки. И планы исполнения запросов может и не самый лучшие, но достаточно хорошие для решения текущих задач. Мне видится аналогия SQL-я тогдашнего и ФП сегодняшнего. Правда есть исключение, концепция ФП вторая по древности после фортрана, т.е. не является новой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:06:12 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Gluk (Kazan) wrote: > Гмм, повторю вопрос снова. Какая из реализаций ФЯ обеспечивает > автоматическое распараллеливание ??? Не знаю, для меня главное, что это теоретически возможно. Я предупреждаю, я сам не большой фанат читого ФП. Неа, невозможно. Поскольку для автоматического распараллеливания недостаточно функциональной чистоты. Соответсвенно, для императивного прораммирования имеются ровно такие же возможности параллельного программирования как и для функционального. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:09:22 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Неа, невозможно. Поскольку для автоматического распараллеливания недостаточно функциональной чистоты. Соответсвенно, для императивного прораммирования имеются ровно такие же возможности параллельного программирования как и для функционального. Я тоже об этом думал. У ФП больше ВОЗМОЖНОСТЕЙ параллелить исполнение. Но не все возможности, очевидно принесут практическую пользу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:20:09 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Неа, невозможно. Поскольку для автоматического распараллеливания недостаточно функциональной чистоты. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:30:59 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_мод Код: plaintext 1. Хорошо подумал? А если x будет вызываться многократно (мильйон раз)? И параметром цикла или итерации будут y,z ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:51:57 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модGluk (Kazan)Неа, невозможно. Поскольку для автоматического распараллеливания недостаточно функциональной чистоты. Код: plaintext 1. Недостаточно. Если f1 это инкремент, такая многопоточность влетит тебе в большую копеечку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 14:58:26 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old wrote: > Мне видится аналогия SQL-я тогдашнего и ФП сегодняшнего. Правда есть > исключение, концепция ФП вторая по древности после фортрана, т.е. не > является новой. Концепция-то старая. Да дело в том, что все эти годы производительности и ресурнов ЭВМ катастрофически было мало для функциональных языков (дело не в самой функциональности, а в том, что они как правило очень высокоуровневые, и, стало быть, жрут ресурсов больше). А вот теперь производительности среднего компа хватает с головой для очень высокоуровневых средств, вот ФП и получило новый виток интереса к себе. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:07:52 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) wrote: > Недостаточно. Если f1 это инкремент, такая многопоточность влетит тебе в > большую копеечку а может и сократится оптимизацией хвостовой рекурсии в константу. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:09:26 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Недостаточно. Если f1 это инкремент, такая многопоточность влетит тебе в большую копеечку А какая разница, что делают эти функции ? Это ведь просто набор машинных команд, который можно рассовать по разным процессорам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:30:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton А если x будет вызываться многократно (мильйон раз)? И параметром цикла или итерации будут y,z ? То и выигрыш будет в мильйон раз :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:32:42 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv Gluk (Kazan) wrote: > Недостаточно. Если f1 это инкремент, такая многопоточность влетит тебе в > большую копеечку а может и сократится оптимизацией хвостовой рекурсии в константу. Давай отделять мух от котлет ? Как вот это можно свернуть в константу: Код: plaintext 1. 2. 3. Второй вопрос, как это можно эффективно распараллелить на 2 потока, не имея представления что есть f1 и что есть f2 ??? Ваш выстрел несколько мимо темы, Вы не находите ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:41:11 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модGluk (Kazan)Недостаточно. Если f1 это инкремент, такая многопоточность влетит тебе в большую копеечку А какая разница, что делают эти функции ? Это ведь просто набор машинных команд, который можно рассовать по разным процессорам. Если f1 и f2 пара машинных команд, то основное время в твоей многопоточной программе будет уходить на обеспечение многопоточности и синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:43:05 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модТо и выигрыш будет в мильйон раз :) Промах. Смоделируй то что сказал в любом императивном языке и увидишь что это не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:43:48 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Второй вопрос, как это можно эффективно распараллелить на 2 потока, не имея представления что есть f1 и что есть f2 ??? Итак: можно распараллелить. Эффективно по сравнению с последовательным выполнением ? Ну, хуже-то не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:45:35 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton[quot _мод]Смоделируй то что сказал в любом императивном языке и увидишь что это не так. Не получится ввиду отсутствия таких языков :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:47:07 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Если f1 и f2 пара машинных команд, то основное время в твоей многопоточной программе будет уходить на обеспечение многопоточности и синхронизации. Это да. Но накладные расходы не в счет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 15:48:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Функциональное программирование - максимально декларативное из всех парадигм по определению, чтобы тут не говорили... Подчеркну максимально, а не чисто, потому как в любой парадигме должны быть императивные элементы изменяющие текущее состояние системы, вопрос лишь в том насколько они высокоуровневые. Так грубо говоря в SQL механизм SELECT'ов - чисто функциональный язык, а INSERT, UPDATE, DELETE - его императивная составляющая. Соответственно SQL представляет из себя максимально функциональное (декларативное) программирование из всех существующих на данный момент. За ним условно следует Haskell, затем Lisp, затем все остальные. Это из общеизвестных ессно. Поэтому говорить о будущем функционального программирования некорректно. Оно уже наступило, про популярность SQL можно судить по названию этого форума. Правильнее говорить о его развитии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 16:15:51 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модGluk (Kazan)Если f1 и f2 пара машинных команд, то основное время в твоей многопоточной программе будет уходить на обеспечение многопоточности и синхронизации. Это да. Но накладные расходы не в счет ага, точно в ЮТ-е была такая задача бла бла бла тело падает вводу бла бла бла "сопротивлением воды и воздуха пренебречь" когда они будут на пару порядков больше полезной нагрузки, они будут очень даже в счет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 16:43:29 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Такой вопрос про распаралеливание, так по принципу в новый поток будет пускать каждая фу-ия независимо от того, что она из себя представляет? Или всёже есть какието выборочные критерии?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 16:57:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
NxzТакой вопрос про распаралеливание, так по принципу в новый поток будет пускать каждая фу-ия независимо от того, что она из себя представляет? Или всёже есть какието выборочные критерии?! Я как раз про это и спрашиваю сообщество. Где эти самые критерии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 17:05:39 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonNxzТакой вопрос про распаралеливание, так по принципу в новый поток будет пускать каждая фу-ия независимо от того, что она из себя представляет? Или всёже есть какието выборочные критерии?! Я как раз про это и спрашиваю сообщество. Где эти самые критерии? Критерии вставляют в оптимизатор транслятора. Какие они будут - вопрос исследований. Или вы думаете, что все проблемы уже решены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 17:39:09 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модmaytonNxzТакой вопрос про распаралеливание, так по принципу в новый поток будет пускать каждая фу-ия независимо от того, что она из себя представляет? Или всёже есть какието выборочные критерии?! Я как раз про это и спрашиваю сообщество. Где эти самые критерии? Критерии вставляют в оптимизатор транслятора. Какие они будут - вопрос исследований. Или вы думаете, что все проблемы уже решены. Какие могут быть критерии, если вызываемая функция не известна на момент компиляции ??? гадание на облаках ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 17:43:44 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модКритерии вставляют в оптимизатор транслятора. Какие они будут - вопрос исследований. Или вы думаете, что все проблемы уже решены. А, вы тоже - капитан? Тогда нет вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 17:45:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_oldТеперь попробую описать какого рода объяснения мне не хватает. ... Мне видится аналогия SQL-я тогдашнего и ФП сегодняшнего. Правда есть исключение, концепция ФП вторая по древности после фортрана, т.е. не является новой. Какие объяснения нужны из аналогий непонятно. ФП вобще понятие общее. haskell и ocaml построены на типизированом лямбда исчислении. Теория категорий играет для него примерно ту же роль что и теория множеств для реалиционной алгебры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 18:12:21 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old Давайте сделаем экскурс в недавнее прошлое, лет на 10-15 назад. В ту славную эпоху мэйнстримом в строении учетных систем были клиент-сервреные комбайны типа dbase/clipper/foxpro/paradox. Уже тогда мало кто напрямую писал код на си по открытию таблиц в своем формате, индексации итп. Программирование выглядело на встроенном интерпретирующем языке типа так: USE таблица 1 с индексом 1 use таблица 2 синдексом 2 Установить фильтр на таблицу 1 по условию ...... открыли курсоры, побежали по ним, поделали операции. закрыли индексы закрыли таблицы Такой подход ручного управления позволял программисту самому в каждом конкретном случае выбирать стратегию работы с объектами БД и достигать максимальной производительности. Потом во второй половине и конце 90-х на арену начали выходить SQL-сервера. Декларативный SQL, оптимизаторы по нынешним дням не ахти вообще, дорогущие и малодоступные. Из преимуществ явно видно только отказоустойчивость и возможность настроить безопасность на доступ. Если поставить себя на место спорящих в то время, что лучше SQL или Fox pro, то фокспрошник мог легко запинать скл-щика, т.к. его прямое управление кодом соединений было более эффективно. Аргументы что разработка на скл проще и быстрее (после значительной перестройки и расширения сознания под концепцию обработки множеств а не записей), да и оптимизаторы станут лучше в будущем и возможно, что даже появится когда-нибудь автоматический параллелизм на те времена выглядели бы слабенько. .. Мне видится аналогия SQL-я тогдашнего и ФП сегодняшнего. Правда есть исключение, концепция ФП вторая по древности после фортрана, т.е. не является новой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 18:14:52 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old Давайте сделаем экскурс в недавнее прошлое, лет на 10-15 назад. В ту славную эпоху мэйнстримом в строении учетных систем были клиент-сервреные комбайны типа dbase/clipper/foxpro/paradox. Уже тогда мало кто напрямую писал код на си по открытию таблиц в своем формате, индексации итп. Программирование выглядело на встроенном интерпретирующем языке типа так: USE таблица 1 с индексом 1 use таблица 2 синдексом 2 Установить фильтр на таблицу 1 по условию ...... открыли курсоры, побежали по ним, поделали операции. закрыли индексы закрыли таблицы Такой подход ручного управления позволял программисту самому в каждом конкретном случае выбирать стратегию работы с объектами БД и достигать максимальной производительности. Потом во второй половине и конце 90-х на арену начали выходить SQL-сервера. Декларативный SQL, оптимизаторы по нынешним дням не ахти вообще, дорогущие и малодоступные. Из преимуществ явно видно только отказоустойчивость и возможность настроить безопасность на доступ. Если поставить себя на место спорящих в то время, что лучше SQL или Fox pro, то фокспрошник мог легко запинать скл-щика, т.к. его прямое управление кодом соединений было более эффективно. Аргументы что разработка на скл проще и быстрее (после значительной перестройки и расширения сознания под концепцию обработки множеств а не записей), да и оптимизаторы станут лучше в будущем и возможно, что даже появится когда-нибудь автоматический параллелизм на те времена выглядели бы слабенько. .. Мне видится аналогия SQL-я тогдашнего и ФП сегодняшнего. Правда есть исключение, концепция ФП вторая по древности после фортрана, т.е. не является новой. Про аналогии. SQL ведь не просто язык запросов. Он опирается на модель данных конкретной БД, производной от реалиционной метамодели. Все операции замкнуты на эту БД, то есть мы можем получить часть БД или преобразовать эту самую БД и ничего больше. Таким образом sql является языком предметной области этой БД, а сама БД моноидом (если я прально помню теорию). Такую вот штуку можно обозвать декларативной если хочется, но декларативность здесь относительна. Если продолжить такие рассуждения, то FOXPRO-шный файл записей это тоже модель данных построеная вокруг физической последовательности байт в файле записей. Но разные файлы разные модели хоть и объединеные общей метамоделью, поэтому для что бы их совместить требуется язык-посредник , хотя уровень этого языка выше С поскольку метаиодель у них с файлами записей общая. И абсолютно пофигу, какой это язык императивный или функциональный. Если связать эти модели (которые файлы записей) отношениями и определить на них операции замкнутые на ту совокупность, то у нас получится новая общая модель (не обязательная реалиционная) и язык запросов (не обязательно sql). Я все это к чему. Если sql это модель из отношений для одиночных dbf-оф, то что ,в твоем понимании, обобщает ФП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 19:01:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Оооо да !!! это оооочень полезно. Распараллеливать вычисление чисел Фиббоначи. Стоит ли мне мне сейчас взять алгоритм параллельного быстрого преобразования Фурье разметить его тегами src и запостить в форум? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:18:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Давай. Только со спойлером, ежели сильно большой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:19:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Какие могут быть критерии, если вызываемая функция не известна на момент компиляции ??? гадание на облаках ? Например, можно профилировать приложение при тестовом прогоне, а потом используя статистику распараллеливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:20:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
beluginНапример, можно профилировать приложение при тестовом прогоне, а потом используя статистику распараллеливать. Не вариант! Вспоминаем что одной из задач, решаемых ФП является автоматическое построение значительной части программы по описанию структур данных. Это означает что тестового прогона может не быть вообще, если еще нет данных на входе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:26:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton Не вариант! Вспоминаем что одной из задач, решаемых ФП является автоматическое построение значительной части программы по описанию структур данных. Поясни, проиллюстрируй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:34:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, а скачать никак (придупреждяаю - literal haskell)? Вообще-то я имед ввдк что концепции иллюстрируют на небольших, необязательно реальных примерах. Типа иерархии кошка-собака-животное для ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:42:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton Не вариант! Вспоминаем что одной из задач, решаемых ФП является автоматическое построение значительной части программы по описанию структур данных. Это означает что тестового прогона может не быть вообще, если еще нет данных на входе. А вот с этого места поподробнее. Такое определение больше похоже на метапрограмирование или суперкомпиляцию, чем на ФП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:42:57 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
beluginПоясни, проиллюстрируй. Судя по постам - ты не новичёк в ФП. Возможно я даже меньше твоего писал. Поэтому пояснять не буду. Просто переадресую тебя к книге Р.Душкина - Функциональное программирование на языке Haskell ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:51:44 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
antares0А вот с этого места поподробнее. Такое определение больше похоже на метапрограмирование или суперкомпиляцию, чем на ФП. Согласен. Похоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 22:57:50 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonbeluginПоясни, проиллюстрируй. Судя по постам - ты не новичёк в ФП. Возможно я даже меньше твоего писал. Поэтому пояснять не буду. Просто переадресую тебя к книге Р.Душкина - Функциональное программирование на языке Haskell Я опять не понимаю (книга на полке стоит) - можешь дать точную ссылку с цитатой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 23:16:43 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Например, можно профилировать приложение при тестовом прогоне, а потом используя статистику распараллеливать. Отлично. Сделали. Вариант #1: В результате анализа статистики выяснилось что 99% времени исполнения программа затратила в одной единственной функции которая принимает одну квадратную матрицу A размером N x N, выполняет её факторизацию - т.е. находит такую нижнетреугольную матрицу L размером N x N и верхнетреугольную матрицу U размером N x N что A = L*U и возвращает в вызывающую программу L и U. Пусть при дальнейшем скурпулёзном анализе оказалось что проблемная функция написана так что отвечает всем критериям чистоты ф.я. Апологеты ф.я., расскажите как в соответствии с заветами г-на _мод_ можно распараллелить эту фукцию в режиме "моск офф". Вариант #2. Проанализировали статистику, оказалось всё не так глухо как в предыдущем случае. Даже наоборот, проблемный кусок параллелизуется на ура, причём теоретически долженa иметь место быть линейная масштабируемость. Распараллелили, запустили, пересобрали статистику - стало либо хуже чем было, либо лучше, но никакой линейной масштабируемостью и близко не пахнет. Причин почему так может быть - мульён, гора книг об этом написана и т.д. В императивном языке существует довольно много способов повлиять на результат путём изменения положения данных внутри массивов (например чтобы избежать false sharing эффекта), привязкой конкретных тредов к конкретным процам так чтобы императивная прога занималась действительно полезными вычислениями а не гоняла туда - сюда данные по кэшам разных процессоров пытаясь догнать тред внезапно переехавший с одного проца на другой и т.д. и т.п. Да, всё это не бесплатно, всё надо тем или иным способом кодить. Тем не менее, оно есть. А какой инструментарий для разрешения этих проблем предоставляет ф.я? Особенно в случае использования абстракций высокого уровня... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 23:57:11 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
belugin Я опять не понимаю (книга на полке стоит) - можешь дать точную ссылку с цитатой? Пруфлинк с цитатой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 23:59:24 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
beluginmayton, а скачать никак (придупреждяаю - literal haskell)? Вообще-то я имед ввдк что концепции иллюстрируют на небольших, необязательно реальных примерах. Типа иерархии кошка-собака-животное для ООП. Пролистал. Слишком много букв. Может скажешь куда именно смотреть что-бы была понятная твоя мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 00:09:19 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonbeluginmayton, а скачать никак (придупреждяаю - literal haskell)? Вообще-то я имед ввдк что концепции иллюстрируют на небольших, необязательно реальных примерах. Типа иерархии кошка-собака-животное для ООП. Пролистал. Слишком много букв. Может скажешь куда именно смотреть что-бы была понятная твоя мысль? Это ты у Gluk (Kazan) спроси - ему фибоначчи было мало ;). Еще раз есть страничка с говорящим названием nofib с разными параллельными алгоритмами на parallel haskell. Если хочется просто иллюстрации как это выглядит, можно посмотреть простые алгоритмы в начале. Но Gluk (Kazan) такой простой иллюстрации было не достаточно, поэтому я предложил ему посмотреть быстрое преобразование Фурье. Вот такая моя мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 08:08:03 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
beluginGluk (Kazan) Оооо да !!! это оооочень полезно. Распараллеливать вычисление чисел Фиббоначи. Стоит ли мне мне сейчас взять алгоритм параллельного быстрого преобразования Фурье разметить его тегами src и запостить в форум? Наверное стоит, но не на форум, а в дельную статью относительно бенефитов ФП в отношении параллелизма. С удовольствием почитаю. И журнальчик есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 08:44:31 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
belugin Это ты у Gluk (Kazan) спроси - ему фибоначчи было мало ;). То есть статьи не будет жалка FFT не смотрел, про parfib скажу следующее: 1. Это не автоматическое распараллеливание, а ровно такое, какое было с OMP (`par` программист определяет где вставить, и это правильно) 2. parfib и quicksort забавны в качестве иллюстративного учебного материала. На практике - бред, по причинам указанным выше 3. quicksort c его карманным биллиардом над списками порадовал особо. Тяжело ему будет угнаться за Си-шной реализацией над мутабельным массивом ;( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 09:10:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
И уж коли здесь принято подтверждать свое мнение ссылками на авторитеты, позволю себе сослаться на п. 1.5 описывающий сложности рекурсивного параллелизма, на мой взгляд, исключающие его автоматическую реализацию. Кстати, все примеры в книге насквозь имеперативные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 09:22:54 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Может я чего-то не понимаю, но о чем спор? Вот, например, рядовая задача - обработка коллекций: Код: plaintext 1. Если process_item() - "чистая" функция, то "умный" компилятор запросто может применить реализацию foreach, запускающую process_item в несколько потоков. // рассуждаю теоретически, на практике не сталкивался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 09:29:32 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_n Да, всё это не бесплатно, всё надо тем или иным способом кодить. Тем не менее, оно есть. Вспомните историю: первые компиляторы порождали плохой код, а сейчас далеко не всякий программер напишет код на асме лучше, чем оптимизирующий компилятор. Так что всему свое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 10:00:21 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модmikhail_n Да, всё это не бесплатно, всё надо тем или иным способом кодить. Тем не менее, оно есть. Вспомните историю: первые компиляторы порождали плохой код, а сейчас далеко не всякий программер напишет код на асме лучше, чем оптимизирующий компилятор. Так что всему свое время. Дык проблемой над автоматического распараллеливания далеко не первый год бьются (и не только функциональщики), а Грааль и ныне там ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 10:03:47 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
ДиезМожет я чего-то не понимаю, но о чем спор? Вот, например, рядовая задача - обработка коллекций: Код: plaintext 1. Если process_item() - "чистая" функция, то "умный" компилятор запросто может применить реализацию foreach, запускающую process_item в несколько потоков. // рассуждаю теоретически, на практике не сталкивался. теоретически оно конечно так, а на практике предпочитает не заменять и правильно делает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 10:06:10 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) То есть статьи не будет жалка Ну это лучше обратиться к спецам - я просто интересующийся. FFT не смотрел, про parfib скажу следующее: 1. Это не автоматическое распараллеливание, а ровно такое, какое было с OMP (`par` программист определяет где вставить, и это правильно) Насколько я понимаю, именно это я и написал первой фразой исходного письма. Только что эквивалетность с OMP не знаю. 2. parfib и quicksort забавны в качестве иллюстративного учебного материала. На практике - бред, по причинам указанным выше Прочитали ли вы текст на страничке? The imaginary part consists of toy programs such as factorial and quicksort. Such programs are useless for drawing general conclusions, but can sometimes show up nasty performance bugs in sharp relief. 3. quicksort c его карманным биллиардом над списками порадовал особо. Тяжело ему будет угнаться за Си-шной реализацией над мутабельным массивом ;( The real part consists of real application programs, written by people who simply wanted to get the job done. They are larger and more I/O intensive than the imaginary and spectral suite. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 22:17:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Кстати, я правильно понимаю, что здесь 3 потока ? вот тут написано Its dynamic behaviour is to indicate that p could be evaluated by a new parallel thread, with the parent thread continuing evaluation of e. We say that p has been sparked, and a thread may subsequently be created to evaluate it if a processor becomes idle . Since the thread is not necessarily created, p is similar to a lazy future Как пример параллельного программирования конечно катит :) чисто поржать ну или для иллюстрации концепции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 22:41:06 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_nНапример, можно профилировать приложение при тестовом прогоне, а потом используя статистику распараллеливать. Отлично. Сделали. Вариант #1: 1. Можно ли как-то формализовать правила распараллеливания, чтобы таких случаев было меньше или эта задача принципиально не формализуема? 2. Как вы считаете, в функционально написанной программе больше кусков которые очевидно, как распараллелить или меньше, чем в императивной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 23:11:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Несколько мыслей в тему, да не совсем 1. Подозреваю, что лет через 10 (а то и 5) у меня в ноутбуке процессорных ядер будет 1000. 2. К абсолютно "параллельному" программированию пошла бы идеология хранения данных, например по типу MUMPS. Таблицы и парадигма НФ - в утиль. Заодно и разделение на оперативную/постоянную память. 3. Неплохо если б сегодняшние виртуальные "фермы" с их сумасшедшими накладными мильена параллельных виртуализированных ОС заменились бы одной метамашиной с мильеном программ на "параллельном" языке без побочных эффектов. 4. Правда, при попытке написать что либо на чем то типа пролога, мозги у меня с непривычки к такому виду всегда сворачивались в рекурсию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 23:29:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemargl2. К абсолютно "параллельному" программированию пошла бы идеология хранения данных, например по типу MUMPS. Таблицы и парадигма НФ - в утиль. Заодно и разделение на оперативную/постоянную память. И при этом таблицы БД превращаются в обычные переменные (массивы или списки), которые могут быть результатом вычисления функций. Вот тогда ФП и будет рулить по полной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 09:29:20 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
belugin ну или для иллюстрации концепции. Ага, на тему как не надо параллелить :) Вы же привели этот пример (первоначально) без каких либо ссылок на тему "вот как в ФЯ все легко параллелится" Собсна к авторам кода претензий нет :) А Вам новичков почти удалось ввести в заблуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 09:32:33 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
belugin Its dynamic behaviour is to indicate that p could be evaluated by a new parallel thread, with the parent thread continuing evaluation of e. We say that p has been sparked, and a thread may subsequently be created to evaluate it if a processor becomes idle . Since the thread is not necessarily created, p is similar to a lazy future Ну значить не все так просто в параллелизме Собственно я догадывался, без ленивости тут не обошлось (впрочем это не отменяет моего рассказа про накладные расходы борделя). Ээээх если бы он еще потоки легкие рожал в стиле Эрланга (или таки рожает ???) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 09:38:48 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemargl 1. Подозреваю, что лет через 10 (а то и 5) у меня в ноутбуке процессорных ядер будет 1000. Это вряд-ли (без кардинального изменения архитектуры) подерутся 1000 ядер на одной памяти. С кардинальным изменением, отличий у твоего ноутбука будет куда больше чем просто 1000 ядер Siemargl 2. К абсолютно "параллельному" программированию пошла бы идеология хранения данных, например по типу MUMPS. Таблицы и парадигма НФ - в утиль. Заодно и разделение на оперативную/постоянную память. А это сфигали ? Чем MUMPS в этом плане лучше ??? Siemargl 3. Неплохо если б сегодняшние виртуальные "фермы" с их сумасшедшими накладными мильена параллельных виртуализированных ОС заменились бы одной метамашиной с мильеном программ на "параллельном" языке без побочных эффектов. маниловщина :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 09:43:06 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_nЗайди на сайт Сана, посмотри чего делает свич -xautopa r Сановского C/C++ компилятора и да снизойдёт на тебя просветление. И что, это таки серебрянная пуля, которая решит все проблемы параллелизма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 10:31:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie пишет: > Wikipedia > > Функциональное программирование — раздел дискретной математики и > парадигма программирования, в которой процесс вычисления трактуется как > Первые 2 абзаца в википедии про функциональное программирование... Таким > образом SQL более удовлетворяет определению функционального > программирования чем тот же Haskell или тем более Lisp... http://lurkmore.ru/Википедия Таким образом, уже с первых строк мы понимаем, что если на заборе написано "#YN", то за забором, скоее всего, стройка. По смысловому значению содержимого мне лично сказать нечего. Если хочешь считать SQL функциональным языком программирования -- считай. Я же хочу напомнить, что ОБЯЗАТЕЛЬНЫМ атрибутом всех функциональных языков является наличие первокласных функций и функций высшего порядка. В SQL ВООБЩЕ функций нет. На этом я свою мысл закончил. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 10:38:43 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Siemargl 2. К абсолютно "параллельному" программированию пошла бы идеология хранения данных, например по типу MUMPS. Таблицы и парадигма НФ - в утиль. Заодно и разделение на оперативную/постоянную память. А это сфигали ? Чем MUMPS в этом плане лучше ??? Насколько я разбираюсь в сабже, MUMPS размывает границы в цепочке база - схема - сущность - атрибут, а также вносит возможность низкоуровневого управления транзакциями. Но какая связь ЗДЕСЬ между ПАРАЛЛЕЛЬНЫМ программированием и М я пока не понимаю. Но если автор объяснит - буду рад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 10:39:01 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_n пишет: > Слушай Зифф, ну ладно тут дети всякую хрень пишут, но ты же солидный > человек, модератор форума C/C++, это ж твой кусок хлеба! Ага, уже. Даже кружкой пива не проставились. Зачем же ты > всем компиляторам C/C++ так походя отказываешь в способности > автоматически параллелить код? А вот выйдет новый стандарт С++ -- и увидешь, зачем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 10:42:09 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Ты суслика видишь? Нет. И я нет. А он есть. SQL вообще очень несовершенен, все-таки в 70-х годах создавался... Функции в нем - представлены в виде неключевых колонок таблиц - соответственно значения их это значения функций, а значения ключевых колонок это параметры функции. Если у тебя не получается абстрагироваться и увидеть это, то это твои проблемы (хотя и проблемы SQL'я тоже)... no offence... :) PS: Естественно говорим о 2-й или какой там НФ (с ключами в таблицах), потому как в ранних формах SQL по сути не используется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:06:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Что касается каррирования, то результат любого SELECT - таблица, а значит функция. То есть функция в SQL возвращает только функцию (то есть даже значение не может), так что можно говорить что более функционального языка чем SQL'а вообще нету :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:12:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonGluk (Kazan) Siemargl 2. К абсолютно "параллельному" программированию пошла бы идеология хранения данных, например по типу MUMPS. Таблицы и парадигма НФ - в утиль. Заодно и разделение на оперативную/постоянную память. А это сфигали ? Чем MUMPS в этом плане лучше ??? Насколько я разбираюсь в сабже, MUMPS размывает границы в цепочке база - схема - сущность - атрибут, а также вносит возможность низкоуровневого управления транзакциями. Но какая связь ЗДЕСЬ между ПАРАЛЛЕЛЬНЫМ программированием и М я пока не понимаю. Но если автор объяснит - буду рад. Дело не в М, а в хранении данных там. Все переменные (глобали), они же все данные приложения хранятся в боольшой куче, без разделения - диск-память (только кэшируются при обращении). Ну еще это произвольно-многомерный разреженный массив. Причем есть разделение/блокировка доступа к ним из разных программ. Вот чего там нет, а надо бы (для ФП) - это работа с множествами. Чем MUMPS (в этом) лучше - уровень абстракции выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:31:04 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieMasterZiv, Ты суслика видишь? Нет. И я нет. А он есть. ... Функции в нем - представлены в виде неключевых колонок таблиц - соответственно значения их это значения функций, а значения ключевых колонок это параметры функции. ну, в общем, да - суслик есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:35:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
SiemarglmaytonGluk (Kazan) Siemargl 2. К абсолютно "параллельному" программированию пошла бы идеология хранения данных, например по типу MUMPS. Таблицы и парадигма НФ - в утиль. Заодно и разделение на оперативную/постоянную память. А это сфигали ? Чем MUMPS в этом плане лучше ??? Насколько я разбираюсь в сабже, MUMPS размывает границы в цепочке база - схема - сущность - атрибут, а также вносит возможность низкоуровневого управления транзакциями. Но какая связь ЗДЕСЬ между ПАРАЛЛЕЛЬНЫМ программированием и М я пока не понимаю. Но если автор объяснит - буду рад. Дело не в М, а в хранении данных там. Все переменные (глобали), они же все данные приложения хранятся в боольшой куче, без разделения - диск-память (только кэшируются при обращении). Ну еще это произвольно-многомерный разреженный массив. Причем есть разделение/блокировка доступа к ним из разных программ. Вот чего там нет, а надо бы (для ФП) - это работа с множествами. Чем MUMPS (в этом) лучше - уровень абстракции выше. А если копнуть эту абстракцию поглубже, выясняется, что "глобаль" физически хранится в B-дереве, которое представляет собой обычный файл, хранящийся на диске с кэшированием в памяти. Т.е. точь в точь как во всех РСУБД. Мусье теоретик ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:38:32 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЧто касается каррирования, то результат любого SELECT - таблица, а значит функция. То есть функция в SQL возвращает только функцию (то есть даже значение не может), так что можно говорить что более функционального языка чем SQL'а вообще нету :) Частный случай ИМХО. Возьми современный бизнес-код с INSERT-s, UPDATE-s и попробуй прикрутить это к функциональности. Вся гладкая теория сразу рухнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:40:31 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie пишет: > SQL вообще очень несовершенен, все-таки в 70-х годах создавался... > Функции в нем - представлены в виде неключевых колонок таблиц - > соответственно значения их это значения функций, а значения ключевых > колонок это параметры функции. Если у тебя не получается Это не в нём функции. Это в БД хранятся функции. А точнее отношения (они же реляции). А в ЯЗЫКЕ SQL функций нет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:42:30 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie пишет: > Что касается каррирования, то результат любого SELECT - таблица, а > значит функция. То есть функция в SQL возвращает только функцию (то есть > даже значение не может), так что можно говорить что более > функционального языка чем SQL'а вообще нету :) Даже если рассуждать, как ты, функцией должен быть SELECT. Таблицы на входе и таблица на выходе -- результаты фунций. Я понимаю твою аналогию, понимаю, о чём ты, но аналогия эта неверна и неуместна. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:45:12 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) А если копнуть эту абстракцию поглубже, выясняется, что "глобаль" физически хранится в B-дереве, которое представляет собой обычный файл, хранящийся на диске с кэшированием в памяти. Т.е. точь в точь как во всех РСУБД. Мусье теоретик ? Я к тому и веду, что как физически что хранится и как работают компиляторы/интерпретаторы должно стать несущественным с развитием технологии. Неважно где данные, в памяти они, на локальном диске, на удаленном хранилище или в облаке - должно волновать только внутренний оптимизатор системы. Первая половина топика была посвящена только задаче распараллеливания кода, а я добавил про данные. Ну и весь топик теоретический, ибо практические применения не обсуждаются/нет =) Кстати, про нереальность 1000 процессоров несогласен. Уже есть Cell, уже есть DSP с сотнями ядер, граф.платы на подходе.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 11:56:58 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemargl Кстати, про нереальность 1000 процессоров несогласен. Уже есть Cell, уже есть DSP с сотнями ядер, граф.платы на подходе.... Специализированные процессоры для специальных задач, а не твои 1000 универсальных ядер на ноуте с разделяемой памятью. По поводу теории и практики, говорю еще раз MUMPS хранит данные также как и все остальные и не понятно почему остальные должны отмереть, а MUMPS продолжать здравствовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 12:03:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Не МУМПС, который и так почти дохлый, а идея доступа к данным из программы. Хорошо, начнем с другого конца=) Как, по вашему, должны хранить данные _большие_ программы на ФП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 12:52:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, По умолчанию в БД хранятся только таблицы, читай данный, а запросы создаются на клиенте... По сути клиент "пишет программу" и отправляет ее выполнять на сервер. В этом смысле сервер приложений больше подходит под твои определения чем SQL сервер. > Я понимаю твою аналогию, понимаю, о чём ты, но аналогия > эта неверна и неуместна. Честно говоря этого я и пытался добиться, то есть вопрос все-таки о терминах идет, а не общем принципе. На самом деле я бы наверное мог бы построить четкую математическую модель отображения SQL во 2НФ на функции (лямбда-исчисление), но это долгая и нудная задача... Кроме того можно сказать что это отображение умозрительно, слово "функция" в описании SQL нету - значит язык не функциональный, так что не буду тратить на это время... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 13:04:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Но кстати по вопросам параллелизма о котором тут параллельно спорят... Императивную программу реально очень тяжело распараллелить, в то время как распаралливание декларативной (функциональной) программы уже достаточно неплохо реализовано в существующих SQL-серверах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 13:07:53 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
SiemarglGluk (Kazan), Не МУМПС, который и так почти дохлый, а идея доступа к данным из программы. Хорошо, начнем с другого конца=) Как, по вашему, должны хранить данные _большие_ программы на ФП? В БД (они знаете ли очень для этого подходят) а по вашему ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 13:09:47 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieНо кстати по вопросам параллелизма о котором тут параллельно спорят... Императивную программу реально очень тяжело распараллелить, в то время как распаралливание декларативной (функциональной) программы уже достаточно неплохо реализовано в существующих SQL-серверах. Там не распараллеливание, а оптимизация в полный рост. И не за счет декларативности, а за счет узкой сцепифичности задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 13:11:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)SiemarglGluk (Kazan), Не МУМПС, который и так почти дохлый, а идея доступа к данным из программы. Хорошо, начнем с другого конца=) Как, по вашему, должны хранить данные _большие_ программы на ФП? В БД (они знаете ли очень для этого подходят) а по вашему ??? Я быстренько прочитал определения ФП итд и понял: 1. Все что было сказано выше мной, подходит только к параллельным вычислениям и к функциям без побочных эффектов - не более. 2. Как БД соотнесутся с ФП - вообще неизвестно, ибо в ФП отрицается сама идея состояний и постоянного хранения данных вычислений ((( 3. СУБД в их текущем состоянии с ФП ничего общего не имеют. Только несколько общематематических определений (декларативнсть итп) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 13:27:23 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemargl 2. Как БД соотнесутся с ФП - вообще неизвестно, ибо в ФП отрицается сама идея состояний и постоянного хранения данных вычислений ((( Зато БД прекрасно соотносятся с прикладными задачами, которые приходиться решать и ФП в том числе. Кстати, никто не отрицает необходимости долгосрочного хранения состояния. Что касается необходимости хранения оперативного состояния, на кой по вашему пришлось изобретать монады ??? Есть такая необходимость. И существование этой необходимости куда более определяющее, чем отношение к ней ФП. Практика - критерий истины ? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 13:37:46 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Распараллеливание один из видов оптимизации. Нифига себе узко-специфичная задача - все бизнес-решения и информационные системы :) Кроме того императивный алгоритм (то есть с if, while) по количеству абстракций проще чем SQL. А хорошо оптимизируется почему-то последний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 15:22:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Нифига себе узко-специфичная задача - все бизнес-решения и информационные системы :) Кроме того императивный алгоритм (то есть с if, while) по количеству абстракций проще чем SQL. А хорошо оптимизируется почему-то последний. Именно узко-специальная. И именно поэтому SQL не является универсальным языком программирования. И именно это позволяет оптимизировать запрос, т.е. перебирать возможные варианты его выполнения (базовых методов доступа не много, вариантов их последовательного выполнения существенно больше) и в рамках этого параллелить какие-то обращения к данным (что безусловно является очень частной задачей в рамках оптимизации). А бизнес-решения кстати пишутся не на SQL, а на универсальных ЯП (C# например или PL/SQL), SQL для этого совершенно очевидно недостаточен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 15:32:05 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), А можно узнать что вы имеете ввиду под универсальным языком программирования? Полнотой по Тьюрингу он обладает. Да, он меньше подходит под одни задачи (UI на нем тяжело запрограммировать), но хорошо подходит под другие... Строго говоря UI делать и на if'ах и while'ах без вспомогательных библиотек (неважно в какой парадигме) также невозможно. В любом случае вы почему-то считаете что SQL проще структурного кода, что явно не так. Грамматика первого состоит где-то из правил 5-10, а грамматика второго в несколько раз больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 16:20:19 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
В смысле наоборот второго и первого соответственно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 16:25:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Когда Вы говорите, у меня такое впечатление, что вы бредите (c) Nitro_Junkie А можно узнать что вы имеете ввиду под универсальным языком программирования? Полнотой по Тьюрингу он обладает. Доказательство полноты по Тьюрингу будет ? Про какой SQL говорим ? Фраза MODEL Oracle ??? Nitro_Junkie Да, он меньше подходит под одни задачи (UI на нем тяжело запрограммировать), но хорошо подходит под другие... Строго говоря UI делать и на if'ах и while'ах без вспомогательных библиотек (неважно в какой парадигме) также невозможно. тяжело ? т.е. возможно ??? Валяй, интересно будет посмотреть Наверное системное программирование на SQL это тоже тяжело ??? SQL это в чистом виде DSL, придуманный когда самого термина DSL еще небыло. Это проблемнно-ориентированный язык, а не язык программирования Nitro_Junkie В любом случае вы почему-то считаете что SQL проще структурного кода, что явно не так. Грамматика первого состоит где-то из правил 5-10, а грамматика второго в несколько раз больше. Не понел ? Из с чего вообще взялось сравнение проще-сложнее ??? Грамматику чего с чем меряем ??? Как будем поступать с семантикой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 17:09:50 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), SQL - 1999 (с появлением рекурсивных CTE), полон по тьюрингу, легко построить отображение на частично-рекурсивные функции... уже обсуждалось, не будем повторяться, гугл в помощь... Вот на SQL - 2008 (впрочем можно и на 1999) сделано отображение множество Mandelbrot'а Я вообще имел ввиду теоретически можно, и не спорю что структурное программирование больше подходит для системного программирования. Но у вас логика, раз на феррари не проедешь по лесу значит феррари не машина, в отличии от лэндкруйзера на котором проедешь. Грамматику SQL, с грамматикой структурного программирования по количеству правил. А уж семантика структурного программирования так точно проще семантики SQL... Но нет последний все равно лучше оптимизируется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 17:26:36 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), SQL - 1999 (с появлением рекурсивных CTE), полон по тьюрингу, легко построить отображение на частично-рекурсивные функции... уже обсуждалось, не будем повторяться, гугл в помощь... Если сто раз сказать мед, сладко не станет Доказательства полноты по Тьюрингу в студию (только доказательства, а не домыслы, как в прошлый раз). И не сферического CTE, а конкретной реализации CTE Nitro_Junkie Грамматику SQL, с грамматикой структурного программирования по количеству правил. А уж семантика структурного программирования так точно проще семантики SQL... Но нет последний все равно лучше оптимизируется... Давай с этого места поподробнее. Что такое грамматика и семантика "структурного программирования" ??? PL/I аль Си имеешь в виду ??? Али Пасквиль с Адой ? Впрочем, грамматики в студию, пустозвон вы наш, строки считать бум ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 17:31:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Если у вас плохо с образованием, вам не читали теорию грамматик, и вы даже не понимаете что именно я имею ввиду под структурным программированием и его грамматикой (и конкретный синтаксис тут роли не играет), то я вам ее рисовать здесь не буду, воспользуйтесь поиском... Теория алгоритмов, теория вычислимости, частично-рекурсивные функции и т.п. тоже видимо прошли мимо вас... Но проблема в том, что у вас плохо не только с образованием, но и с абстрактным мышлением, вы за деревьями не видите леса... А вот в этом вам уже никто не поможет, поэтому "спор" с вами будем считать законченым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 17:52:42 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ребята, давай сворачивать обсуждение SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 17:56:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Если у вас плохо с образованием, вам не читали теорию грамматик, и вы даже не понимаете что именно я имею ввиду под структурным программированием и его грамматикой (и конкретный синтаксис тут роли не играет), то я вам ее рисовать здесь не буду, воспользуйтесь поиском... Теория алгоритмов, теория вычислимости, частично-рекурсивные функции и т.п. тоже видимо прошли мимо вас... Но проблема в том, что у вас плохо не только с образованием, но и с абстрактным мышлением, вы за деревьями не видите леса... А вот в этом вам уже никто не поможет, поэтому "спор" с вами будем считать законченым. А не растекаясь мыслию по древу ? Я тебя попросил две сугубо конкретные вещи, в доказательство твоих же слов: 1. Реализацию машины Тьюринга на SQL (коея как правило и принимается за доказательство (не знал ? будешь знать )) 2. Ссылки на грамматики SQL и ... скажем C++ :) не буду тебя на PL/I посылать. С целью сравнения их объема. А в ответ бла бла бла, уши вянут. Найдешь приходи. Хоть в отдельную тему, хоть ко мне в почту. А здесь с SQL-ем больше не мелькай, надоело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 18:02:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Не смешите людей своей безграмотностью... 1. Для доказательства полноты по Тьюрингу, достаточно показать эквивалентность одному из множеств вычислимых функций. И для декларативных формализмов, это проще делать сравнивая с частично-рекурсивными функциями для которых уже доказана полнота по тьюрингу. И вообще полнота по Тьюрингу напрямую не связана с машиной Тьюринга, как и машиной Поста и т.п. 2. Открываем документацию по ораклу или MSSQL и смотрим.. Для вас конечно будет откровением что та странная форма из квадратных скобочек, вертикальных стрелочек и есть один из видов задания грамматики (с определенными оговорками), но к вашему невеждеству думаю уже все привыкли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 18:25:31 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Кстати с какого боку тут C++, максимум C и то без дополнительных наворотов типа макросов и т.п. If, while, массивы, операторы присваивания, сравнения, функции и может struct'ы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 18:42:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton mikhail_nЗайди на сайт Сана, посмотри чего делает свич -xautopar Сановского C/C++ компилятора и да снизойдёт на тебя просветление. И что, это таки серебрянная пуля, которая решит все проблемы параллелизма? Да какая там {censored} серебрянная пуля! Вот как раз из-за того что сам компилятор без постороннего вмешательства программиста практически ничего сложнее чем примитивные циклы попадающие под категорию embarrassingly parallel code автоматически распарралелить не может и возникла такая фигня как OpenMP (ну это такая моя версия). Но говорить что современные компиляторы C/C++ не могут автоматически находить и параллелить куски кода которые очевидно могут быть распараллелены - неверно. А поскольку я не верю в то что такое положение дел с автоматическим распараллеливанием есть результат того, что люди пишущие сишные компиляторы для Сана умишком слабоваты, то я весьма скептически отношусь к тому, что в ф.п. достижим какой то прорыв в этой области только за счёт "чистоты" функций и "применения абстракций очень высокого уровня", хотя и то и другое есть гуд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 19:41:45 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mikhail_nпостороннего вмешательства программиста практически ничего сложнее чем примитивные циклы попадающие под категорию embarrassingly parallel code автоматически распарралелить не может Вопрос: может ли такой компилятор распараллелить цикл, в котором происходит вызов функции? То есть какой цикл является примитивным, а какой - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 23:07:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemargl 2. Как БД соотнесутся с ФП - вообще неизвестно, ибо в ФП отрицается сама идея состояний и постоянного хранения данных вычислений ((( в ФП не отрицается наличие состояний. Просто состояние должно быть передано в функцию и новое состояние явно возвращено. Доходит до того, что передают состояние всего мира в качестве параметра функции (язык clean) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. в результате состояние только там, где оно нужно. 3. СУБД в их текущем состоянии с ФП ничего общего не имеют. Только несколько общематематических определений (декларативнсть итп) ну основной принцип лежащий в основах ФЯ - это то, что программа - это комбинация чистых функций. селекты и апдейты очень похожи на комбинацию функций относительно отношений и скаляров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 23:41:42 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)А Вам новичков почти удалось ввести в заблуждение. Извиняюсь, если кого-то ввел в заблуждение, я в параллельностях сам новичек :) Интересно было бы заслушать человека, который практически со всем этим поработал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 23:48:08 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Nitro_Junkie Да, он меньше подходит под одни задачи (UI на нем тяжело запрограммировать), но хорошо подходит под другие... Строго говоря UI делать и на if'ах и while'ах без вспомогательных библиотек (неважно в какой парадигме) также невозможно. тяжело ? т.е. возможно ??? Валяй, интересно будет посмотреть что, то типа Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2010, 23:58:03 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie 1. Для доказательства полноты по Тьюрингу, достаточно показать эквивалентность одному из множеств вычислимых функций. И для декларативных формализмов, это проще делать сравнивая с частично-рекурсивными функциями для которых уже доказана полнота по тьюрингу. 1. Валяй, так тоже можно. Жду доказательство 2. И не забудь про грамматики :) жду ссылок на то что будем сравнивать (чтобы потом не отперся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 07:30:30 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieКстати с какого боку тут C++, максимум C и то без дополнительных наворотов типа макросов и т.п. If, while, массивы, операторы присваивания, сравнения, функции и может struct'ы. Странно :) А почему не PL/I ??? SQL то Вы самый навороченный предлагаете взять, а язык уровня 70 года. Ай яй яй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 07:31:47 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
beluginGluk (Kazan)А Вам новичков почти удалось ввести в заблуждение. Извиняюсь, если кого-то ввел в заблуждение, я в параллельностях сам новичек :) Интересно было бы заслушать человека, который практически со всем этим поработал. Давай без обид :) Просто хлебнуть этого г действительно пришлось и после этого раздражают восторженные реплики, ах чистые функции, ах автоматически распараллелится, ах возьмем Quicksort, смотрите как все легко Не фига не легко и люди над этим не первый год бьются, и польза от параллельности во многих случаях не очень очевидна, зато вред весьма заметен. Мы например у себя вообще пришли к тому что многопоточность зло (иногда неизбежное). Пообщаться конечно можно, но это скорее под пиво разговор чем под форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 07:39:27 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Январский рейтинг языков программирования "...Соотношение объектно ориентированных языков к процедурным составляет 54,6% к 41,5%, а на долю функциональных и логических языков приходится по 2,8% и 1,1% ...." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 11:57:40 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Январский рейтинг языков программированияРейтинг составляется на основе интеллектуального подсчета упоминаний конкретного языка программирования при поиске в Google, Google Blogs, MSN, Yahoo!, Wikipedia и YouTube. Он затрагивает только тьюринг-полные языки, не учитывая, например, SQL или HTML, а также ассемблер ввиду его специфичности. Хм.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:06:10 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), 1. Покажем что любую частично рекурсивную функцию можно реализовать на SQL : Базовые функции - нулевая (0), следования (n+1), выбора ({x1,...,xn}->xi) заложены в логику операторов и выражений (она в SQL точно такая же как во всех императивных языках). Достаточно очевидно чтобы останавливаться на этом. Оператор подстановки (h(x1,x2,...,xn)=f(g1(x1,..,xn),...,gn(x1,...xn)) - реализуется при помощи Join, cоздается JOIN подзапроса вычисления f, с условия для ON соответственно {параметрI=gI(x1,...,xn), AND} Оператор минимизации аргумента h(x1,...,xn-1)=min(y), при условии f(x1,...,xn-1,y) = 0, делается при помощи Group By, в group by идет x1,...,xn-1, в where f(x1,...,xn-1,y) = 0, а выражением будет min(y) Оператор примитивной рекурсии h(x1,...,xn,0) = f(x1,...,xn), h(x1,...,xn,y+1) = g(x1,...,xn,y,h(x1,..,xn,y)) - собственно реализация рекурсивного CTE и делалась с оператора примитивной рекурсии, делаешь with h(x1,...,xn,y), до UNION ALL (начальный шаг) ставишь f и 0, после UNION ALL, SELECT'аешь g и y+1. Конечно можно написать формальное доказательство но это будет не 10 зря потраченных минут, а все 4 часа. Все тоже самое касается сравнения грамматик, но итак очевидно что в базовом императивном алгоритме количестве правил ну явно не больше SQL, который из-за своей кривоты еще больше усложнен чем мог бы быть, но все равно нормально оптимизируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:23:55 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > В любом случае вы почему-то считаете что SQL проще структурного кода, > что явно не так. Грамматика первого состоит где-то из правил 5-10, а > грамматика второго в несколько раз больше. Простота языка и простота грамматики языка -- это не одно и то же. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:31:40 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > Если у вас плохо с образованием, вам не читали теорию грамматик, и вы > даже не понимаете что именно я имею ввиду под структурным > программированием и его грамматикой (и конкретный синтаксис тут роли не > играет), то я вам ее рисовать здесь не буду, воспользуйтесь поиском... Слушай, ты постоянно подменяешь понятия. Структурное программирование тоже НИКАК не связано с грамматикой языка. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:36:27 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), ... Конечно можно написать формальное доказательство но это будет не 10 зря потраченных минут, а все 4 часа. Все тоже самое касается сравнения грамматик, но итак очевидно что в базовом императивном алгоритме количестве правил ну явно не больше SQL, который из-за своей кривоты еще больше усложнен чем мог бы быть, но все равно нормально оптимизируется 1. отвечу позже 2.1 в "алгоритме" нет правил грамматики 2.2 если имеется в виду некий абстрактный максимально примитивный язык, достаточный для выражения всех императивных конструкций и базовых типов данных, непонятно, почему мы не рассматриваем грамматику для столь же базового примитивного "SQL" (пусть даже с введенным CTE), а норовим сравнить с последним стандартом ??? двойные стандарты ? Уверяю тебя, в SQL правил будет меньше, но суть не в этом 2.3 как правильно заметил MasterZiv, сложность языка никак не связана со сложностью описывающей его грамматики. Взять хоть LISP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:43:51 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Смотря что понимать под простотой. Простота понимания\задания - как правило сильно коррелировано с простотой грамматики. Человеку с улицы императивные принципы ближе чем декларативные. К примеру именно первые используются в описании бизнес-процессов. А вот простота реализации и в частности оптимизации может сильно отличаться от простоты задания. То есть в проектировании\создании архитектуры они тоже коррелированы - так называемая бритва Оккама применима именно к нему. А вот в алгоритмике ярким примером не работы этого принципа можно считать большую теорему ферма, где задача формулируется одним предложением, а решение на 30 страницах. Но собственно об этом и шел спор, что параллелятся именно декларативные языке не потому что они проще или узко-специфичны, а потому что они лучше для этого подходят... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:46:25 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:48:13 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Это как раз вы цепляетесь к словам. Как еще можно формально описать структурное программирование (как и любое другое) как не через абстрактную грамматику языка его использующего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 12:51:08 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieMasterZiv, Wikipedia Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании). Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний (в значении, подобном таковому в теории автоматов). Функциональное программирование не предполагает изменяемость данных (в отличие от императивного, где одной из базовых концепций является переменная) . На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции взаимодействуют и изменяют уже определённые данные. Таким образом, в императивном программировании, при вызове одной и той же функции с одинаковыми параметрами можно получить разные данные на выходе, из-за влияния на функцию внешних факторов. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат в обоих случаях, входные данные не могут измениться, выходные данные зависят только от них. Первые 2 абзаца в википедии про функциональное программирование... Таким образом SQL более удовлетворяет определению функционального программирования чем тот же Haskell или тем более Lisp... PS: Хотя счас конечно скажут, что википедия не аргумент, что у каждого свое определение ФП, и т.п. А когда каждый придумывает сам определения, разговаривать о чем бы то ни было бесполезно... Сравнил а английским вариантом "определения" - переводящий похоже не в теме был. Да и английский вариант - какая-то туфта. Императивное программирование вроде по учебникам определяется как программирование через прямые команды компьютеру - как делать. А декларативное только заданием - что делать. То есть функция в императивном программировании - всего лишь сгруппированные команды, а функция в ФП - ближе к математической функции. Само собой контекст вычисления в ФП контролируется лучше. Об этом вроде в ангельском варианте. И как уже отмечалось состояния есть. Собственно и КАМ (Категориальная абстрактная машина, в название языка OCAML - CAM - в честь КАМ, Haskell, SML, Moscow ML тоже с КАМ теор. связаны) определяется на состояниях (по учебникам же). КАМ более программ. ориент. категориальная комбинАторная логика) ------------------------------------ Вопрос: насколько практически ценно создать создать виртуальную машина вроде JVM, NET, но специально под функциональные языки? Как в этом теоретически КАМ (более программ. ориент. категориальная комбинАторная логика) поможет? Конечно КАМ в общем такая же абстракция как и машина Тьюринга, и частично-рекурсивные функции, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:17:10 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie 1. Покажем что любую частично рекурсивную функцию можно реализовать на SQL : Базовые функции - нулевая (0), следования (n+1), выбора ({x1,...,xn}->xi) заложены в логику операторов и выражений (она в SQL точно такая же как во всех императивных языках). Достаточно очевидно чтобы останавливаться на этом. давай будем конкретнее select 0 from arguments; select x+1 from arguments; select xi from arguments; Имеешь в виду? Если нет, твои варианты запросов??? Если да, вопросы: 1. select всегда будет возвращать скаляр (одна столбец одной строки)? 2. как в функцию передавать аргументы? т.е. откуда их брать??? 3. как быть с не однострочными запросами? на мой взгляд, более удачным было бы считать аргументами строки, но и тут возникнет масса вопросов. Nitro_Junkie Оператор подстановки (h(x1,x2,...,xn)=f(g1(x1,..,xn),...,gn(x1,...xn)) - реализуется при помощи Join, cоздается JOIN подзапроса вычисления f, с условия для ON соответственно Что означает "JOIN позапроса"? запросы в JOIN одноуровневые Пример SQL-запроса, если не сложно, для f(g(x))? Что мы будем считать оператором??? (join, union,...)? Nitro_Junkie Оператор минимизации аргумента h(x1,...,xn-1)=min(y), при условии f(x1,...,xn-1,y) = 0, делается при помощи Group By, в group by идет x1,...,xn-1, в where f(x1,...,xn-1,y) = 0, а выражением будет min(y) Меня опять терзают смутные соменения. Примерчик запроса можно??? в частности интересно, что будет в where? Nitro_Junkie Оператор примитивной рекурсии h(x1,...,xn,0) = f(x1,...,xn), h(x1,...,xn,y+1) = g(x1,...,xn,y,h(x1,..,xn,y)) - собственно реализация рекурсивного CTE и делалась с оператора примитивной рекурсии, делаешь with h(x1,...,xn,y), до UNION ALL (начальный шаг) ставишь f и 0, после UNION ALL, SELECT'аешь g и y+1. опять же, примерчик запроса не помешает. понимаешь, тебе со своими мыслями разобраться проще чем окружающим. Ты можешь не договаривать что-то, считая это очевидным, при том что для окружающих это не так. В любом случае, ты ничего не теряешь, а лишь приобретаешь ясность концепции :) Или ты не можешь сказать как будут выглядеть все эти запросы ??? Nitro_Junkie Конечно можно написать формальное доказательство но это будет не 10 зря потраченных минут, а все 4 часа. инвестиции в собственный мозг - это, как правило, очень удачные инвестиции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:19:45 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieНо собственно об этом и шел спор, что параллелятся именно декларативные языке не потому что они проще или узко-специфичны, а потому что они лучше для этого подходят... передергиваешь, либо не понял о чем шел спор. я не говорил, что декларативные языки узко-специфичны и потому лучше параллелятся, это ты выдумал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:22:54 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит... Тогда давай и язык брать какой-то образца 90 годов Pascal например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:25:53 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Я уже писал SQL расматриваем как абсолютно функциональный язык, то есть таблица это функция. И он возвращает не один параметр - одно значение, а сразу - все возможные параметры -> значения. Соотвественно чтобы не смешивать несколько функций, говорим что в одной таблице, все ключи как колонки + и плюс еще одна колонка значение функции. Так как это чисто функциональный язык вопрос передачи параметров состоит из выбора в результате выполнения твоего SELECT'а нужного параметра, то есть абстрагируемся от этого. JOIN состоит из таблицы\подзапроса и условия связывания читаем книгу по SQL для f(g()) - допустим SELECT ... JOIN g1 ON ... JOIN g2 ON ... JOIN f ON f.x1=g1.value AND f.x2=g2.value ... AND f.xn = gn.value - что тебе не понятно? Опять же для минимизации аргумента : SELECT MIN(f.y) FROM f GROUP BY f.x1,f.x2,...,f.xn WHERE f.value=0 CTE - дольше расписывать, лень время тратить, но надеюсь идею ты понял... хотя могу расписать, если совсем тяжело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:35:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Nitro_JunkieGluk (Kazan), А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит... Тогда давай и язык брать какой-то образца 90 годов Pascal например. Бери мне не жалко... Сможешь написать виртуальную машину распараллеливающую его в общем случае? Кстати не уверен что этого нельзя сделать, но кажется что в отличии от SQL задача NP-полная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:36:35 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)передергиваешь, либо не понял о чем шел спор. я не говорил, что декларативные языки узко-специфичны и потому лучше параллелятся, это ты выдумал Ты говорил : Gluk (Kazan)Там не распараллеливание, а оптимизация в полный рост. И не за счет декларативности, а за счет узкой сцепифичности задачи Вообще SQL один из немногих реально декларативных языков (как их определить очень удачно описал Пилотажный сверху) так что ты сам себе противоречишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:39:23 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie асматриваем как абсолютно функциональный язык, то есть таблица это функция. И он возвращает не один параметр - одно значение, а сразу - все возможные параметры -> значения. Соотвественно чтобы не смешивать несколько функций, говорим что в одной таблице, все ключи как колонки + и плюс еще одна колонка значение функции. т.е. функцией является все-таки таблица, а не select-запрос? что является значениями? если опять-же таблице, как передать их таблице (функции)? Вопрос о примерах функций остается в силе. у меня создается впечатление, что ВЫ не можете это сформулировать??? Nitro_Junkie JOIN состоит из таблицы\подзапроса и условия связывания читаем книгу по SQL какую книгу? У меня JOIN состоит из двух равноправных таблиц: select * from T1, T2 где здесь подзапрос??? Nitro_Junkie для f(g()) - допустим SELECT ... JOIN g1 ON ... JOIN g2 ON ... JOIN f ON f.x1=g1.value AND f.x2=g2.value ... AND f.xn = gn.value - что тебе не понятно? Будет понятнее с мааааленьким примерчиком табличек g и f (последняя вполне достаточна от одного аргумента). Nitro_Junkie Опять же для минимизации аргумента : SELECT MIN(f.y) FROM f GROUP BY f.x1,f.x2,...,f.xn WHERE f.value=0 CTE пока оставим. Идею надеюсь пойму когда дашь примерчики с содержимым таблиц и запросами, выражающими операторы минимизации аргумента и подстановки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:47:14 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan)Nitro_JunkieGluk (Kazan), А я и не говорил про современные диалекты SQL, SQL-92 без наворотов+рекурсивных CTE вполне хватит... Тогда давай и язык брать какой-то образца 90 годов Pascal например. Бери мне не жалко... Сможешь написать виртуальную машину распараллеливающую его в общем случае? Кстати не уверен что этого нельзя сделать, но кажется что в отличии от SQL задача NP-полная ты опять стекаешь куда-то. На кой мне его параллелить? мы вроде их грамматики мерять собирались??? кстати, отнюдь не любой SQL-запрос можно распараллелить и куда более чем не любой параллелить нужно. подумай над этим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:49:02 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan)передергиваешь, либо не понял о чем шел спор. я не говорил, что декларативные языки узко-специфичны и потому лучше параллелятся, это ты выдумал Ты говорил : Gluk (Kazan)Там не распараллеливание, а оптимизация в полный рост. И не за счет декларативности, а за счет узкой сцепифичности задачи Вообще SQL один из немногих реально декларативных языков (как их определить очень удачно описал Пилотажный сверху) так что ты сам себе противоречишь Неа. Я говорил, что SQL параллелится (в некоторых местах) за счет своей специализации, а не за счет декларативности. Поясни, как из этого вытекает, что ВСЕ декларативные языки узко-специализированы (и именно поэтому лучше параллелятся) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:51:22 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Аргументация полноты неубедительна. Join это умножение множеств, а не подстановка. Ну и с остальными операциями маловато точности в "предъявах". Но SQL без процедурных расширений в абсолютной трансизоляции, все таки декларативен. Gluk (Kazan) Сообразил ответ, почему СУБД плохо подходят как хранилище переменных для языка: 0. Слишком много посредников xDBC и ему подобные. 1. Доступ из языка очень неудобный, вызов предварительных действий для обращения к переменной, да и само обращение через процедуры с десятком параметров ( Может быть, алл знает примеры языков (желательно из области ФП и слегка современных), с родным в языке обращением в БД (постоянным хранением данных или результатов вычислений). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:56:01 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemarg Сообразил ответ, почему СУБД плохо подходят как хранилище переменных для языка: 0. Слишком много посредников xDBC и ему подобные. 1. Доступ из языка очень неудобный, вызов предварительных действий для обращения к переменной, да и само обращение через процедуры с десятком параметров ( На практике это не проблема Siemarg Может быть, алл знает примеры языков (желательно из области ФП и слегка современных), с родным в языке обращением в БД (постоянным хранением данных или результатов вычислений). Erlang+Mnesia очень ФП и современно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 13:59:53 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЯ уже писал SQL расматриваем как абсолютно функциональный язык, то есть таблица это функция. Еще раз медленно: SQL - это язык операций рел. алгебры. Операнды операций - таблицы. Результат операций - таблица. Операции это функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 14:04:58 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЯ уже писал SQL расматриваем как абсолютно функциональный язык, то есть таблица это функция. Еще раз медленно: SQL - это язык операций рел. алгебры. Операнды операций - таблицы. Результат операций - таблица. Операции это функции. ну что ты за него, пусть сам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 14:22:19 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
нихера не понял :) об чем тут споры Я распараллеливание понимаю только как сделано в Питоне, через yield (что было содрано Питоном у языка Icon) Т.е. ты чик-чик , из функции , назад , опять туда же, потом в другую GOTO в чистом виде, все контексты висят где-то, ждут своего продолжения Я вот проверил для себя факторизацию с кучей вызовов, с разными параметрами и вы знаете тут явно есть польза ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:02:30 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Siemargl, _мод Повторяю для всех кто плохо читает... Рассматриваем SQL во 2 или какой там НФ. В которой у любой таблицы есть ключи и связывание всегда идет по этим ключам. Соответственно во такой форме Join это как раз подстановка, а не умножение множеств. И вообще уже не реляционная алгебра, а "функциональная" получается. Gluk, Join'ить можно не только таблицы но и запросы, если вы не в курсе. Пример дам с таблицами g (сложение всех чисел до 2) f (увеличение на 1 всех чисел до 4) k1, k2, value k1, value 1 1 2 1 2 1 2 3 2 3 2 1 3 3 4 2 2 4 4 5 Соответственно подстановка SELECT g.k1, g.k2 FROM g JOIN f ON f.k1=g.value получаем функцию a+b+1 для a и b <= 2 Можно расширить эти таблицы до любого счетного множества.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:05:23 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Можно тогда определение узкой-специализированности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:08:01 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Глюкнуло g (сложение всех чисел до 2) k1, k2, value 1 1 2 1 2 3 2 1 3 2 2 4 f (увеличение на 1 всех чисел до 4) k1, value 1 2 2 3 3 4 4 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:09:27 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Можно тогда определение узкой-специализированности? SQL предназначен для выполнения операций над отношениями Си предназначен ... (так для чего предназначен Си ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:13:37 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), C предназачен для операций с памятью У вас приблизительно такое же определение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:16:51 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Повторяю для всех кто плохо читает... Рассматриваем SQL во 2 или какой там НФ. В которой у любой таблицы есть ключи и связывание всегда идет по этим ключам. Спокийней, спокийней. Тебя тут понять пытаются или ты в этом не заинтересован ??? Nitro_JunkieGluk, Join'ить можно не только таблицы но и запросы, если вы не в курсе. Я в курсе К чему был наезд ? Nitro_Junkie g (сложение всех чисел до 2) f (увеличение на 1 всех чисел до 4) k1, k2, value k1, value 1 1 2 1 2 1 2 3 2 3 2 1 3 3 4 2 2 4 4 5 Вот жеж блин. Долго разгадывал твой ребус, пока не начал отвечать Код: plaintext 1. 2. 3. 4. 5. Так вроде понятнее Вопрос номер раз: Как здесь выражено, что g(5) = 5 ??? Как быть с функциями, определенными на счетном множестве??? SQL не устанет? Nitro_Junkie Соответственно подстановка SELECT g.k1, g.k2 FROM g JOIN f ON f.k1=g.value получаем функцию a+b+1 для a и b <= 2 Можно расширить эти таблицы до любого счетного множества.... Теперь твоя мысль стала проясняться. Возможно ты прав, но твои функции, фактически, определены только на конечных множествах, а это несколько неудобно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:21:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), C предназачен для операций с памятью У вас приблизительно такое же определение С неструктурированной памятью, в которую можно положить все что угодно. А также с устройствами и прочими вызовами, предоставляемыми OS, а также ... продолжать можно долго, но исторически Си предназначен для разработки мобильной операционной системы Unix и решения прикладных задач. Про SQL такого как ни крути не скажешь. Или про XSLT, тоже вроде язык, но только для выполнения преобразований XML документов. узко-специализированный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:25:03 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), А вот насчет конечных множеств это уже особенности реализаций SQL а не SQL... То есть по идее методика такая что в SQL должна была бы быть бесконечная таблица натуральных чисел (ее кстати можно задать через рекурсивный CTE) и чтобы ее можно было бы использовать при конструировании запросов. А уже при выполнении запроса указать конкретные интересующие параметры и чтобы она дала уже конечный результат. Но существующие SQL сервера так не делают, и это уже проблема их, а не самой парадигмы SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:28:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Так а чем мы ширину специализации мерить будем? Давай деньгами :) Тогда грубо говоря рынок информационных систем в которых активно (условно > 10/20/50%) используется SQL больше рынка приложений написанных C. То есть C более узко-специализирован :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:31:43 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), А вот насчет конечных множеств это уже особенности реализаций SQL а не SQL... То есть по идее методика такая что в SQL должна была бы быть бесконечная таблица натуральных чисел (ее кстати можно задать через рекурсивный CTE) и чтобы ее можно было бы использовать при конструировании запросов. А уже при выполнении запроса указать конкретные интересующие параметры и чтобы она дала уже конечный результат. Но существующие SQL сервера так не делают, и это уже проблема их, а не самой парадигмы SQL. Твоя теория забавна, но совершенно бесполезна практически. Фактически это извращение над частично рекурсивными функциями, бо основополагающая функция следования не будет вычислена никогда. Понимаешь, на основе лямбда-исчисления понаписали тучу полезных языков. А какая польза от твоего исчисления ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:36:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Так а чем мы ширину специализации мерить будем? Давай деньгами :) Тогда грубо говоря рынок информационных систем в которых активно (условно > 10/20/50%) используется SQL больше рынка приложений написанных C. То есть C более узко-специализирован :) Ты сам знаешь что не прав Рынок SQL, в твоем измерении 0% (что полюбому меньше чем у Си) Видишь-ли, SQL НИКОГДА не используется для решения практических задач в чистом виде. При его использовании обязательно используется и какой-либо из универсальных языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:38:29 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Твоя теория забавна, но совершенно бесполезна практически. Фактически это извращение над частично рекурсивными функциями, бо основополагающая функция следования не будет вычислена никогда. Понимаешь, на основе лямбда-исчисления понаписали тучу полезных языков. А какая польза от твоего исчисления ??? Впрочем, твое исчисление было-бы реализуемо, если бы SQL был ленивым языком. Если бы у бабушки были яйца ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:40:12 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Я просто сейчас показал : SQL во 2 НФ - максимально функциональный из всех существующих полный по тьюрингу язык программирования. Можно считать что основой для SQL языка были частично-рекурсивно функции (сильно сомневаюсь что ими вдохновлялись создатели языка иначе не допустили бы столько косяков, хотя практически уверен что при создании рекурсивных CTE за основу был взят оператор примитивной рекурсии). Ничего нового я не предложил, описал то что есть. А про практическую пользу SQL в задачах с несложной алгоритмикой (то есть почти все информационные системы) я думаю все знают... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:45:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Я же написал > n'ого % а не на 100 %, но опять таки я думаю ты помнишь по ветке полноты по тьюрингу, что сейчас учавствую в проекте, в котором реализуется новая, обобщающая SQL, декларативная парадигма, в которой этот процент практически доведен до 100 (за исключение задач очень сложной алгоритмики), но это уже оффтоп... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:49:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Ленивые языки тут кстати совершенно ни при чем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:50:04 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Я просто сейчас показал : SQL во 2 НФ - максимально функциональный из всех существующих полный по тьюрингу язык программирования. Можно считать что основой для SQL языка были частично-рекурсивно функции (сильно сомневаюсь что ими вдохновлялись создатели языка иначе не допустили бы столько косяков, хотя практически уверен что при создании рекурсивных CTE за основу был взят оператор примитивной рекурсии). Ничего нового я не предложил, описал то что есть. А про практическую пользу SQL в задачах с несложной алгоритмикой (то есть почти все информационные системы) я думаю все знают... Увы не по твоей схеме. Покажи ка, где в построении множества Мандельброта было использовано твое исчисление ??? А как было бы хорошо, никаких тебе извращений, строго формальная модель, эквивалентная машине Тьюринга В общем пользы от твоей теории 0 целых 0 десятых. Сотрясение воздуха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:50:19 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Ленивые языки тут кстати совершенно ни при чем... подууууумай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:50:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Я же написал > n'ого % а не на 100 %, но опять таки я думаю ты помнишь по ветке полноты по тьюрингу, что сейчас учавствую в проекте, в котором реализуется новая, обобщающая SQL, декларативная парадигма, в которой этот процент практически доведен до 100 (за исключение задач очень сложной алгоритмики), но это уже оффтоп... :) Раз оффтоп то и не заикайся. К чему все эти разговоры на форуме ??? Самореклама ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:51:41 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Я не предложил никакого исчисление. Де-факто SQL в 99.99 % случаев и используется во 2 НФ. И используется как я описал - как функциональный язык - например оператор подстановки - есть колонка имя(склад), и есть колонка склад(документ) и при создании запроса документов получает колонку - имя склада документа(документ) = имя(склад(документ)) - в виде запроса, по аналогии с примером как я написал. Или CTE или минимизация... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 15:59:01 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Я просто сказать что SQL можно развить до того уровня, чтобы не пришлось 4 страницы писать выкладок, чтобы люди всю жизнь его использующие не замечали бы что во 2НФ это функциональный язык ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 16:01:13 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Я просто сказать что SQL можно развить до того уровня, чтобы не пришлось 4 страницы писать выкладок, чтобы люди всю жизнь его использующие не замечали бы что во 2НФ это функциональный язык Ты хотел сказать, что с помощью SQL можно построить функциональное исчисление, при условии, что все функции определены над конечными множествами ??? эка невидаль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 16:02:44 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Нет, что SQL во 2НФ - функциональный язык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 16:11:02 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Нет, что SQL во 2НФ - функциональный язык. Долго читал - одного не понял: что такое нормальная форма языка ? Т.е. где-то должны существовать С++ в 3 НФ, Pascal в 1 НФ? ... Или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 17:01:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЯ просто сказать что SQL можно развить до того уровня, чтобы не пришлось 4 страницы писать выкладок, чтобы люди всю жизнь его использующие не замечали бы что во 2НФ это функциональный язык А смысл? SQL решает те задачи для которых он был создан. Я по работе сталкиваюсь с таблицами (отчёты/загрузки) которые находятся едва-ли в "первой НФ". И избавиться от них невозможно в обозримом будущем. А попытки - доказывать полноту, или функциональность SQL - это знаете-ли просто "игры разума". BrainFuck тоже полный по некоторым критериям, но это не делает его полезным. Просто - как забавный мозговой эксперимент для кучки гиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 17:04:11 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
###, Нормальная форма SQL'я имеется ввиду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 17:05:53 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, А я честно гря не припомню что хоть раз сталкивался с таблицами, не во второй НФ... Забавно что при реализации\презентациях проекта, часто возникал вопрос почему этого никто не делал до нас. У нас было много причин, но все равно лично я до конца этого не понимал. По результатам этого форума понимаю почему, потому как для 99 процентов программистов любой анализ того что, как и зачем они делают - это "мозговой эксперимент для гиков". Такой умственный пролетариат - мне сказали я делаю... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 17:13:39 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie###, Нормальная форма SQL'я имеется ввиду Считайте меня умственным пролетариатом, но я опять не понял Вашей мысли. Что такое нормальная форма данных - я представляю, а вот что такое нормальная форма языка - хоть убейте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 18:24:29 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
###, Имелось ввиду не существующий, а "усовершенствованный" SQL с ограничениям накладываемыми 2 НФ, то есть в запросе подразумевается разделение на ключи и т.д. На самом деле у него немного другой синтаксис соответственно должен быть, но это косметическое преобразование. Не цепляйтесь к словам, попробуйте мыслить более глобально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 18:40:48 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie###, Нормальная форма SQL'я имеется ввиду ляп, однако, если под SQL и нормальными формами понимаем одно и тоже :) Это структура данных (располаг. в таблицах) находятся в разных нормальных формах. 2 НФ - это все данные в 1 НФ и каждый неключевой атрибут (знач. в поле) минимально функционально зависит от первичного ключа. SQL отдельно и данные отдельно В приведенных истолкованиях идет задание функций посредством таблиц (само собой), то есть конкретно как отображение множества на множество - конечно можно задать таким образом функцию, которую также можно задать рекурсивно (рекурсивными выражениями). Но при чем здесь SQL? Да в нечистых SQL разных СУБД добавлены возможности построения рекурсивных выражений, но это уже не тот SQL. P.S. В T-SQL SQL Server 2005 добавлена конструкция WITH и общая схема рекурсии (из д-ции) Код: plaintext 1. 2. 3. 4. 5. 6. 7. Но на чистом SQL что такое можно построить так, чтобы в построении это вызвало само себя? P.S. И вообще возм. выразить частичн.-рекурс. функции - говорит о том, что язык полный, а не о том, что функциональный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 18:58:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Про нормальную форму я с потолка ляпнул, я имел ввиду наличие ключей и связей только ключей, то есть именно когда таблица - отображение множества на значения. Но согласитесь что в прикладных задачах почти всегда так и есть. А какая это 3 или 5 форма честно гря не помню, но может потом посмотрю... А то что вы описали и есть рекурсивные CTE, и они вошли в стандарт SQL-1999 и поддерживается почти всеми "приличными" СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2010, 19:14:33 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie пишет: > Смотря что понимать под простотой. Простота понимания\задания - как > правило сильно коррелировано с простотой грамматики. Возми к примеру язык brainfuck, и ты увидешь, что это не так. Человеку с улицы > императивные принципы ближе чем декларативные. Современная прихологическая наука говорит, что примерно половине людей ближе одно, а другой -- второе. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2010, 14:45:11 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieПо результатам этого форума понимаю почему, потому как для 99 процентов программистов любой анализ того что, как и зачем они делают - это "мозговой эксперимент для гиков". Такой умственный пролетариат - мне сказали я делаю... :) Не считай других тупее себя - это большая (если не фатальная) ошибка. А то что ты предлагаешь: 1. Слишком примитивно, чтобы быть интересным теоретически (в SQL заложены гораздо более интересные концепции) 2. Совершенно бесполезно в практическом отношении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 08:33:10 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Не цепляйтесь к словам, попробуйте мыслить более глобально... Почему элементарная техническая неграмотность (причем в своей хлебной области) так часто прикрывается красивыми словами об умении мыслить глобально, ссылками на уважаемые авторитеты и философствованиями на тему эзотерики (а третьего дня путает буквы при правильнописании)? Друг мой, SQL не имеет отношения к нормализации БД. Нормальные формы БД прекрасно себе существовали до всякого SQL-я, который классики уже подустали ругать за его популизм и некоторую убогость. Будьте грамотны, я Вас умоляю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 08:40:02 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie А то что вы описали и есть рекурсивные CTE, и они вошли в стандарт SQL-1999 и поддерживается почти всеми "приличными" СУБД. Только вот к реляционной алгебре отношения не имеет, вот незадача. В Oracle к примеру есть и более забавная конструкция (MODEL), вполне себе императивная. На практике удобно (местами) к теории отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 08:43:20 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
От обсуждения современного ФП сильно отошли в сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 10:30:39 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, сложность Brainfuck'а обусловлена принципиально коротким синтаксисом, в аналогичном C++ смотрелось бы проще. Хотя в чем то вы правы. Подытожу все что я утверждал: Чтобы не было претензий к нормальным формам, введем понятие ключевой формы - БД удовлетворяет ей если в ней у любой таблицы (запроса) есть ключевые колонки. Соответственно JOIN всегда идет по этим колонкам. То есть любая таблица (запрос) расматривается как отображение ключей (параметров) на значение (что кстати де-факто в математике и является определением функции). Тезис 1: 99% БД - в ключевой форме. То есть это не я придумал эту форму, это де-факто есть сейчас. Тезис 2: SQL при использовании с БД в ключевой форме - соотвествует всем принципам функционального программирования - то есть по сути является функциональным языком. Тезис 3: SQL-1999 в ключевой форме, реализует уже не реляционную, а классическую "функциональную" алгебру (а частности используемую в частично-рекурсивных функциях, ну и вообще в математических функциях) Изначально у многих здесь складывается впечатление что ФП - это лямбда-исчисление. То есть если бы автор назвал бы тему лямбда-исчисление в программировании, то да SQL был бы ни при чем. А так SQL самый яркий и популярный пример ФП. Gluk, специально для вас. Не надо спорить про ключевую форму - это определение, которое я ввел в этом посте. Спорить с определениями глупо, под обсуждение попадает тезисы, в частности - Тезис 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 11:40:55 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Gluk, специально для вас. Не надо спорить про ключевую форму - это определение, которое я ввел в этом посте. Спорить с определениями глупо, под обсуждение попадает тезисы, в частности - Тезис 1. А с какого перепугу ты решил, что я буду спорить с твоими определениями? Определяй сколько влезет. Я чуть выше уже говорил, что не надо считать окружающих заведомо более тупыми чем ты сам ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 11:57:19 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Тезис 2: SQL при использовании с БД в ключевой форме - соотвествует всем принципам функционального программирования - то есть по сути является функциональным языком. Тезис 3: SQL-1999 в ключевой форме, реализует уже не реляционную, а классическую "функциональную" алгебру (а частности используемую в частично-рекурсивных функциях, ну и вообще в математических функциях) Валяй, изобрази вычислимую функцию следования на любой из существующих реализаций SQL. После этого можно говорить о частично рекурсивных функциях. Совет, завязывай ты это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:01:08 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), издеваешься? SELECT a.value+1 FROM a - изобразил... Совет, если ты чего-то не понимаешь, то это не значит что не понимают все остальные... Не надо считать себя умнее остальных ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:04:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), издеваешься? SELECT a.value+1 FROM a - изобразил... Совет, если ты чего-то не понимаешь, то это не значит что не понимают все остальные... Не надо считать себя умнее остальных ;-) опа опа, а где же твое связывание по ключам ? столбцы параметров, столбец значений ??? меняем концепцию на лету ??? ага, достойно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:06:59 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Nitro_JunkieGluk (Kazan), издеваешься? SELECT a.value+1 FROM a - изобразил... Совет, если ты чего-то не понимаешь, то это не значит что не понимают все остальные... Не надо считать себя умнее остальных ;-) опа опа, а где же твое связывание по ключам ? столбцы параметров, столбец значений ??? меняем концепцию на лету ??? ага, достойно твоя функция следования, напоминаю, выглядела так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А то что ты изобрази сейчас, так это ваще не разу не функция, а оператор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:08:57 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Млин, мне все разжевывать? SELECT a.x1,...,a.xn,a.value+1 FROM a... Вообще в SQL есть дебилизм с неоднозначным определением ключей, то есть в идеале (если бы SQL проецировался изначально в ключевой форме) синтаксис должен был быть следующим SELECT {n} a.value+1 JOIN a.x1=keys.1 AND a.x2=keys.2 ... AND a.xn+keys.n, но что выросло то выросло.... Хотя в общем случае конечно функция следования выглядит как SELECT N.key,N.value+1 FROM N, где N - тождественная функция, в рекурсивном CTE - задается как with N(key,x) { SELECT N.key+1,N.x+1 FROM N } ну или что-то типа того. Но опять-таки в чистом виде функция следования в SQL обычно не используется. Что такое оператор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:18:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Млин, мне все разжевывать? SELECT a.x1,...,a.xn,a.value+1 FROM a... Вообще в SQL есть дебилизм с неоднозначным определением ключей, то есть в идеале (если бы SQL проецировался изначально в ключевой форме) синтаксис должен был быть следующим SELECT {n} a.value+1 JOIN a.x1=keys.1 AND a.x2=keys.2 ... AND a.xn+keys.n, но что выросло то выросло.... Хотя в общем случае конечно функция следования выглядит как SELECT N.key,N.value+1 FROM N, где N - тождественная функция, в рекурсивном CTE - задается как with N(key,x) { SELECT N.key+1,N.x+1 FROM N } ну или что-то типа того. Но опять-таки в чистом виде функция следования в SQL обычно не используется. Что такое оператор? Забыл ? операторами в твоей модели являются select-запросы (операторы подстановки, примитивной рекурсии и минимизации аргумента), а функциями у тебя являются конечные выборки. Поскольку функция слелования определена на счетном множестве, реализовать на SQL практически ты ее не сможешь. Ты и нулевую то функцию не сможешь реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:22:26 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Почему, я реализовал выше... Просто SQL сервера ее выполнить не смогут (хотя может есть и те кто смогут). Кроме того функции следования, как и нулевые, в чистом виде на практике не используется. Так что это ты уже теоретизированием занимаешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:31:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Кроме того функции следования, как и нулевые, в чистом виде на практике не используется. Так что это ты уже теоретизированием занимаешься. С этого места подробнее, а какие еще базовые функции имеются в определении частично рекурсивных функций? Это у тебя не множество частично рекурсивных функций получается, а какое-то совсем другое множество Нет ничего практичнее хорошей теории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:37:53 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), все завязываем, я вижу что ты совсем невъезжаешь, без обид... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:47:35 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), все завязываем, я вижу что ты совсем невъезжаешь, без обид... Без обид так без обид. Действительно, чего уж обижаться если кто-то понял твою несуразицу лучше чем ты сам ? Я тебе еще пару страниц предлагал валить со своим SQL в другую тему и не мусорить здесь. Там бы тебя никто не трогал :) Действительно, чего обижаться ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 12:57:50 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
как зачинатель топика скажу: Конечно, еще из школьной математики известно, что функцию можно задать как аналитически, так и таблично. Раз функцию можно задать таблично, то далее можно развивать мысль в эту сторону, размышляя о функциональности SQL и его связи с ФП. Это очень увлекательная мысль, которая уже развернулась на 10 страниц обсуждения, но лично мне она не очень интересна как предмет дискуссии. Лично мне все-таки не очень понятно, как из таких строительных кирпичиков как: лямбда функции, замыкание, рекурсия можно писать ПО "завтрашнего дня". Пока я вижу, что декларативности, как это есть в SQL этот подход не несет. Моя чуйка подсказывает, что большое будущее все-таки за декларативным подходом и ФП скорее занимает промежуточное положение между императивным подходом и декларативным. Очень бы хотелось увидеть что-то вроде книги GoF но для ФП. Пока в нете есть хорошая статья в последнем номере журнала fprog.ru, с первого раза не понял многого, буду перечитывать еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 13:44:13 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
надеюсь что antares еще поглядывает в этот тред и может когда-нибудь вернется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 13:46:57 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old, Кстати, а лямбда-исчисление вообще говорит что-нибудь о декларативности. То есть я как понимаю оно говорит о возможности создания новых функций из уже существующих, но про базовый класс функций ничего не сказано. Он вообще предполагается императивный или декларативный? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 13:57:58 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old, Это не совсем ответ на Ваш вопрос, но может быть Вам будет интересно. Есть такая книга (на англ.) Real World Haskell вроде как рассматриваются практические приложения на haskell'е ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 14:33:47 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ggg_old, Почитайте про LINQ to Objects . Как раз пример декларативного подхода к обработке коллекций в памяти, внешне несколько напоминает SQL. На самом деле LINQ - синтаксический сахар, а реально работают функции высшего порядка и лямбды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 14:39:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Там частный случай List'а решен, и то в каком-то странном виде. А что делать с Map'ами и т.д.? Тогда уж 1С почитайте, регистры сведений, накоплений и вообще документы... Но им обоим до уровня декларативности хотя бы SQL как до луны пешком... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 15:34:15 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieДиез, Там частный случай List'а решен, и то в каком-то странном виде. А что делать с Map'ами и т.д.? Не понял вопроса.. Map (в .NET - Dictionary) - тоже некоторая коллекция, почему бы с ней не работать через Linq? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 16:52:33 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Долго объяснять, но прямого маппинга на SQL не будет. То есть не пробовал, но запросы явно как в Hibernate'е много по чуть-чуть, борьба за скорость превысит пользу от использования (если конечно не очень простые приложения). ЗЫ. Посмотрел описание с примерами, там вся технология - "синтаксический" сахар + ORM... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 17:20:06 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieДиез, Долго объяснять, но прямого маппинга на SQL не будет. То есть не пробовал, но запросы явно как в Hibernate'е много по чуть-чуть, борьба за скорость превысит пользу от использования (если конечно не очень простые приложения). ЗЫ. Посмотрел описание с примерами, там вся технология - "синтаксический" сахар + ORM... Вы, наверное, путаете LinqToObjects и LinqToSQL. У них синтаксис одинаковый, но внутри принципиально разные технологии. LinqToSQL - генерация SQL-запросов из кода C#/VB.NET с помощью AST-преобразований. Удобно иногда, но по сути тот же ОРМ, как вы и заметили. LinqToObjects - операции с произвольными коллекциями не через итерации, а с помощью декларативных запросов: Код: plaintext 1. 2. 3. Компилятор превращает запрос вот в это: Код: plaintext 1. где Where и OrderBy - обычные библиотечные функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 19:07:23 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Я вобщем не куда и не уходил. Просто смысла в обсуждении функциональности sql-а, особенно таком, не вижу. Ggg_old Лично мне все-таки не очень понятно, как из таких строительных кирпичиков как: лямбда функции, замыкание, рекурсия можно писать ПО "завтрашнего дня". Ну лямбды и компания скорее соотвествуют if-аим, прцедурам, объектам. Великой абстракции они не несут. Что интересного можно построить? Я уже говорил об алгебре которая позволяет решать задачки. Лямбда-исчисление это алгебра позволяющая решать программы. Преобразовывать не текст программы, как делает сишный макропроцессор, а сам алгоритм. Пока я вижу, что декларативности, как это есть в SQL этот подход не несет. Моя чуйка подсказывает, что большое будущее все-таки за декларативным подходом и ФП скорее занимает промежуточное положение между императивным подходом и декларативным. Очень бы хотелось увидеть что-то вроде книги GoF но для ФП. А какая декларативность есть в SQL? В прошлый раз я спрашивал, что именно ты хочешь обобщить и абстрагировать с помощью ФП? Попробуй ответить на эти вопросы, и будет виден путь куда говорить дальше. Заметь в прошлом посте я пытался показать почему декларативность SQL такая. Попробуй применить такую логику. Вобще в твоих вопросах не видно откуда? и куда? Есть только большие транспоранты ФП, Декларативность. Без контекста они сильно лучше Коммунизма-Капитализма. Пока в нете есть хорошая статья в последнем номере журнала fprog.ru, с первого раза не понял многого, буду перечитывать еще. Статья скорее большая и обзорная. Там вобщем-то нет ответов на твои вопросы (насколько я их понимаю). Я ее подкинул что-бы не зацикливался на лямбдах и рекурсии. GOF это все же про "ООП головного мозга" и как с этим жить. Но это лично мое мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2010, 21:28:16 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Хм... Забавно, хотя и все равно не совсем понятно для чего использовать, все-таки .Net не постоянно хранимая, поэтому в коллекциях обычно лежат временные данные из БД, и отбор по ним изначально должен делаться в БД (иначе тормозить будет)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 10:26:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Кстати насчет хибернейта-если бы копнули чуть глубже, то можно было бы найти возможность избежать кучи мелких запросов. Можно выбрать или ленивую загрузку, или наоборот все в один вопрос запихнуть с помощью настроек фетчинга. Мы сейчас прикрутили NHibernateLambda (или как-то так), так что сейчас наши запросы все типизированы и в случае изменения названия полей в классах ничего не полетит. Эдакий типизированный аналог SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 11:13:36 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Известный тезис, что торжество императивных языков вызвано было последовательными архитектурами. Но послед. арх-ры нормально уходят в прошлое. А вот разностная машина Чарльза Бэббиджа имела в общем параллельную архитектуру (по историч. сведениям). Метод конечных разностей просто распараллеливается. Причем если работу машины представить программно, то это программа стиля ФП: вычисление значения функции по другому значению этой же функции и пр. То есть, когда придет пора всё распараллеливать, то императивные языки, да с наворотами ООП, будут выглядеть несимпатично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 17:43:31 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Думаю, что переход к труЪ-функциональным языкам в mainstream будет очень тяжёлым. Для меня, как для "махрового" практика много неясностей в плане практического применения ФП. Здесь всё и IO* и Network* и прочие system*, RDBMS* -"головняки" без которых ФП-платформа будет "сферическим конём" или "вещью в себе". Много также вопросов чисто технологических. Как то-да сё да пятое десятое? Как дебажить, как трассировать, как ловить эксцепшены и сопрягаться с kernel. Хотя, этот тяжёлый переход будет постепенно облегчён. Возможно, в ближайшем будущем впихнут во все языки работу с closures, со списками и скажут-де "нахера вам этот Лисп и Хаскель?" возьмите наш X-ТруЪ-Чудо-lang и будет вам синтетическое щастье! Аллилуйя братия!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2010, 21:27:25 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton Хотя, этот тяжёлый переход будет постепенно облегчён. Возможно, в ближайшем будущем впихнут во все языки работу с closures, со списками и скажут-де "нахера вам этот Лисп и Хаскель?" возьмите наш X-ТруЪ-Чудо-lang и будет вам синтетическое щастье! Аллилуйя братия!! А что, разьве это не так с C#? Тенденция вполне очевидна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 07:57:40 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
В контексте поста mayton, не совсем понимаю, если исключить декларативность (которой де-факто в текущих "функциональных" языках нету) как это предполагают многие участники треда, что такого волшебного в функциональном программировании что существенно облегчает работу? Да нету этого дебилизма с привязкой метода ровно одному объекту, но без множественной диспетчеризацией и с нарушением модульности жить можно... А какая практическая польза от лямбда-исчисления (каррирования в частности) для меня загадка.... Точнее передачу\возврат функций и так можно решать передачей адресов функций как в C или в виде скажем анонимных классов, которые для восприятия даже проще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 10:20:33 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie декларативность (которой де-факто в текущих "функциональных" языках нету) как это предполагают многие участники ... А какая практическая польза от лямбда-исчисления (каррирования в частности) для меня загадка.... Практическая польза такая же как и от машины Тьюринга. Это очень эффектная остроумная вычислительная модель, при теоретической пользе которой создаются ФЯ. Декларативность в какой-то степени в каких-то местах присутствует во всех языках, как и функциональность. Наверно все же ИП+ООП, ФП, ЛП - это вопрос стиля, и в любом из стилей можно программировать на любом универс. языке. (Как стиль музыкального исполнениния - например, все можно сыграть как джаз, стиль единоборств, стиль поведения, ...). И необходимость программирования в каком-то стиле на языке другого стиля вызывается конечно задачами (а не намерением поизвращаться). P.S. Ответить - это сформулирвать что-то и для самого себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 10:53:12 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Так в чем эта польза отражена в ФЯ? То есть получается что все существующие языки (за исключением SQL :) ) отличаются друг от друга "синтаксическим" сахаром. И борьба идет только за то кто меньше букв напишет, и у кого красивее код будет смотреться. Такое развлечение для эстетов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:09:28 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie То есть получается что все существующие языки (за исключением SQL :) ) отличаются друг от друга "синтаксическим" сахаром. И борьба идет только за то кто меньше букв напишет, и у кого красивее код будет смотреться. Такое развлечение для эстетов? Меньше букв - меньше возможностей написать не ту букву и больше свободного времени для других задач ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:14:08 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieПилотажный, Так в чем эта польза отражена в ФЯ? То есть получается что все существующие языки (за исключением SQL :) ) отличаются друг от друга "синтаксическим" сахаром. И борьба идет только за то кто меньше букв напишет, и у кого красивее код будет смотреться. Такое развлечение для эстетов? Хм. Интерпретируются, транслируются, ... иначе. Компьютер иначе работает. Разный синтаксический сахар имеет разную цену. :) "Как корабль назовешь - так он и поплывет". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:18:52 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Меньше букв - меньше возможностей написать не ту букву и больше свободного времени для других задач Мммм, в данной формулировке позволю себе не согласиться. Меньше лексем-возможно. Но никак не меньше букв ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:18:59 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Nitro_Junkie То есть получается что все существующие языки (за исключением SQL :) ) отличаются друг от друга "синтаксическим" сахаром. И борьба идет только за то кто меньше букв напишет, и у кого красивее код будет смотреться. Такое развлечение для эстетов? Меньше букв - меньше возможностей написать не ту букву и больше свободного времени для других задач +1 Добавлю от себя: меньше возможности выстрелить себе в ногу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:40:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
zloy denGluk (Kazan) Меньше букв - меньше возможностей написать не ту букву и больше свободного времени для других задач Мммм, в данной формулировке позволю себе не согласиться. Меньше лексем-возможно. Но никак не меньше букв вырываешь из контекста было сказано: автор И борьба идет только за то кто меньше букв напишет, и у кого красивее код будет смотреться Соответственно и ответ был на тему, что меньше и красивее (пусть даже и букв) это вполне себе весомые экономические плюсы. С чем кстати можно и поспорить. Меньше букв (или пусть даже лексем) не значит понятнее (вспоминаем J, взрагиваем), но ... мы с коллегой сложность языков ведь объемом их грамматик меряем ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:42:35 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Ладно, меньше и красивее меня вполне устраивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:44:17 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
zloy denЛадно, меньше и красивее меня вполне устраивает Только вот все дело в том, что красота штука субъективная Некоторым красивым кажется J, а некоторым построение "частично рекурсивных функций" на конечных множествах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 11:56:54 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Но все равно синтаксический сахар... Сколько не спорить, у кого коврики в машине красивше, при расстоянии больше 200 км все равно лучше лететь на самолете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:07:06 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieТо есть получается что все существующие языки (за исключением SQL :) ) отличаются друг от друга "синтаксическим" сахаром. И борьба идет только за то кто меньше букв напишет, и у кого красивее код будет смотреться. Такое развлечение для эстетов? 100%. Причём самые злостные эстеты - это Паскалисты. Сам видел исходнички, где begin-end пишут с большой буквы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:21:38 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieПилотажный, Но все равно синтаксический сахар... Сколько не спорить, у кого коврики в машине красивше, при расстоянии больше 200 км все равно лучше лететь на самолете :) Ну, раз пошли такие сравнения... коврики.. Если "сахар" - это климат/круиз-контроль, GPS и прочая и прочая, то можно и на машине :) Может будет не так быстро, но дешевле и даже комфортнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:24:13 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Меньше букв - меньше возможностей написать не ту букву и больше свободного времени для других задач Я-бы сказал - всё идёт от "лени" разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:25:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Ну если расстояние от 1000 км то не комфортнее, а больше 3000 км и не дешевле... Кто не въехал, самолет - декларативное программирование, машина - императивное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:27:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Машина с крыльями - метапрограммирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:30:11 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonGluk (Kazan)Меньше букв - меньше возможностей написать не ту букву и больше свободного времени для других задач Я-бы сказал - всё идёт от "лени" разработчика. И это правильно отчего еще идти то всему ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:31:55 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Вы почему-то проводите резкую грань между декларативным и императивным программированием. С академической точки зрения - да, SQL SELECT - декларативный, блок-схема - императивная. В реальности грани нет. До аэропорта все равно придется ехать на машине ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:41:49 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Грани нет в каком смысле? То что до аэропорта надо добраться я понимаю. Но для этого можно воспользоваться скай-трейном, не заморачиваясь объемом двигателя, понтами и т.п. То есть декларативное программирование (SQL) само по себе, императивное (остальные) само по себе. Да у декларативного должны быть императивные черты, но их можно формализовать в "рельсы скай-трейна" и сконцентрироваться на основной части - самолете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:50:05 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, То есть сейчас, на практике INSERT, DELETE, UPDATE естественно слабоватые рельсы. Но вы сомневаетесь что их (и SQL в целом) можно развить до такой степени - что можно просто сесть и поехать? (то есть речь идет не о конкретно SQL а о декларативном программировании в целом) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:52:56 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieДиез, То есть сейчас, на практике INSERT, DELETE, UPDATE естественно слабоватые рельсы. Но вы сомневаетесь что их (и SQL в целом) можно развить до такой степени - что можно просто сесть и поехать? (то есть речь идет не о конкретно SQL а о декларативном программировании в целом) конечно можно. Лисп создавался тогда, когда еще мозг не был загажен архитектурой конкретного корча. Все императивная разработка ушла не далеко от драйверной разработки. Многие десятилетия в этой области законодателем моды был Си и Си++. Однако, как правильно заметил в свое время Ксеня, программисты никогда не умели по настоящему хорошо писать на ассемблере, будуйщее за декларативными и функциональными языками. Чем менее четко ставится алгоритм решения задачи компьютеру, тем больше у него свободы для ее решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:08:27 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Да, сомневаюсь. Иначе такой язык давно бы уже придумали. На одном SQL далеко не уедешь, нужен язык общего назначения, который и будет делать SQL-запросы к БД. К примеру, на SQL (и даже на PL/SQL итд.) глупо писать пользовательский интерфейс, хотя, наверное, возможно. Большинство ЯП общего назначения - императивные, так что от этого никуда не деться. И то, что в этих языках появляется синтаксический сахар в виде декларативных элементов - большой им плюс. (Все таки на машине с климат-контролем ехать удобнее, чем на пешком до метро, на метро, потом на скай-трейн..). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:09:55 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез Да, сомневаюсь. Иначе такой язык давно бы уже придумали. Здесь есть много но. Рынок языков программирования очень инертен. Промышленная разработка налагает четкие требования на конвеер программистов с заменяемыми элементами и патчирование версий ( ООП ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:17:46 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
ДиезДа, сомневаюсь. Иначе такой язык давно бы уже придумали. А вот интересно, кто? Вы себе представляете предпосылки для его создания? Конкретным заказчикам (их IT-отделам) это не интересно - не их профиль, большинство аутсорсеров и западных IT-компаний - работают по человеко-часам (или схожим схемам) их эффективность разработки слабо волнует, что сказал заказчик то и делают, кроме того их главные задачи как правило интеграция. Крупные компании (отделы) не занимающиеся бизнес-решениями тоже исключаем. И вообще крупные компании предоставляют гораздо меньше свобод разработчику чтобы проталкивать свои идеи, так что тоже вряд ли. У богатых компаний, как и компаний с малым количеством заказчиков, нету особого стимула что-то совершенствовать. Программирование никогда не считалось наукой, "исследовательских" лабораторий по ним нету, формального базиса тоже. Так что я бы поостерегся так говорить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:28:30 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, А да... И самое главное, то что сказал 301... Очень сильный консерватизм и инертность самих программистов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:29:43 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Пользовательский интерфейс - это тоже часть "рельс" (Но все равно дольше и дороже) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:38:44 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Не хочу спорить теоретически, приведу два примера: Microsoft Research . Из его недр вылезли, к примеру c-omega и Spec# - языки, которые никогда не были и не будут в продактиве, но благодаря им в C# появился Linq и CodeContracts. Это по поводу богатых компаний. Язык Scala - разрабатывается небезызвестным Мартином Одерски , профессором, в институте EPFL . Это по поводу "исследовательских" лабораторий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:46:51 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
301Чем менее четко ставится алгоритм решения задачи компьютеру, тем больше у него свободы для ее решения. Но тут я-бы заметил один неприятный момент. Большая часть этих решений может остаться "сферическими конями в пустоте" а малая часть реально войдёт в эксплуатацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:54:29 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Диез, Microsoft Research, судя по ссылке занимается чисто инженерными прикладными проектами. И тот же LINQ - чисто инженерная технология, все тот же "синтаксический" сахар... Профессор, что-то пишущий где-то что-то на "исследовательскую" лабораторию (в том виде в котором они есть грубо говоря у Intel'а и каких нибудь медкомпаний) не тянет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:54:56 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Повторюсь, теоретически рассуждать мне лениво. :) Если вы можете привести пример вашего "скай-трейна", то есть некоего чисто декларативного расширения/замены SQL, на котором (хотя бы) можно разрабатывать пользовательский интерфейс - это было бы действительно интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:16:45 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton301Чем менее четко ставится алгоритм решения задачи компьютеру, тем больше у него свободы для ее решения. Но тут я-бы заметил один неприятный момент. Большая часть этих решений может остаться "сферическими конями в пустоте" а малая часть реально войдёт в эксплуатацию. Почему же сферическими конями в пустоте ? В декларативном сиквеле это поле для танцев отдано оптимизатору, например. Сиквел набирает статистику, анализирует обьемы таблиц, индексы и прочье. И только полулегальными хинтами его можно растормошить и пустить план выполнения в четко заданом русле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 15:22:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
С сиквелом понятно. А какие хинты в Haskel? Lisp? F# ? Пока я знаю только один. Хвостовая рекурсия. И тот в принципе является не хинтом, а паттерном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 17:27:29 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, в хаскелле, например, есть конструкции для управления ленивостью и параллельностью (уже упоминавшиеся par и seq) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 22:57:58 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Вспомнился топик Евангелисты Microsoft начали продвигать F# - и кроме плюсов вообще выдвигают практическую необходимость распараллеливать программы. Так как к концу 2010 уже ожидают несколько десятков ядер на кристалл. Заметить, что 6-ядерные уже в продаже Opteron . Пока вроде на 6 ядрах задачи ОС в параллель и загрузка всех 6-и по полной. А когда будет эдак 60-80? Воспрос к параллелизации самих приграмм основных прикладных приложений. P.S. То, что касается "hint-ов оптимизации" в Haskell, то не только "например что-то", а достаточно много - уровни оптимизации, флаги, прагмы, управления фазами кодогенерации, ..., и при отключении полной лени можно управлять ленивостью в отдельных моментах, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2010, 12:54:39 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
maytonMasterZiv Однако, Душкин обескураживает и разочаровывает с первых строк своими высказываниями о лиспе. Блин, если не знаешь, ну зачем писать ? Язык обозвал LISP-ом, CLOS обозвал диалектом, почему-то у него лисп -- традиционный интерпретатор. А как вообще книга ? Пока не могу сказать. Других книг в бумажном варианте по ФП я не читал ибо на русскоязычной ниве больше ничего не издаётся. С первых строк, захватывает люто и бешено, но от некоторых глав у меня честно говоря плавится мозг и вынужнен откладывать книгу на полку а потом перечитывать главу заново. Душкин также жонглирует неведомой мне терминологией из комбинаторики, e.t.c. и читать местами трудно. Вообще-то я искал более практическое руководство. Но на ozon-e есть новое издание. Что-то вроде "Практика работы на языке Haskell". Думаю для меня это будет более подходящим quick start-ом. журнал функциональное программирование, обзор Алексея Отта http://fprog.ru/2009/issue1/practice-fp-1-print.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2010, 02:32:26 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
Спасибо. Почитаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2010, 16:20:18 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
mayton, а это? автор введение в функциональное программирование John Harrison jrh@cl.cam.ac.uk 3rd December 1997 интересно? Код: plaintext 1. в английском надо перекинуть makefile и пару файлов со стилями из русского каталога ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2010, 06:52:46 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
А в pdf нету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2010, 10:52:00 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
ну, оно ж там строится. я построил английскую и русскую версии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 00:43:47 |
|
||
|
Функциональное программирование
|
|||
|---|---|---|---|
|
#18+
http://agp.hx0.ru/harrison.zip это книга и отдельные главы в картинках. http://agp.hx0.ru/harrison.pdf сама книга автор -rw-rw-rw- 1 user group 1488828 May 1 19:56 harrison.pdf -rw-rw-rw- 1 user group 3269992 May 3 13:46 harrison.zip ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 00:52:51 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1343707]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
182ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 607ms |

| 0 / 0 |
