Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 18.08.04 12:51
Оценка: 114 (11)
Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.

Почему никто не использует функциональные языки


16.10.04 22:23: Перенесено модератором из 'Философия программирования' — AndrewVK
Re: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 18.08.04 17:30
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>Почему никто не использует функциональные языки


В статье много интересных идей... Но! Это типичная рекламная статья от евангелиста данной технологии. Послушать аплогогетов нейронных сетей или ИИ — так совершенно непонятно, почему до сих пор по улицам не ходят андроиды, а мы все не в матрице... Тут применяются обычные рекламные трюки — декларируемые, потенциальные возможности выдаются за действительные, и делается вид — будто ещё чуть-чуть и функционаьные языки сравнятся с императивными, при этом очень существенные негативные факторы практически игнорируются (такие — как необходимость средств разработки и обучения — а это десятки миллиардов $). Обещается небо в алмазах, но как обычно забывают указать — как этого достичь.
В общем сам факт того, что статья написана 6 лет назад в 1998 году, а с тех пор воз и ныне там, если не хуже — показательно и свидетельсвтует само за себя...
Re[2]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 18.08.04 19:18
Оценка: 4 (1) +1 :)
Здравствуйте, AndreyFedotov, Вы писали:

AF>Здравствуйте, Gaperton, Вы писали:


G>>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>>Почему никто не использует функциональные языки


AF> В статье много интересных идей... Но! Это типичная рекламная статья от евангелиста данной технологии. Послушать аплогогетов нейронных сетей или ИИ — так совершенно непонятно, почему до сих пор по улицам не ходят андроиды, а мы все не в матрице... Тут применяются обычные рекламные трюки — декларируемые, потенциальные возможности выдаются за действительные, и делается вид — будто ещё чуть-чуть и функционаьные языки сравнятся с императивными, при этом очень существенные негативные факторы практически игнорируются (такие — как необходимость средств разработки и обучения — а это десятки миллиардов $). Обещается небо в алмазах, но как обычно забывают указать — как этого достичь.

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

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


AF> В общем сам факт того, что статья написана 6 лет назад в 1998 году, а с тех пор воз и ныне там, если не хуже — показательно и свидетельсвтует само за себя...

Если не хуже, говоришь? Откуда такие опасения? Откуда ты знаешь, где воз был и где он сейчас? У тебя есть статистика по количеству применений ФЯ по годам за последние 6 лет? Или ты просто смотришь, стоит-ли соответствующий SDK на твоем компе и у соседа, который на днях его удалил?

Наивно думать, что ситуация может измениться так стремительно — сегодня "никто", завтра — "все".

P.S.: Небольшой комментарий к теме "делается вид — будто ещё чуть-чуть и функционаьные языки сравнятся с императивными".

Фрагменты моей переписки с Eric Newhuis из FutureSource (мои вопросы — его ответы):

> Btw, recently noticed that you're looking for an Erlang developer.
> You using Erlang for feed parsers there in FutureSource, right?
Yes we're using Erlang for some feed parsing and also for other things as
well. Most of the legacy code is C++, however, and so there is still a
majority of parsing in C++.

But Erlang looks better to us every day.

> Interesting, how your management get convinced to use Erlang?
I am management. It takes a while. Start out with small project. Look
for the failures with C++. Solve them with Erlang.


Вот так. Вы все еще кипятите? А мы уже рубим!
Re[3]: Почему никто не использует функциональные языки
От: WFrag США  
Дата: 19.08.04 02:47
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Вот так. Вы все еще кипятите? А мы уже рубим!


Не посоветуешь ли, с чего стоит начать ознакомление с функциональными языками, какой язык стоит посмотреть в первую очередь?
Re[3]: Почему никто не использует функциональные языки
От: Цунцуяби Россия  
Дата: 19.08.04 03:19
Оценка:
G>Вот так. Вы все еще кипятите? А мы уже рубим!

Dear Gaperton.

Дай порубить ! ( Где,что,почем ( i love halyavah ) )

Цунцуяби
Re[3]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 19.08.04 04:55
Оценка: 9 (3) +2
Здравствуйте, Gaperton, Вы писали:

AF>> В статье много интересных идей... Но! Это типичная рекламная статья от евангелиста данной технологии. Послушать аплогогетов нейронных сетей или ИИ — так совершенно непонятно, почему до сих пор по улицам не ходят андроиды, а мы все не в матрице... Тут применяются обычные рекламные трюки — декларируемые, потенциальные возможности выдаются за действительные, и делается вид — будто ещё чуть-чуть и функционаьные языки сравнятся с императивными, при этом очень существенные негативные факторы практически игнорируются (такие — как необходимость средств разработки и обучения — а это десятки миллиардов $). Обещается небо в алмазах, но как обычно забывают указать — как этого достичь.

G>Кажется, ты прочел какую-то другую статью. Ничего из перечисленного там нет.
G>

G>Этот длинный список причин, по которым никто не использует функциональные языки, может выглядеть уныло, но я предпочитаю смотреть на светлую сторону. Люди не отвергают функциональные языки из-за глупости, скорее они отвергают их по целому ряду серьезных причин. Глупость непробиваема — другими проблемами мы можем заняться.

Намёк понятен Чего и Вам желаю... Я прочёл именно эту статью — и прочёл очень внимательно, так как сам интересуюсь функциональными языками. В этой статье хорошо описаны причины того, почему функциональные языки не распространены. Беда в том, что акценты ставятся совершенно иначе, чем их расставил бы человек не заинтересованный. Как обычно и бывает в рекламе.
Все описанные "причины" — показаны мелкими, незначительными и легко преодолимыми. Вот пример:

Задача обучения не является трудноразрешимой. В Software AG нашли, что они могут обучать программистов использованию Natural Expert на однонедельном курсе, который включал ленивые вычисления, полиморфные типы и функции высшего порядка. Как правило, студенты раздражались, когда компилятор неоднократно отвергал программы из за ошибок типизации, но были приятно удивлены, когда их программы наконец проходили контроль типов и работали правильно с первой попытки [8].

Из этого абзаца следует, что типичному функциональному языку (а именно в таком качестве, по тексту приводится Natural Expert) можно научить за неделю. Вы действительно считаете, что за неделю можно сделать готового разрзаботчика, который сможет эффективно выполнять реальную работу на каком либо языке? Однако этот факт спокойно умалчивается.
Кроме того, вот здесь говорится следующее:

Более важно то, что как показывает опыт, хотя эффективность помогает конкурировать с С, она вовсе не требуется для успеха. Tcl/Tk, Perl, и Visual Basic заняли видное положение с интерпретирующими реализациями. Java стал чрезвычайно популярным, имея эффективность гораздо ниже С. В функциональном мире Erlang достиг первых успехов как интерпретируемый язык.

Далее софистика на тему применимости языков и их эффективности. Но почему то в статье нет нигде упоминания очевидного факта — что у каждого из приведённых языков — своя область применения. Иногда она пересекается с областью применения других языков — иногда нет. Там где области применения пересекаются — у каждого языка обычно есть свои сильные стороны (как и слабые). Часто формы рисуют и на C++ и на VB — на последнем это проще, зато первый позволяет создавать монолитное приложение с обработкой GUI и высокопроизводительными вычилсениями в одном флаконе. Но крайне редко C++ или VB применяют там, где применяется Perl или TCL.
А иногда появляются новые языки, которые начинают вытеснять существующие из их областей применения (как это происходит с C#).
То есть язык имеет смысл рассматривать вместе с областью, где его можно эффективно использовать. Вот этого как раз и не делается. При этом упоминается применения функциональных языков в достаточно специфичной области — в телекоммуникациях. (Кстати ещё вопрос — какая часть системы там написана с их использованием).

AF>> В общем сам факт того, что статья написана 6 лет назад в 1998 году, а с тех пор воз и ныне там, если не хуже — показательно и свидетельсвтует само за себя...

G>Если не хуже, говоришь? Откуда такие опасения? Откуда ты знаешь, где воз был и где он сейчас? У тебя есть статистика по количеству применений ФЯ по годам за последние 6 лет? Или ты просто смотришь, стоит-ли соответствующий SDK на твоем компе и у соседа, который на днях его удалил?
А ты стало быть знаешь? Или это только у меня с соседом эти языки ещё не установлены?

G>Наивно думать, что ситуация может измениться так стремительно — сегодня "никто", завтра — "все".

Не знал, что Вы так наивны. Вот именно об этом и речь. Прогресс в функциональных языках есть — но он пока на том уровне, какой соответствует научным исследованиям, а не промышленному применению.

G>P.S.: Небольшой комментарий к теме "делается вид — будто ещё чуть-чуть и функционаьные языки сравнятся с императивными".


G>Фрагменты моей переписки с Eric Newhuis из FutureSource (мои вопросы — его ответы):

G>

>> Btw, recently noticed that you're looking for an Erlang developer.
>> You using Erlang for feed parsers there in FutureSource, right?
G>Yes we're using Erlang for some feed parsing and also for other things as
G>well. Most of the legacy code is C++, however, and so there is still a
G>majority of parsing in C++.

G>But Erlang looks better to us every day.

>> Interesting, how your management get convinced to use Erlang?
G>I am management. It takes a while. Start out with small project. Look
G>for the failures with C++. Solve them with Erlang.


Этот фрагмент ничего не доказывает. Кто то использует язык там где он эффективен. И что это доказывает?

Раньше мы писали Web-сайты на C++ и половина проектов проваливалась. Теперь нам кто то показал HTML и мы с восторгом пишем на нём...

Значит ли это что HTML лучше чем C++ для написания расчётов?

G>Вот так. Вы все еще кипятите? А мы уже рубим!

А мы вообще то давно стиральной машинкой пользуемся.

PS. Я за новые (или старые) функциональные языки. Но я против того, что бы делать из них очередную "панацею". Я за то, что бы дополнить ими традиционные языки, а не пытаться их заменить.
Re: Почему никто не использует функциональные языки
От: Glоbus Украина  
Дата: 19.08.04 08:17
Оценка:
Здравствуйте, Gaperton, Вы писали:

А нельзя ли темному человеку раскинуть, че такое функциональые языки, потому что ранее похоже я заблуждался относительно этого термина. Желательно поподробнее и с примерами.
Удачи тебе, браток!
Re[4]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 10:26
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF> Намёк понятен Чего и Вам желаю... Я прочёл именно эту статью — и прочёл очень внимательно, так как сам интересуюсь функциональными языками. В этой статье хорошо описаны причины того, почему функциональные языки не распространены. Беда в том, что акценты ставятся совершенно иначе, чем их расставил бы человек не заинтересованный. Как обычно и бывает в рекламе.

AF> Все описанные "причины" — показаны мелкими, незначительными и легко преодолимыми. Вот пример:
AF>

AF> Задача обучения не является трудноразрешимой. В Software AG нашли, что они могут обучать программистов использованию Natural Expert на однонедельном курсе, который включал ленивые вычисления, полиморфные типы и функции высшего порядка. Как правило, студенты раздражались, когда компилятор неоднократно отвергал программы из за ошибок типизации, но были приятно удивлены, когда их программы наконец проходили контроль типов и работали правильно с первой попытки [8].

AF> Из этого абзаца следует, что типичному функциональному языку (а именно в таком качестве, по тексту приводится Natural Expert) можно научить за неделю. Вы действительно считаете, что за неделю можно сделать готового разрзаботчика, который сможет эффективно выполнять реальную работу на каком либо языке? Однако этот факт спокойно умалчивается.

Нет конечно, я так не считаю. За неделю можно обучить языку, а не умелому применению этого языка, которое вырабатывается только практикой. Думаете, доктор Вадлер этого не знает? С другой стороны, вы способны за месяц научить кого-нибудь правильному применению С++? Haskell и Elrang будут попроще в изучении. Особенно Erlang, — практика применения языка показывает, что уже через неделю человек (незнакомый с ФЯ) может выполнять полезную работу (под присмотром, естественно), а через месяц способен эффективно выполнять работу в одиночку.

AF> Кроме того, вот здесь говорится следующее:

AF>

AF>Более важно то, что как показывает опыт, хотя эффективность помогает конкурировать с С, она вовсе не требуется для успеха. Tcl/Tk, Perl, и Visual Basic заняли видное положение с интерпретирующими реализациями. Java стал чрезвычайно популярным, имея эффективность гораздо ниже С. В функциональном мире Erlang достиг первых успехов как интерпретируемый язык.

AF> Далее софистика на тему применимости языков и их эффективности.
Поаккуратнее, плз. Не надо Вадлера голословно обвинять в софистике. У вас с ним немного разные весовые категории.

AF> Но почему то в статье нет нигде упоминания очевидного факта — что у каждого из приведённых языков — своя область применения. Иногда она пересекается с областью применения других языков — иногда нет. Там где области применения пересекаются — у каждого языка обычно есть свои сильные стороны (как и слабые). Часто формы рисуют и на C++ и на VB — на последнем это проще, зато первый позволяет создавать монолитное приложение с обработкой GUI и высокопроизводительными вычилсениями в одном флаконе. Но крайне редко C++ или VB применяют там, где применяется Perl или TCL.

AF> А иногда появляются новые языки, которые начинают вытеснять существующие из их областей применения (как это происходит с C#).
AF> То есть язык имеет смысл рассматривать вместе с областью, где его можно эффективно использовать. Вот этого как раз и не делается. При этом упоминается применения функциональных языков в достаточно специфичной области — в телекоммуникациях. (Кстати ещё вопрос — какая часть системы там написана с их использованием).
Очевидные факты на то и очевидны, чтобы их не разжевывать в каждой статье. Тем не менее...

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

...там этот факт освещен.

AF>>> В общем сам факт того, что статья написана 6 лет назад в 1998 году, а с тех пор воз и ныне там, если не хуже — показательно и свидетельсвтует само за себя...

G>>Если не хуже, говоришь? Откуда такие опасения? Откуда ты знаешь, где воз был и где он сейчас? У тебя есть статистика по количеству применений ФЯ по годам за последние 6 лет? Или ты просто смотришь, стоит-ли соответствующий SDK на твоем компе и у соседа, который на днях его удалил?
AF> А ты стало быть знаешь? Или это только у меня с соседом эти языки ещё не установлены?
Я не знаю, поэтому и не фантазирую на тему положения воза, и тем более не делаю из этого никаких выводов.

Но если Вы настаиваете... Во многих европейских вузах ФЯ сейчас применяются в процессе обучения, в некоторых — как первый язык. Подождите, когда эти выпускники пойдут работать, и займут руководящие позиции. Будет как с UNIX. Динамика, на мой взгляд, положительная, хотя и слабая. Но это все косвенные признаки, статистики у меня нет.

G>>Наивно думать, что ситуация может измениться так стремительно — сегодня "никто", завтра — "все".

AF> Не знал, что Вы так наивны.
Но-но, я попрошу!
AF> Вот именно об этом и речь. Прогресс в функциональных языках есть — но он пока на том уровне, какой соответствует научным исследованиям, а не промышленному применению.
Вот это — неправда. Факты — упрямая штука. За эти 6 лет достигнут заметный прогресс именно в области промышленного применения ФЯ. Erlang — зрелая промышленная платформа. Есть куда расти, да. Но уже. Clean тоже весьма неплох с этой точки зрения — там есть все необходимое. И по скорости выполнения программ он рвет Яву. У них есть IDE. Убогий пока, но есть.

AF> Этот фрагмент ничего не доказывает. Кто то использует язык там где он эффективен. И что это доказывает?

Очевидно, он доказывает не то, что бы вы хотели. По моему, я ясно выразился:
G>P.S.: Небольшой комментарий к теме "делается вид — будто ещё чуть-чуть и функционаьные языки сравнятся с императивными".

Yes we're using Erlang for some feed parsing and also for other things as well. Most of the legacy code is C++, however, and so there is still a majority of parsing in C++. But Erlang looks better to us every day... Look for the failures with C++. Solve them with Erlang.


AF>

AF>Раньше мы писали Web-сайты на C++ и половина проектов проваливалась. Теперь нам кто то показал HTML и мы с восторгом пишем на нём...

AF> Значит ли это что HTML лучше чем C++ для написания расчётов?
Не надо мне приписывать такой чепухи. Что за привычка считать собеседника идиотом? Где я такое говорил. Цитату.

G>>Вот так. Вы все еще кипятите? А мы уже рубим!

AF> А мы вообще то давно стиральной машинкой пользуемся.
Хе-хе! Тогда мы идем к вам!!!

AF>PS. Я за новые (или старые) функциональные языки. Но я против того, что бы делать из них очередную "панацею". Я за то, что бы дополнить ими традиционные языки, а не пытаться их заменить.

Отличный лозунг. А я по вашему, за что? За то чтобы сделать из них панацею, и все традиционные языки заменить функциональными? Попробуйте доказать этот бред цитатами из моих писем.
Re[4]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 10:59
Оценка:
Здравствуйте, WFrag, Вы писали:

WF>Здравствуйте, Gaperton, Вы писали:


G>>Вот так. Вы все еще кипятите? А мы уже рубим!


WF>Не посоветуешь ли, с чего стоит начать ознакомление с функциональными языками, какой язык стоит посмотреть в первую очередь?


Haskell. Поймешь его — поймешь все функциональные языки.
www.haskell.org
Re[5]: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 19.08.04 11:02
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, WFrag, Вы писали:


WF>>Здравствуйте, Gaperton, Вы писали:


G>>>Вот так. Вы все еще кипятите? А мы уже рубим!


WF>>Не посоветуешь ли, с чего стоит начать ознакомление с функциональными языками, какой язык стоит посмотреть в первую очередь?


G>Haskell. Поймешь его — поймешь все функциональные языки.

G>www.haskell.org

А нет ли у Вас такого же, но только с .RU?
Re[4]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 11:03
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

G>>Вот так. Вы все еще кипятите? А мы уже рубим!


Ц>Dear Gaperton.


Ц>Дай порубить ! ( Где,что,почем ( i love halyavah ) )

www.erlang.org
Полная халява. Начни с FAQ, чтобы понять, что это и подойдет ли для твоих задач. Язык довольно специален, например, десктопные приложения на нем писать глупо, ИМХО. Хотя это технически возможно, да и не все со мной согласны .
Re: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 19.08.04 11:04
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>Почему никто не использует функциональные языки


Кстати я читал, МС собирается задействовать Haskell в DirectX.
Re[5]: OCaml
От: INTP_mihoshi Россия  
Дата: 19.08.04 11:12
Оценка:
Здравствуйте, Gaperton, Вы писали:

WF>>Не посоветуешь ли, с чего стоит начать ознакомление с функциональными языками, какой язык стоит посмотреть в первую очередь?


G>Haskell. Поймешь его — поймешь все функциональные языки.

G>www.haskell.org

Haskell имху слишком уж функционален Но действительно, это самый "классический" ФЯ.
А для понимания практических возможностей ФЯ лучше посмотреть OCaml. Он удачно сочетает и функциональные, и императивные элементы. Вот на нем, в отличие от Haskell, уже можно писать практически что угодно.

Не советую начинать изучение с Erlang и Clean, т.к. они более заточены под определенные практические задачи и вследствии этого перегружены несвойственными ФЯ "фичами". Erlang, например, ближе к скриптовым языкам.
Re[2]: Почему никто не использует функциональные языки
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.08.04 11:13
Оценка:
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Здравствуйте, Gaperton, Вы писали:


G>>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>>Почему никто не использует функциональные языки


ПЛ>Кстати я читал, МС собирается задействовать Haskell в DirectX.


Можно линк, если он, конечно, есть
Re[5]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 19.08.04 11:31
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Нет конечно, я так не считаю. За неделю можно обучить языку, а не умелому применению этого языка, которое вырабатывается только практикой. Думаете, доктор Вадлер этого не знает? С другой стороны, вы способны за месяц научить кого-нибудь правильному применению С++? Haskell и Elrang будут попроще в изучении. Особенно Erlang, — практика применения языка показывает, что уже через неделю человек (незнакомый с ФЯ) может выполнять полезную работу (под присмотром, естественно), а через месяц способен эффективно выполнять работу в одиночку.

Это верно. Но в статье это приподносится так, как будто подготовка готового специалиста займёт неделю, когда это совсем не так. Ведь там же рассматривается проблема обучения для использования функциональных языков в реальных проектах. Посморти на это глазами менеджера, у которого нет твоего опыта проектирования и программирования.
А в общем то согласен — очень многие языки проще чем C++ и в обучении и в использовании.

AF>> Кроме того, вот здесь говорится следующее:

AF>>

AF>>Более важно то, что как показывает опыт, хотя эффективность помогает конкурировать с С, она вовсе не требуется для успеха. Tcl/Tk, Perl, и Visual Basic заняли видное положение с интерпретирующими реализациями. Java стал чрезвычайно популярным, имея эффективность гораздо ниже С. В функциональном мире Erlang достиг первых успехов как интерпретируемый язык.

AF>> Далее софистика на тему применимости языков и их эффективности.
G>Поаккуратнее, плз. Не надо Вадлера голословно обвинять в софистике. У вас с ним немного разные весовые категории.
При чём здесь весовые категории? По сути можете что-либо сказать или только про весовые категории?
Кроме игры словами в абзаце, из которого приведена цитата, более ничего нет. Это называется софистика.

AF>> То есть язык имеет смысл рассматривать вместе с областью, где его можно эффективно использовать. Вот этого как раз и не делается. При этом упоминается применения функциональных языков в достаточно специфичной области — в телекоммуникациях. (Кстати ещё вопрос — какая часть системы там написана с их использованием).

G>Очевидные факты на то и очевидны, чтобы их не разжевывать в каждой статье. Тем не менее...
G>

G>Некоторые исследователи надеются, что высокоуровневая сущность функциональных языков неотразима сама по себе, но опыт до настоящего времени показывает, что эта надежда неуместна. Вместо этого, опыт показывает, что пользователи потянутся к языку, если он позволит им удобно делать что-то, что иначе трудно достижимо. Подобно другим новым технологиям, функциональные языки должны искать свои убийственные применения.

G>...там этот факт освещен.
Ну это рассуждения в общем и целом и ни о чём конкретно. Причём обясняются самоочевидные факты. И так понятно, что если бы какой то язык, метод или технология — были бы в 100 раз эффективнее, чем то, чем вы пользуетесь сейчас, то вы бы бросив всё постарались как можно быстрее перейти на них. Это самоочевидно и большого ума не требует. А вот что требует большого ума — так это показать — где, что и как следует применить, что бы это оказалось в N раз эффективнее, чем то, что применяется там сейчас. Вот это действительно не тривиально.
Вот если бы он показал — как применяются функцональные языки в том же телекоме — и обяснил — почему они там оказываются гораздо эффективнее — вот это было бы гораздо интереснее.

G>Я не знаю, поэтому и не фантазирую на тему положения воза, и тем более не делаю из этого никаких выводов.

Зато есть интернет и поисковики — поищите, посмотрите. Нейронные сети и те применяются гораздо шире...

G>Но если Вы настаиваете... Во многих европейских вузах ФЯ сейчас применяются в процессе обучения, в некоторых — как первый язык. Подождите, когда эти выпускники пойдут работать, и займут руководящие позиции. Будет как с UNIX. Динамика, на мой взгляд, положительная, хотя и слабая. Но это все косвенные признаки, статистики у меня нет.

Угу. Ещё 30 лет назад в вузах многих учили основам нейроных сетей. А некоторых даже — как основному методу построения ИИ. Ну и где же засилие нейронных сетей?

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

G>Вот это — неправда. Факты — упрямая штука. За эти 6 лет достигнут заметный прогресс именно в области промышленного применения ФЯ. Erlang — зрелая промышленная платформа. Есть куда расти, да. Но уже. Clean тоже весьма неплох с этой точки зрения — там есть все необходимое. И по скорости выполнения программ он рвет Яву. У них есть IDE. Убогий пока, но есть.
Вот именно! Факты упрямая вещь! Прогресс всегда определяется в сравнении. Например какую долю в том же телекоме стали занимать функциональные языки — большую или меньшую?
Я как то наткнулся на статью, где приводился забавный факт: Оказывается, что сейчас арбалетов у нас (Европа, США, Россия) больше, чем их было в 13-14 веках, когда они были основным оружием. Но значит ли это, что арбалеты стали более распространены?
Re[6]: OCaml
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 11:55
Оценка: +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Gaperton, Вы писали:


WF>>>Не посоветуешь ли, с чего стоит начать ознакомление с функциональными языками, какой язык стоит посмотреть в первую очередь?


G>>Haskell. Поймешь его — поймешь все функциональные языки.

G>>www.haskell.org

INT>Haskell имху слишком уж функционален Но действительно, это самый "классический" ФЯ.

INT>А для понимания практических возможностей ФЯ лучше посмотреть OCaml. Он удачно сочетает и функциональные, и императивные элементы. Вот на нем, в отличие от Haskell, уже можно писать практически что угодно.
Это так, но! ИМХО, для целей изучения ФЯ наличие императивных возможностей в языке (как в OCaml) не очень хорошо, так как человека ничего не заставит писать в функциональном стиле. Здесь ведь надо, чтобы "торкнуло". А в OCaml он всегда сможет обойтись императивным стилем.

Второй момент OCaml, что делает его не очень хорошим учебным языком, — там нет ленивых вычислений. А это один из самых мощных механизмов ФЯ, его надо знать обязательно.

Так что высока вероятность, что ознакомившись с OCaml, человек так и не поймет в чем же прелесть ФЯ. Язык как язык.

Я бы советовал такую последовательность. Haskell -> OCaml, Erlang, Clean (на выбор или все). После хаскеля у вас уйдет максимум по 2 дня на каждый из этих языков, и вы будете в состоянии оценить их прелести.

Одно из важнейших достоинств Хаскеля — наличие великолепного Gentle Introduction to Haskell. Таким введением мог бы гордится любой язык.

INT>Не советую начинать изучение с Erlang и Clean, т.к. они более заточены под определенные практические задачи и вследствии этого перегружены несвойственными ФЯ "фичами". Erlang, например, ближе к скриптовым языкам.


Тоже не советую, но по другим причинам. По Clean просто-напросто нет нормальной документации. Учить его не зная Haskell — мазохизм. Clean очень похож на Хаскель, самое серьезное отличие — наличие Uniqueness Typing (это серьезно упрощает ввод-вывод — не надо знать что такое Монады).

Erlang так же как OCaml язык без ленивых вычислений, в добавок там нет "карринга", и нет системы типов (Хиндли/Милнера/Майкрофта) благодаря динамической типизации (хотя благодаря этому он на порядок проще Haskell; если сдадут нервы — смотрите его).
Re[3]: Почему никто не использует функциональные языки
От: Glоbus Украина  
Дата: 19.08.04 11:57
Оценка: 1 (1) -1
Здравствуйте, Gaperton, Вы писали:

G>Вот так. Вы все еще кипятите? А мы уже рубим!


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

C++ Erlang
Sun 166 0
Oracle 150 0
MS 715 0

Я думаю если взять ibm и так далее то тенденция будет примерно такая же — начиная от какого-нить эриксона и заканчивая боингом
О каких ваще возах и о том где они может быть речь — возов нету. Киты капитализма пользуют традиционные императивные языки. Очевидно что за ними будущее. Все остальное — поделки (пардон за резкость изложения ) .
Удачи тебе, браток!
Re[3]: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 19.08.04 12:11
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, Павел Леонов, Вы писали:


ПЛ>>Здравствуйте, Gaperton, Вы писали:


G>>>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>>>Почему никто не использует функциональные языки


ПЛ>>Кстати я читал, МС собирается задействовать Haskell в DirectX.


К>Можно линк, если он, конечно, есть


Здесь есть упоминание, линк на сайт МС похоже устарел, надо копать.
Re[4]: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 19.08.04 12:23
Оценка:
Здравствуйте, Glоbus, Вы писали:

G>Здравствуйте, Gaperton, Вы писали:


G>>Вот так. Вы все еще кипятите? А мы уже рубим!


G>Не знаю честно говоря че вы там рубите...но вот статистика ясно говорит почсему никто не использует функциональные языки. Пробежался тут для интересу по сайтилам с работой и вот некоторый срез вакансий по ключевым словам


Как срез вакансий отвечает на вопрос "почему"?
Re[4]: ФЯ
От: INTP_mihoshi Россия  
Дата: 19.08.04 12:26
Оценка: 1 (1) +3
Здравствуйте, Glоbus, Вы писали:

G>О каких ваще возах и о том где они может быть речь — возов нету. Киты капитализма пользуют традиционные императивные языки. Очевидно что за ними будущее. Все остальное — поделки (пардон за резкость изложения ) .


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

Ну и, разумеется, ФЯ еще недостаточно развиты как языки для профессионального использования. Не хватает нормальных IDE, средств отладки, и самое главное, возможности управления императивной реализации функционального кода. Ибо машины у нас все равно императивные и код в конечном счете тоже генерируется императивный. И программируя на императивном языке мы лучше понимаеми контролируем то, как будет работать конечный код.
Re[5]: ФЯ
От: bkat  
Дата: 19.08.04 12:39
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Glоbus, Вы писали:


G>>О каких ваще возах и о том где они может быть речь — возов нету. Киты капитализма пользуют традиционные императивные языки. Очевидно что за ними будущее. Все остальное — поделки (пардон за резкость изложения ) .


INT>Подумалось, что основная проблема функциональных языков — то, что они слишком мощные


Что значит "слишком мощные"?
Вычислительная мощь у всех нормальных языков в общем-то одинакова.

Мыслить просто надо иначе с функциональными языками.
Есть у меня подозрение, что оба стиля (назовем их декларативный и императивный)
в одном месте почти не уживаются.
Re[4]: Почему никто не использует функциональные языки
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.08.04 12:40
Оценка:
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, Павел Леонов, Вы писали:


ПЛ>>>Здравствуйте, Gaperton, Вы писали:


G>>>>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>>>>Почему никто не использует функциональные языки


ПЛ>>>Кстати я читал, МС собирается задействовать Haskell в DirectX.


К>>Можно линк, если он, конечно, есть


ПЛ>Здесь есть упоминание, линк на сайт МС похоже устарел, надо копать.


здесь есть описание, но уж больно древнее это дело и по ходу мёртвое...
Re[5]: ФЯ
От: Павел Леонов Россия icq: 138726397
Дата: 19.08.04 12:45
Оценка: +2
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Glоbus, Вы писали:


INT>Подумалось, что основная проблема функциональных языков — то, что они слишком мощные Гибкость и компактность кода ограничивается не столько возможностями языка, сколько способностью программиста к абстрактному мышлению. Вследствии этого, программа написанная хорошим программистом, будет гораздо более универсальной, переносимой, компактной, устойчивой etc, но вот поддерживать ее сможет только программист не менее скиллястый


INT>Ну и, разумеется, ФЯ еще недостаточно развиты как языки для профессионального использования. Не хватает нормальных IDE, средств отладки, и самое главное, возможности управления императивной реализации функционального кода. Ибо машины у нас все равно императивные и код в конечном счете тоже генерируется императивный. И программируя на императивном языке мы лучше понимаеми контролируем то, как будет работать конечный код.


Посему мне видится (покрайней мере сейчас) подход, когда можно писать программу на декларативном языке или приближающемуся к этому, а его код трансформировать в обычный императивный исходник. От первого мы имеем качество и скорость разработки, от второго лучшую эксплуатацию (в том числе и мелкую поддержку/переделку). Я думаю, что резкой переходной границы между ними быть не должно, люди не рискнут, тут ведь не только изучение синтаксиса, тут библиотеки и совместимость, вакансии и т.д. и т.п.
Re[6]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 12:54
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF>>> Кроме того, вот здесь говорится следующее:

AF>>>

AF>>>Более важно то, что как показывает опыт, хотя эффективность помогает конкурировать с С, она вовсе не требуется для успеха. Tcl/Tk, Perl, и Visual Basic заняли видное положение с интерпретирующими реализациями. Java стал чрезвычайно популярным, имея эффективность гораздо ниже С. В функциональном мире Erlang достиг первых успехов как интерпретируемый язык.

AF>>> Далее софистика на тему применимости языков и их эффективности.
G>>Поаккуратнее, плз. Не надо Вадлера голословно обвинять в софистике. У вас с ним немного разные весовые категории.
AF> При чём здесь весовые категории? По сути можете что-либо сказать или только про весовые категории?
AF> Кроме игры словами в абзаце, из которого приведена цитата, более ничего нет. Это называется софистика.
Сложно по сути возразить на голословное утверждение "Далее софистика на тему применимости языков и их эффективности.". Разве что опять привести цитату из статьи? А флейм мне разводить лень.

Вадлер готовил доклад на конференции по ФЯ. Там людям не надо ничего разжевывать, они и так знают, где софистика, а где нет.

AF>>> То есть язык имеет смысл рассматривать вместе с областью, где его можно эффективно использовать. Вот этого как раз и не делается. При этом упоминается применения функциональных языков в достаточно специфичной области — в телекоммуникациях. (Кстати ещё вопрос — какая часть системы там написана с их использованием).

G>>Очевидные факты на то и очевидны, чтобы их не разжевывать в каждой статье. Тем не менее...
G>>

G>>Некоторые исследователи надеются, что высокоуровневая сущность функциональных языков неотразима сама по себе, но опыт до настоящего времени показывает, что эта надежда неуместна. Вместо этого, опыт показывает, что пользователи потянутся к языку, если он позволит им удобно делать что-то, что иначе трудно достижимо. Подобно другим новым технологиям, функциональные языки должны искать свои убийственные применения.

G>>...там этот факт освещен.
AF> Ну это рассуждения в общем и целом и ни о чём конкретно. Причём обясняются самоочевидные факты. И так понятно, что если бы какой то язык, метод или технология — были бы в 100 раз эффективнее, чем то, чем вы пользуетесь сейчас, то вы бы бросив всё постарались как можно быстрее перейти на них. Это самоочевидно и большого ума не требует. А вот что требует большого ума — так это показать — где, что и как следует применить, что бы это оказалось в N раз эффективнее, чем то, что применяется там сейчас. Вот это действительно не тривиально.
У доклада ИМХО четко обозначена тема — "причины, почему никто не использует функциональные языки". Заметь, причины, а не "пути решения".
AF> Вот если бы он показал — как применяются функцональные языки в том же телекоме — и обяснил — почему они там оказываются гораздо эффективнее — вот это было бы гораздо интереснее.
Для этого г-н Вадлер привел список литературы в конце. Скопировать сюда, как обычно? Вообще, он предполагает, что читатель немного в курсе последних событий в мире ФП. Это доклад для специалистов, а не рекламная статья. Вы же хотите все и сразу. Нивапрос. Для вас постарался г-н Ульф Вигер http://www.erlang.se/publications/Ulf_Wiger.pdf

А также
A Comparison between Erlang and C++ for Implementation of Telecom Applications.
Tomas Aronsson and Johan Grafström.
LiTH/IDA, 1995.
http://www.erlang.se/publications/xjobb/c++-vs-erlang.ps.gz

И еще
http://www.erlang.org/cslab/publications/bjarnelic.pdf

G>>Я не знаю, поэтому и не фантазирую на тему положения воза, и тем более не делаю из этого никаких выводов.

AF> Зато есть интернет и поисковики — поищите, посмотрите. Нейронные сети и те применяются гораздо шире...
Искал и смотрел. И рекомендую сделать это вам — в противном случае это вы приводили бы мне ссылки, а не наоборот А что до нейросетей, то эту тему мы уже плотно обсудили в "алгоритмах". Никто так и не привел вменяемого примера промышленного применения, с четким объяснением почему это выгодно, ни удовлетворительного математического обоснования. А AXD swith это где-то 12-17% рынка, если мне не изменяет память. Так что ровнять не надо.

G>>Но если Вы настаиваете... Во многих европейских вузах ФЯ сейчас применяются в процессе обучения, в некоторых — как первый язык. Подождите, когда эти выпускники пойдут работать, и займут руководящие позиции. Будет как с UNIX. Динамика, на мой взгляд, положительная, хотя и слабая. Но это все косвенные признаки, статистики у меня нет.

AF> Угу. Ещё 30 лет назад в вузах многих учили основам нейроных сетей. А некоторых даже — как основному методу построения ИИ. Ну и где же засилие нейронных сетей?
Не надо ровнять. Ничего общего с нейросетями.

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

G>>Вот это — неправда. Факты — упрямая штука. За эти 6 лет достигнут заметный прогресс именно в области промышленного применения ФЯ. Erlang — зрелая промышленная платформа. Есть куда расти, да. Но уже. Clean тоже весьма неплох с этой точки зрения — там есть все необходимое. И по скорости выполнения программ он рвет Яву. У них есть IDE. Убогий пока, но есть.
AF> Вот именно! Факты упрямая вещь! Прогресс всегда определяется в сравнении. Например какую долю в том же телекоме стали занимать функциональные языки — большую или меньшую?
AF> Я как то наткнулся на статью, где приводился забавный факт: Оказывается, что сейчас арбалетов у нас (Европа, США, Россия) больше, чем их было в 13-14 веках, когда они были основным оружием. Но значит ли это, что арбалеты стали более распространены?

Спокойно, Андрей. Речь не о распространенности языка. Не стану я такую чепуху утверждать. А вот доля рынка продуктов на Erlang весьма заметна (например GPRS solution — почти 50 процентов). К сожалению не смог найти документ, где была сводная таблица, но эта инфа должна быть в приведенных мной ссылках. Но ничего, найду — пришлю. Не подменяй тему. Вот она:
AF>>Прогресс в функциональных языках есть — но он пока на том уровне, какой соответствует научным исследованиям, а не промышленному применению.
G>Вот это — неправда.
Re[4]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 13:19
Оценка:
Здравствуйте, Glоbus, Вы писали:

G>>Вот так. Вы все еще кипятите? А мы уже рубим!


G>Не знаю честно говоря че вы там рубите...но вот статистика ясно говорит почсему никто не использует функциональные языки. Пробежался тут для интересу по сайтилам с работой и вот некоторый срез вакансий по ключевым словам


G> C++ Erlang

G>Sun 166 0
G>Oracle 150 0
G>MS 715 0

А нам пофиг на вашу статистику, нам главное чтобы работало хорошо, и стоило дешевле.

G>Я думаю если взять ibm и так далее то тенденция будет примерно такая же — начиная от какого-нить эриксона и заканчивая боингом

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

G>О каких ваще возах и о том где они может быть речь — возов нету. Киты капитализма пользуют традиционные императивные языки. Очевидно что за ними будущее. Все остальное — поделки (пардон за резкость изложения ) .


Будущее не за теми вещами, которые сейчас выпускает МS, IBM, или SUN. Это, позволю себе заметить, настоящее. Вспомни — 1981 год. IBM выпускает IBM PC, не озаботясь даже защитой авторских прав — киты капитализма используют мэйнфреймы. Очевидно что за ними будущее. Все остальное (например, компьютеры Apple) — гаражные поделки Даже заказ на разработку ДОСа дают по знакомству мальчику Биллу — все равно фигня, какая разница-то? А паренек заработает себе на пиццу.

Ох как мне понравилась фраза uw. "Не знаю, нужно-ли тебе входить в мир ФП, но смотри, как бы мир ФП не вошел в тебя" .
Re[6]: ФЯ
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 13:22
Оценка:
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Здравствуйте, INTP_mihoshi, Вы писали:


INT>>Здравствуйте, Glоbus, Вы писали:


INT>>Подумалось, что основная проблема функциональных языков — то, что они слишком мощные Гибкость и компактность кода ограничивается не столько возможностями языка, сколько способностью программиста к абстрактному мышлению. Вследствии этого, программа написанная хорошим программистом, будет гораздо более универсальной, переносимой, компактной, устойчивой etc, но вот поддерживать ее сможет только программист не менее скиллястый


INT>>Ну и, разумеется, ФЯ еще недостаточно развиты как языки для профессионального использования. Не хватает нормальных IDE, средств отладки, и самое главное, возможности управления императивной реализации функционального кода. Ибо машины у нас все равно императивные и код в конечном счете тоже генерируется императивный. И программируя на императивном языке мы лучше понимаеми контролируем то, как будет работать конечный код.


ПЛ>Посему мне видится (покрайней мере сейчас) подход, когда можно писать программу на декларативном языке или приближающемуся к этому, а его код трансформировать в обычный императивный исходник. От первого мы имеем качество и скорость разработки, от второго лучшую эксплуатацию (в том числе и мелкую поддержку/переделку). Я думаю, что резкой переходной границы между ними быть не должно, люди не рискнут, тут ведь не только изучение синтаксиса, тут библиотеки и совместимость, вакансии и т.д. и т.п.


OCaml — то, что ты хочешь. Код трансформировать не надо — есть настроение/желание — пиши императивно, хочешь функционально, а хочешь — в перемешку. То, что доктор прописал.
Re[3]: Почему никто не использует функциональные языки
От: fddima  
Дата: 19.08.04 13:45
Оценка: 2 (2) -1
Здравствуйте, Gaperton, Вы писали:

G>Кажется, ты прочел какую-то другую статью. Ничего из перечисленного там нет.

Я ее сразу проглядел, и вчера не стал даже постить. Скучно.
Возьми лисп — функциональный? Обработай на нем список без рекурсии пожалуйста... и после этого можно будет говорить о какой-либо эффективности. Приведенный мною примерчик — это вывод который делают практически все студенты реализовав одно и то же задание на "3" строчки на си и на лиспе При чем на лиспе это все выглядит гораздо неуклюже.
И потом я вообще не вижу разницы... я под подобным языком вижу исполняющее нутро которое по сути является императивным, но так устроено, что на нем нельзя писать императивным спсобом Короче сплошные ограничения Я конечно понимаю... закостенелось мышления, но все таки...
... << RSDN@Home 1.1.4 beta 2 rev. 164>>
Re[7]: ФЯ
От: Павел Леонов Россия icq: 138726397
Дата: 19.08.04 14:22
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>OCaml — то, что ты хочешь. Код трансформировать не надо — есть настроение/желание — пиши императивно, хочешь функционально, а хочешь — в перемешку. То, что доктор прописал.


Тут нужен хитгрый доктор Великий на мой взгляд товарищь Гегель сказал "Мысль без пути ведущего к ней — есть труп", это относиться ко многим аспектам ИТ. В данном случае, сразу выставить даже Ocaml, не говоря о Haskell не получиться, люди не примут. Посмотри, много из тех, кто подсел на С, перейдя на С++ принял идею шаблонов? Нужен последовательный, эволюционный переход, чтоб каждая косточка ФЯ выглядела смачнее прежнего императивного подхода.

Согласен, это долго и муторно, но иначе никак. Ситуацию осложняет еще и тот стереотип, что от императива к декларативу нет перехода и что они не могут дружить.

PS. Да что там ФЯ, помнишь как народ картошку боялся кушать
Re[4]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 14:32
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Gaperton, Вы писали:


G>>Кажется, ты прочел какую-то другую статью. Ничего из перечисленного там нет.

F> Я ее сразу проглядел, и вчера не стал даже постить. Скучно.
F> Возьми лисп — функциональный? Обработай на нем список без рекурсии пожалуйста... и после этого можно будет говорить о какой-либо эффективности. Приведенный мною примерчик — это вывод который делают практически все студенты реализовав одно и то же задание на "3" строчки на си и на лиспе При чем на лиспе это все выглядит гораздо неуклюже.

Рекурсия в современных ФЯ не проигрывает в эффективности итерации. Весь фокус в оптимизации tail recursion (пример на Erlang — считаем кол-во элементов списка).

count( L ) -> count( L, 0 ).

count( [ _ | T ], N ) -> count( T, N + 1 );
count( [], N ) -> N.


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

Это теория, а вот в этом документе содержатся результаты performance-тестов Apach против Yaws (написан целиком на Erlang). Сюрприз!
http://www.guug.de/veranstaltungen/ffg2003/papers/ffg2003-armstrong.pdf

Что до вопроса "нафик это надо, цыклы гораздо круче" — то это совсем отдельная тема. Есть ряд соображений, найду ссылки — пришлю.
Re[4]: Почему никто не использует функциональные языки
От: serg_mo  
Дата: 19.08.04 14:36
Оценка:
Здравствуйте, Glоbus, Вы писали:

G>Не знаю честно говоря че вы там рубите...но вот статистика ясно говорит почсему никто не использует функциональные языки. Пробежался тут для интересу по сайтилам с работой и вот некоторый срез вакансий по ключевым словам


G> C++ Erlang

G>Sun 166 0
G>Oracle 150 0
G>MS 715 0

Т. е. что, Вы средства разработки для своих проектов выбираете исключительно исходя из количества вакансий? Ну-ну...
... << RSDN@Home 1.1.3 stable >>
Re[5]: Почему никто не использует функциональные языки
От: fddima  
Дата: 19.08.04 14:50
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>вторая функция не будет выделять память на стеке, потому что на выходе из рекурсии не делается никакой работы. Рекурсия будет преобразована в итерацию.

Мммммм... вышеприведенным согласен, такое возможно.

Хотя не совсем пока понимаю механику... этоти два листинга (на лиспе) ну если допустим он был бы написан на Erlang — тоже смогу быть свернуты (или развернуты) в итерационный цикл? (просто любопытно — я не знаю).

    ;; cos(pi*x/4)-sin(pi*x/4)
(defun c0(x)
    (* 3 x)
)

(defun next_c
    (lambda (n cn)
        (* cn (/ (- 1 (* 2 n)) (+ 1 (* 2 n))))
    )
)

(defun next_y(yn cnp1)
    (* yn (+ 1 cnp1))
)

(defun body_cospx4_sinpx4(n yn cnp1 eps)
    (if (< (abs (- (next_y yn cnp1) yn)) eps)
        (next_y yn cnp1)
        (body_cospx4_sinpx4 (+ n 1) (next_y yn cnp1) (next_c (+ n 1) cnp1) eps)
    )
)

(defun cospx4_sinpx4(x eps)
    (body_cospx4_sinpx4 0 1 (next_c 1 (c0 x)) eps)
)


(defun _delete_even(x)
    (if (null x)
        nil
        (cons (car x) (_delete_even (cddr x)))
    )
)

(defun delete_odd(x)
    (if (null x)
        nil
        (if (cdr x)
            (_delete_even (cdr x))
            '(nil)
        )
    )
)


?

G>Это теория, а вот в этом документе содержатся результаты performance-тестов Apach против Yaws (написан целиком на Erlang). Сюрприз!

G>http://www.guug.de/veranstaltungen/ffg2003/papers/ffg2003-armstrong.pdf
Забавно. Хотя подробно не рассматривал...
Тогда вопрос другого характера.
Подходит ли Erlang для написания десктопных приложений и описания бизнеслогики?

G>Что до вопроса "нафик это надо, цыклы гораздо круче" — то это совсем отдельная тема. Есть ряд соображений, найду ссылки — пришлю.

Ну насчет "нафик это надо, цыклы гораздо круче" я не столь категоричен, возможно есть вещи которые и удобно (кому-то ) делать в таком стиле... но видимо не мне... А ссылку если найдешь давай — интересно
... << RSDN@Home 1.1.4 beta 2 rev. 164>>
Re[7]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 19.08.04 14:51
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Вадлер готовил доклад на конференции по ФЯ. Там людям не надо ничего разжевывать, они и так знают, где софистика, а где нет.

Тогда тем более смешно говорить людям с ТАКОЙ квалификацией, что используется не только C++ но и TCL и что бывают медленные языки, которые распространены больше, чем более быстрые...

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

G>Для этого г-н Вадлер привел список литературы в конце. Скопировать сюда, как обычно? Вообще, он предполагает, что читатель немного в курсе последних событий в мире ФП. Это доклад для специалистов, а не рекламная статья. Вы же хотите все и сразу. Нивапрос. Для вас постарался г-н Ульф Вигер http://www.erlang.se/publications/Ulf_Wiger.pdf
Спасибо за ссылки. Но сути дела это не меняет.

G>А также

G>A Comparison between Erlang and C++ for Implementation of Telecom Applications.
G>Tomas Aronsson and Johan Grafström.
G>LiTH/IDA, 1995.
G>http://www.erlang.se/publications/xjobb/c++-vs-erlang.ps.gz

G>И еще

G>http://www.erlang.org/cslab/publications/bjarnelic.pdf

G>>>Я не знаю, поэтому и не фантазирую на тему положения воза, и тем более не делаю из этого никаких выводов.

AF>> Зато есть интернет и поисковики — поищите, посмотрите. Нейронные сети и те применяются гораздо шире...
G>Искал и смотрел. И рекомендую сделать это вам — в противном случае это вы приводили бы мне ссылки, а не наоборот А что до нейросетей, то эту тему мы уже плотно обсудили в "алгоритмах". Никто так и не привел вменяемого примера промышленного применения, с четким объяснением почему это выгодно, ни удовлетворительного математического обоснования. А AXD swith это где-то 12-17% рынка, если мне не изменяет память. Так что ровнять не надо.
Про нейросети — вы слегка приврали. Практически любая комерческая программа распознавания текста испольует нейросетевые алгоритмы. А это и есть промышленное применение. Другое дело — что она использует не только НС, но ведь и софт коммуникационное оборудование не на 100% состоит из программ на функциональных языках.

G>>>Но если Вы настаиваете... Во многих европейских вузах ФЯ сейчас применяются в процессе обучения, в некоторых — как первый язык. Подождите, когда эти выпускники пойдут работать, и займут руководящие позиции. Будет как с UNIX. Динамика, на мой взгляд, положительная, хотя и слабая. Но это все косвенные признаки, статистики у меня нет.

AF>> Угу. Ещё 30 лет назад в вузах многих учили основам нейроных сетей. А некоторых даже — как основному методу построения ИИ. Ну и где же засилие нейронных сетей?
G>Не надо ровнять. Ничего общего с нейросетями.
Это всего лишь Ваша точка зрения. А я как раз вижу очень много общего. Хотя бы то, что ФЯ, ИЯ и НС начали развиваться примерно в одно и тоже время — только вот ИЯ ушли очень далеко вперёд — а ФЯ и НС — применяются весьма ограниченно, хотя в некоторых областях и очень полезны.

G>Спокойно, Андрей. Речь не о распространенности языка. Не стану я такую чепуху утверждать. А вот доля рынка продуктов на Erlang весьма заметна (например GPRS solution — почти 50 процентов). К сожалению не смог найти документ, где была сводная таблица, но эта инфа должна быть в приведенных мной ссылках. Но ничего, найду — пришлю. Не подменяй тему. Вот она:

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

Вы кажется меня не поняли. Так же как и с арбалетами. Да, ФЯ стали гораздо лучше по сравнению с 60-ми да и думаю по сравнению с 1998 (как современные арбалеты лучше, чем те что были в 14 веке). И я прекрасно знаю, что есть области, где они промышленно применялсь и в 1998. А вот чего не вижу — так это куда они распростарнились с этого времени. Или что бы они распространились значительно в этих областях (по сравнению с тем, что было в 1998 году). Или — что бы позволили достичь чего то нового (чего без них не было). А без этого — говорить о прогрессе в языках — ошибочно.
Кроме того, факт, что что-либо применяется промышленно — ещё не говорит об этом как о промышленной технологии. Можно говорить лишь о успешных или неуспешных попытках использования новой технологии в промышленности. Часто бывало, когда, несмотря на вроде бы успешное применение технологии, от неё тем не менее отказывались. Вот потому я и говорю — что применение этих языков пока лабораторное. В том же смысле, в каком г-н Вадлер говорил о том что "никто" не испольует ФЯ.
Re[6]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 17:19
Оценка:
Здравствуйте, fddima, Вы писали:

F> Хотя не совсем пока понимаю механику... этоти два листинга (на лиспе) ну если допустим он был бы написан на Erlang — тоже смогу быть свернуты (или развернуты) в итерационный цикл? (просто любопытно — я не знаю).


Не уверен, я не очень хорошо знаком с лиспом, но...
F>
F>    ;; cos(pi*x/4)-sin(pi*x/4)
F>(defun c0(x)
F>    (* 3 x)
F>)

F>(defun next_c
F>    (lambda (n cn)
F>        (* cn (/ (- 1 (* 2 n)) (+ 1 (* 2 n))))
F>    )
F>)

F>(defun next_y(yn cnp1)
F>    (* yn (+ 1 cnp1))
F>)

F>(defun body_cospx4_sinpx4(n yn cnp1 eps)
F>    (if (< (abs (- (next_y yn cnp1) yn)) eps)
F>        (next_y yn cnp1)
F>        (body_cospx4_sinpx4 (+ n 1) (next_y yn cnp1) (next_c (+ n 1) cnp1) eps)
F>    )
F>)
Это tail-recursive функция

F>(defun cospx4_sinpx4(x eps)
F>    (body_cospx4_sinpx4 0 1 (next_c 1 (c0 x)) eps)
F>)
Это тоже tail-recursive функцияF>


F>
F>(defun _delete_even(x)
F>    (if (null x)
F>        nil
F>        (cons (car x) (_delete_even (cddr x)))
F>    )
F>)
А это нет. Здесь на возврате из рекурсии объединяются списки (выполняется cons)

F>(defun delete_odd(x)
F>    (if (null x)
F>        nil
F>        (if (cdr x)
F>            (_delete_even (cdr x))
F>            '(nil)
F>        )
F>    )
F>)
F>


F> ?

Вообще, tail-recursion не всегда может быть простым образом преобразована в цикл. Это чаще реализуется как специальный тип вызова, который обычно поддерживаться системой выполнения. Допустим у нас две функции, которые вызывают друг друга и сами себя (!) рекурсивно, в зависимости от условий. При этом одна из них tail-recursive, а другая нет. Не так просто преобразовать в цикл, правда? Но наверно можно, если подумать (использовать goto для локального вызова, удалить фрейм стека перед внешним вызовом, поправить адрес возврата).

F> Тогда вопрос другого характера.

F> Подходит ли Erlang для написания десктопных приложений и описания бизнеслогики?
Десктопные приложения — технически можно, но я бы предпочел какой-нибудь .net или Java. Бизнес-логика — все зависит от характера этой логики. Не знаю.

Он отлично подходит для написания отказоустойчивых распределенных приложений, где требуется время отклика реального времени, это доказано практикой. Он великолепно подходит для задач телекома. Сейчас народ в экспериментальном порядке пробует его воткнуть повсюду, с переменным успехом. Вот, взгляни например на Wings3D — вроде как, Erlang для таких задач совсем не подходит, ИМХО. Но парни считают иначе, и видать не спроста. Вобщем, будем дожидаться анализа результатов.

G>>Что до вопроса "нафик это надо, цыклы гораздо круче" — то это совсем отдельная тема. Есть ряд соображений, найду ссылки — пришлю.

F> Ну насчет "нафик это надо, цыклы гораздо круче" я не столь категоричен, возможно есть вещи которые и удобно (кому-то ) делать в таком стиле... но видимо не мне... А ссылку если найдешь давай — интересно
Вот!
http://www.md.chalmers.se/~rjmh/Papers/whyfp.pdf
Re: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.08.04 18:04
Оценка: 1 (1) +2 -1
Здравствуйте, Gaperton, Вы писали:

G>Почему никто не использует функциональные языки


Со всем согласен. Вот только автор видмо решил, что все описанные проблемы должен решать кто-то другой, а он будет излагать правильные мысли.

Мне кажется, что единственный реальный шанс выйти в массы для компонентных языков — это быть встроенными в какой-нибудь императивный язык. Например, в R#.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.08.04 18:04
Оценка:
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Посему мне видится (покрайней мере сейчас) подход, когда можно писать программу на декларативном языке или приближающемуся к этому, а его код трансформировать в обычный императивный исходник. От первого мы имеем качество и скорость разработки, от второго лучшую эксплуатацию (в том числе и мелкую поддержку/переделку). Я думаю, что резкой переходной границы между ними быть не должно, люди не рискнут, тут ведь не только изучение синтаксиса, тут библиотеки и совместимость, вакансии и т.д. и т.п.


ПральнА! А что это значит? Значит все дружно доводим R# до рабочего состояния.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.08.04 18:04
Оценка: 15 (2)
Здравствуйте, Gaperton, Вы писали:

А нельзя цитировать только то на что отвечашь?

G>OCaml — то, что ты хочешь. Код трансформировать не надо — есть настроение/желание — пиши императивно, хочешь функционально, а хочешь — в перемешку. То, что доктор прописал.


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

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

Возьми к примеру BNF/EBNF натацию и сравни ее с описанием парсера на функциональном языке. BNF/EBNF намного чище и понятнее. Посему более практично использовать генераторы парсеров которые читают BNF/EBNF и выдают эффективный императивный код, нежели пытаться создать программу на функциональном языке. А ведь рекурсивный разбор — это как раз та область где ФЯ чувствуют себя как рыба в воде.

Имея удобный и простой в использовании механизм трансформации можно создать даже генератор преобразующий функциональные конструкции в императивные. Таким образом язык основанный на трансформации позволяет превратить себя в фукнционльный язык. Причем мы не будем завязаны исключительно на функциональный подход, а сможем выбирать наиболее удбный подход для конкретного случая.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: ФЯ
От: Gaperton http://gaperton.livejournal.com
Дата: 19.08.04 18:49
Оценка:
Здравствуйте, VladD2, Вы писали:

G>>OCaml — то, что ты хочешь. Код трансформировать не надо — есть настроение/желание — пиши императивно, хочешь функционально, а хочешь — в перемешку. То, что доктор прописал.

VD>Тут ты не прав. Функциональные языки не дают сами по себе приемуществ. Просто они ближе к идеи декларативности. Причем качественной декларативности в них добиться не удается. Причем именно из-за того, что ни заточены на функциональную запись.
Да я уже привык, что как только ты пишешь — то я сразу не прав . Правда, как и всегда, сложно понять, в чем? В том, что OCaml — это не то, что хочет Павел? Это, пардон, ему решать, а не тебе и не мне.

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

Да ради бога, я не против.

VD>Возьми к примеру BNF/EBNF натацию и сравни ее с описанием парсера на функциональном языке. BNF/EBNF намного чище и понятнее.

Тут ты не прав. Про комбинаторные монадные парсеры слыхал? Почитай про них. Код парсера будет выглядеть если не один в один как BNF/EBNF, то очень близко .

Кстати, отчего ты не предлагаешь посмотреть код автомата, который генерится для С#?

VD>Посему более практично использовать генераторы парсеров которые читают BNF/EBNF и выдают эффективный императивный код, нежели пытаться создать программу на функциональном языке. А ведь рекурсивный разбор — это как раз та область где ФЯ чувствуют себя как рыба в воде.

Да ради бога. Или так. Или генерировать эффективный парсер на функциональном языке, например на OCaml или Clean. Или императивную на OCaml — как душе угодно. Хочешь померятся скоростью с OCaml? А что практичнее — каждый решает для себя сам. Ты я вижу — решил.

VD>Имея удобный и простой в использовании механизм трансформации можно создать даже генератор преобразующий функциональные конструкции в императивные. Таким образом язык основанный на трансформации позволяет превратить себя в фукнционльный язык. Причем мы не будем завязаны исключительно на функциональный подход, а сможем выбирать наиболее удбный подход для конкретного случая.


Попытка не пытка — зачем дело встало? Попробуй реализовать функции высокого порядка, карринг, lazy evaluation, lazy data structures, и list comprehensions. Очень интересна также будет реализация алгебраических типов. Обеспечь нам прозрачность по ссылкам. Все то, к чему мы привыкли в функциональных языках. И вот тогда мы дружно все перейдем на твой R#.

А вообще, кое-кто уже давно наслаждаются parse transform, встроеным в Erlang .
Re[9]: ФЯ
От: Larm Украина  
Дата: 20.08.04 07:26
Оценка: -1
Здравствуйте, Gaperton, Вы писали:

G>Попытка не пытка — зачем дело встало? Попробуй реализовать функции высокого порядка, карринг, lazy evaluation, lazy data structures, и list comprehensions. Очень интересна также будет реализация алгебраических типов. Обеспечь нам прозрачность по ссылкам. Все то, к чему мы привыкли в функциональных языках.


Это похоже на завывания плюсовиков по поводу того, что в шарпе нельзя делать некоторые гадости, к которым они привыкли . Давайте отталкиваться от задачи, а не от конкретного решения, ладно? Просто те же задачи решаются другими средствами. Без всяких там lazy evaluations и прочих. Подход другой.
The God who walks is among us...
Re[5]: Почему никто не использует функциональные языки
От: Larm Украина  
Дата: 20.08.04 07:32
Оценка: :)
Здравствуйте, serg_mo, Вы писали:

_>Т. е. что, Вы средства разработки для своих проектов выбираете исключительно исходя из количества вакансий? Ну-ну...


Просто найти грамотного специалиста по распространенной технологии гораздо проще, а любителей всякой экзотики типа ФЯ еще поискать надо. Да и малораспространены они, что негативно влияет на имидж языков — реальных проектов на них нифига не написано. Какой вменяемый менеджер поведется на горящие глаза кандидата, который ему расказывает про прелести ФЯ? На фразы, что это быстрее, эффективнее и прочая, прочая? Правильно, никакой. Факты реального успешного применения нужны. Их нет.
The God who walks is among us...
Re[10]: ФЯ
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 08:09
Оценка: :)
Здравствуйте, Larm, Вы писали:

L>Здравствуйте, Gaperton, Вы писали:


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

Что за быдляцкие манеры.

L>Давайте отталкиваться от задачи, а не от конкретного решения, ладно? Просто те же задачи решаются другими средствами. Без всяких там lazy evaluations и прочих. Подход другой.


Решай свои задачи как хочешь. Только давай ты не будешь, не зная что такое lazy evaluation и прочее, указывать мне, что я должен без этого обойтись, и что так будет гораздо круче, ладно? Ваш R# никто не использует не потому, что люди глупы, а по ряду серьезных причин.
Re[6]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 09:07
Оценка:
Здравствуйте, Larm, Вы писали:

L>Здравствуйте, serg_mo, Вы писали:


_>>Т. е. что, Вы средства разработки для своих проектов выбираете исключительно исходя из количества вакансий? Ну-ну...


L>Просто найти грамотного специалиста по распространенной технологии гораздо проще, а любителей всякой экзотики типа ФЯ еще поискать надо. Да и малораспространены они, что негативно влияет на имидж языков — реальных проектов на них нифига не написано. Какой вменяемый менеджер поведется на горящие глаза кандидата, который ему расказывает про прелести ФЯ? На фразы, что это быстрее, эффективнее и прочая, прочая? Правильно, никакой. Факты реального успешного применения нужны. Их нет.


Правильнее (и честнее) сказать, что ты их не знаешь.
Ты их не знаешь, [а так как ты видимо думаешь, что знаешь все,] следовательно их нет .

Не самая выгодная позиция, уважаемый. С таким подходом можно больно фейсом об тейбл стукнуться, были бы желающие помочь. Сразу предупреждаю — по причине лени у меня такого желания нет. Тем более, что уже в этой ветке фактов приведено достаточно.
Re[5]: Почему никто не использует функциональные языки
От: Glоbus Украина  
Дата: 20.08.04 09:18
Оценка:
Здравствуйте, Павел Леонов, Вы писали:


ПЛ>Как срез вакансий отвечает на вопрос "почему"?


Я думаю на данном временном интервале связь следующая: по каким-то, не зависящим от нас с вами, товарищ, историческим причинам ФЯ на прижились, ну или опять же — "случайно" получилось, что в своей масса ИТ-индустрия соринтировалась на императивные языки. Теперь же, когда встает вопрос — чем пользоваться начинающие товарищи смотрят на то, чем пользуется киты буржуализма и видят что там фя нет. Единственный вопрос, который остается — почему сложилось так изначально что фя не прижились у владельцкев заводов газет пароходов. Очевидно есть какой-то изъян.
Удачи тебе, браток!
Re: Почему никто не использует функциональные языки
От: Цунцуяби Россия  
Дата: 20.08.04 09:20
Оценка: +1
Что-то Gapertona сильно бьют
в этой ветке

Вроде используют ФЯ :
SQL, например, чем не ФЯ. Специализированный малость.
Re[11]: ФЯ
От: WolfHound  
Дата: 20.08.04 09:43
Оценка:
Здравствуйте, Gaperton, Вы писали:

G> Ваш R# никто не использует не потому, что люди глупы, а по ряду серьезных причин.

Его ни кто не использует по тому что его еще не реализовали
... << RSDN@Home 1.1.4 rev. 142 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 20.08.04 09:50
Оценка: 4 (1)
Здравствуйте, Glоbus, Вы писали:

G>Я думаю на данном временном интервале связь следующая: по каким-то, не зависящим от нас с вами, товарищ, историческим причинам ФЯ на прижились, ну или опять же — "случайно" получилось, что в своей масса ИТ-индустрия соринтировалась на императивные языки. Теперь же, когда встает вопрос — чем пользоваться начинающие товарищи смотрят на то, чем пользуется киты буржуализма и видят что там фя нет. Единственный вопрос, который остается — почему сложилось так изначально что фя не прижились у владельцкев заводов газет пароходов. Очевидно есть какой-то изъян.

Скорее масса изянов. Например то, как реализуются простейшие операции вроде перебора параметров в списке. И один из самых очевидных — в императивном языке видно — что, как и в какой последовательности делается. А вот в функциональном языке — это совершенно не очевидно. Есть конечно применения — когда это плюс — но гораздо чаще это большой минус.
Re[10]: ФЯ
От: serg_mo  
Дата: 20.08.04 09:57
Оценка: +1
Здравствуйте, Larm, Вы писали:

L>Здравствуйте, Gaperton, Вы писали:


L>Это похоже на завывания плюсовиков по поводу того, что в шарпе нельзя делать некоторые гадости, к которым они привыкли . Давайте отталкиваться от задачи, а не от конкретного решения, ладно? Просто те же задачи решаются другими средствами. Без всяких там lazy evaluations и прочих. Подход другой.


На самом деле, любую задачу можно решить разными средствами, разными подходами и т. д.
Вопрос в том, какой подход/средство является наиболее эффективным (для конкретной задачи).

У нас же получается, что программист, однажды раз и навсегда выбрав язык, начинает применять его во всех своих проектах. Даже не пытаясь узнать, что, возможно, для данного конкретного проекта более эффективным является другой подход/язык/средство разработки.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 20.08.04 10:08
Оценка:
Здравствуйте, Larm, Вы писали:

L>Здравствуйте, serg_mo, Вы писали:


_>>Т. е. что, Вы средства разработки для своих проектов выбираете исключительно исходя из количества вакансий? Ну-ну...


L>Просто найти грамотного специалиста по распространенной технологии гораздо проще, а любителей всякой экзотики типа ФЯ еще поискать надо. Да и малораспространены они, что негативно влияет на имидж языков — реальных проектов на них нифига не написано. Какой вменяемый менеджер поведется на горящие глаза кандидата, который ему расказывает про прелести ФЯ? На фразы, что это быстрее, эффективнее и прочая, прочая? Правильно, никакой. Факты реального успешного применения нужны. Их нет.


Ты прав с практической точки зрения, если брать "типичный" проект, "типичного" менеджера и "типичного" кандидата. Но жизнь тем и прекрасна, что разнообразна. Есть места (и области программирования), где ФЯ применяются и весьма успешно даже у нас в стране. Другое дело, что мест, где применяют обычные языки — гораздо больше...
Re[11]: ФЯ
От: AndreyFedotov Россия  
Дата: 20.08.04 10:23
Оценка: +1
Здравствуйте, serg_mo, Вы писали:

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


Верно. Только для полноты картины вспомни о затратах ресурсов на переключение контекста.
Re[7]: Почему никто не использует функциональные языки
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.08.04 10:57
Оценка: 24 (3)
Здравствуйте, AndreyFedotov, Вы писали:
AF> Скорее масса изянов. Например то, как реализуются простейшие операции вроде перебора параметров в списке. И один из самых очевидных — в императивном языке видно — что, как и в какой последовательности делается. А вот в функциональном языке — это совершенно не очевидно. Есть конечно применения — когда это плюс — но гораздо чаще это большой минус.
А я так думаю, что в начале все было до ужаса императивно. Потом из переключения проводов на консоли переехали-таки к программам, хранимым в памяти.
Еще немного, и удалось научить машину парсить мнемоники команд.
Имея в запасе ассемблер, люди придумали процедурное программирование. Язык С был достаточно тонкой оберткой над все теми же инструкциями процессора.
Реализация ФЯ была с самого начала сопряжена с большими затратами. К моменту, когда они попытались попасть в прикладное программирование, сложилось как минимум поколение (а то и не одно) людей, уверенных, что язык общего назначения должен быть императивным. В итоге приживались только те технологии, которые не слишком нарушали эту догму. При этом, что характерно, в узких нишах ФЯ таки сумели прорваться — SQL применяется повсеместно. Как ни странно, оказалось, что императивная обработка данных не устраивает даже ярых противников ФЯ. Кроме того, тут речь идет не о мелких шажках типа порядка вычисления аргументов, а о глобальных оптимизациях. И вот тут-то отсутствие императивности начало рулить со страшной силой, не давая программисту навязать умному серверу свои убогие представления о наилучшем способе получения результата.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 20.08.04 11:05
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

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

S>Еще немного, и удалось научить машину парсить мнемоники команд.
S>Имея в запасе ассемблер, люди придумали процедурное программирование. Язык С был достаточно тонкой оберткой над все теми же инструкциями процессора.
S>Реализация ФЯ была с самого начала сопряжена с большими затратами. К моменту, когда они попытались попасть в прикладное программирование, сложилось как минимум поколение (а то и не одно) людей, уверенных, что язык общего назначения должен быть императивным. В итоге приживались только те технологии, которые не слишком нарушали эту догму. При этом, что характерно, в узких нишах ФЯ таки сумели прорваться — SQL применяется повсеместно. Как ни странно, оказалось, что императивная обработка данных не устраивает даже ярых противников ФЯ. Кроме того, тут речь идет не о мелких шажках типа порядка вычисления аргументов, а о глобальных оптимизациях. И вот тут-то отсутствие императивности начало рулить со страшной силой, не давая программисту навязать умному серверу свои убогие представления о наилучшем способе получения результата.
Согласен — всё это безусловно так. Правда отсутствие императивности интересно при взаимодействии со внешеней системой. Например когда делается запрос к БД — совсем не интересно (как правило), что он там делает, что бы его выполнить. А вот при реализации оконного интерфейса — предсказуемость (императивность) необходима. Я это собственно к тому — что эти подходы объединять и дополнять ими друг-друга, а не противопоставлять.
Беда с ФЯ в том, что их апологеты часто пытаются противопоставлять их императивным языкам. В то же время факты показывают, что наиболее успешны или ФЯ с императивными элементами или императивные языки с функиональными элементами (типичный пример связка С++/C# с запросами SQL).
Re[8]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 11:18
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF>Здравствуйте, Gaperton, Вы писали:


G>>Вадлер готовил доклад на конференции по ФЯ. Там людям не надо ничего разжевывать, они и так знают, где софистика, а где нет.

AF> Тогда тем более смешно говорить людям с ТАКОЙ квалификацией, что используется не только C++ но и TCL и что бывают медленные языки, которые распространены больше, чем более быстрые...

Еще смешнее указывать ТАКОМУ специалисту, как Вадлер, о что говорить и о чем молчать, выдергивая его фразы из контекста.

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

G>>Для этого г-н Вадлер привел список литературы в конце. Скопировать сюда, как обычно? Вообще, он предполагает, что читатель немного в курсе последних событий в мире ФП. Это доклад для специалистов, а не рекламная статья. Вы же хотите все и сразу. Нивапрос. Для вас постарался г-н Ульф Вигер http://www.erlang.se/publications/Ulf_Wiger.pdf
AF> Спасибо за ссылки. Но сути дела это не меняет.
Если суть дела в том, что тебе интересно Вадлеру поуказывать, а не получить объяснения, то не меняет. Мне казалось, тебе интересны объяснения.

G>>Искал и смотрел. И рекомендую сделать это вам — в противном случае это вы приводили бы мне ссылки, а не наоборот А что до нейросетей, то эту тему мы уже плотно обсудили в "алгоритмах". Никто так и не привел вменяемого примера промышленного применения, с четким объяснением почему это выгодно, ни удовлетворительного математического обоснования. А AXD swith это где-то 12-17% рынка, если мне не изменяет память. Так что ровнять не надо.

AF> Про нейросети — вы слегка приврали. Практически любая комерческая программа распознавания текста испольует нейросетевые алгоритмы. А это и есть промышленное применение.
А вы приврали по-крупному. В алгоритмах одного такого, который говорил что вот-вот покажет ссылки на серьезные промышленные применения год назад дружно всем форумом порвали на сувениры. Ни одной ссылки не смог дать на прикладные продукты. Только на средства построения НС.

И вдобавок, это оффтоп. В Алгоритмы.

G>>>>Но если Вы настаиваете... Во многих европейских вузах ФЯ сейчас применяются в процессе обучения, в некоторых — как первый язык. Подождите, когда эти выпускники пойдут работать, и займут руководящие позиции. Будет как с UNIX. Динамика, на мой взгляд, положительная, хотя и слабая. Но это все косвенные признаки, статистики у меня нет.

AF>>> Угу. Ещё 30 лет назад в вузах многих учили основам нейроных сетей. А некоторых даже — как основному методу построения ИИ. Ну и где же засилие нейронных сетей?
G>>Не надо ровнять. Ничего общего с нейросетями.
AF> Это всего лишь Ваша точка зрения. А я как раз вижу очень много общего. Хотя бы то, что ФЯ, ИЯ и НС начали развиваться примерно в одно и тоже время — только вот ИЯ ушли очень далеко вперёд — а ФЯ и НС — применяются весьма ограниченно, хотя в некоторых областях и очень полезны.

Я вижу, это всего лишь моя точка зрения, а вот Вы... Ваша... Это конечно, да!
Навеяло, ничего личного. Вопрос из теста на шизофрению: что общего между наручными часами и многоэтаэным домом?

AF> Вы кажется меня не поняли. Так же как и с арбалетами. Да, ФЯ стали гораздо лучше по сравнению с 60-ми да и думаю по сравнению с 1998 (как современные арбалеты лучше, чем те что были в 14 веке). И я прекрасно знаю, что есть области, где они промышленно применялсь и в 1998. А вот чего не вижу — так это куда они распростарнились с этого времени. Или что бы они распространились значительно в этих областях (по сравнению с тем, что было в 1998 году). Или — что бы позволили достичь чего то нового (чего без них не было). А без этого — говорить о прогрессе в языках — ошибочно.


А мне кажется я прекрасно вас понял. Это вы себя не понимаете.
Говорить о прогрессе в языках можно только рассматривая этот прогресс с некоей точки зрения. Которая четко обозначена у Вадлера, а у вас плывет от письма к письму.

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


Мне кажется, вы не поняли Вадлера, в очередной раз. На "промышленность" технологии ее распространенность напрямую не влияет. Это качественные характеристики технологии и инструментальных средств, а вот они-то и изменились за последние 6 лет. Есть профайлеры, отладчики, есть раздельная компиляция, средства соборки дистрибутивов и развертывания. Есть поддержка, в том числе и коммерческая. Т. е. есть все необходимое для нормальной разработки. Это если в том смысле, как у Вадлера. Это всего лишь я так думаю, когда выбираю технологию для промышленного применения, а вы вольны думать что угодно.
Re[12]: ФЯ
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 11:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Gaperton, Вы писали:


G>> Ваш R# никто не использует не потому, что люди глупы, а по ряду серьезных причин.

WH>Его ни кто не использует по тому что его еще не реализовали
Да, это самая серьезная причина из списка
А уже как на людей бросаются — "завывания плюсовиков", "единственный шанс для ФЯ", "качественной декларативности в них добиться не удается". Смешно, право слово.

А что будет, когда реализуют? Страшно подумать.
Re[13]: ФЯ
От: Павел Леонов Россия icq: 138726397
Дата: 20.08.04 11:54
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, WolfHound, Вы писали:


WH>>Здравствуйте, Gaperton, Вы писали:


G>>> Ваш R# никто не использует не потому, что люди глупы, а по ряду серьезных причин.

WH>>Его ни кто не использует по тому что его еще не реализовали
G>Да, это самая серьезная причина из списка
G>А уже как на людей бросаются — "завывания плюсовиков", "единственный шанс для ФЯ", "качественной декларативности в них добиться не удается". Смешно, право слово.

G>А что будет, когда реализуют? Страшно подумать.


Предлагаю не поддаватся на провокации. Давайте жить дружно
Re[7]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 12:04
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF>Здравствуйте, Glоbus, Вы писали:


G>>Я думаю на данном временном интервале связь следующая: по каким-то, не зависящим от нас с вами, товарищ, историческим причинам ФЯ на прижились, ну или опять же — "случайно" получилось, что в своей масса ИТ-индустрия соринтировалась на императивные языки. Теперь же, когда встает вопрос — чем пользоваться начинающие товарищи смотрят на то, чем пользуется киты буржуализма и видят что там фя нет. Единственный вопрос, который остается — почему сложилось так изначально что фя не прижились у владельцкев заводов газет пароходов. Очевидно есть какой-то изъян.

AF> Скорее масса изянов. Например то, как реализуются простейшие операции вроде перебора параметров в списке.

Они, не поверишь, реализуются простейшим образом. В две строки.
transform( [ H | T ], F ) -> [ F( H ) | transform( T, F ) ];
transform( [], _ ) -> [].


Вот и все.

AF> И один из самых очевидных — в императивном языке видно — что, как и в какой последовательности делается. А вот в функциональном языке — это совершенно не очевидно. Есть конечно применения — когда это плюс — но гораздо чаще это большой минус.


В strict языках (Erlang, OCaml) последовательность очевидна всегда. В lazy языках (Haskell, Clean) очевидна только тогда, когда этого хочет программист (т. е. когда это требуется). Нет с этим никаких проблем. Учите матчасть.
Re[8]: Почему никто не использует функциональные языки
От: hrg Россия  
Дата: 20.08.04 12:11
Оценка: +1 -2 :)
Gaperton -> "Re[7]: Почему никто не использует функциональные языки" :

G> Они, не поверишь, реализуются простейшим образом. В две строки.

G>
 G> transform( [ H | T ], F ) -> [ F( H ) | transform( T, F ) ];
 G> transform( [], _ ) -> [].
 G>


G> Вот и все.


(задумчиво) кто-то мне недавно про нечитаемость perl'a говорил

Yury Kopyl aka hrg | http://id.totem.ru | "бысто сп..ил и ушел — называется
нашел..."
Posted via RSDN NNTP Server 1.9 beta
Re[9]: Почему никто не использует функциональные языки
От: Курилка Россия http://kirya.narod.ru/
Дата: 20.08.04 12:18
Оценка: +2
Здравствуйте, hrg, Вы писали:

hrg>Gaperton -> "Re[7]: Почему никто не использует функциональные языки" :


G>> Они, не поверишь, реализуются простейшим образом. В две строки.

G>>
 G>> transform( [ H | T ], F ) -> [ F( H ) | transform( T, F ) ];
 G>> transform( [], _ ) -> [].
 G>>


G>> Вот и все.


hrg>(задумчиво) кто-то мне недавно про нечитаемость perl'a говорил


Вот как человек явно считающий перл нечитаемым скажу, что такая запись вполне читаема, если читатель имеет понятия о том, что такое функциональное программирование
Re[9]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 12:48
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF> Согласен — всё это безусловно так. Правда отсутствие императивности интересно при взаимодействии со внешеней системой. Например когда делается запрос к БД — совсем не интересно (как правило), что он там делает, что бы его выполнить. А вот при реализации оконного интерфейса — предсказуемость (императивность) необходима. Я это собственно к тому — что эти подходы объединять и дополнять ими друг-друга, а не противопоставлять.

Ты опоздал со своим предложением лет на 40. Со времени появления лиспа, который допускает побочные эффекты, все ФЯ всегда содержали императивные возможности. Иначе они не смогли бы выполнять ввод-вывод и взаимодействовать с внешним миром.

Существует только два (относительно новых) чисто функциональных языка, которые в принципе способны обойтись без императивных расширений. Это Haskell (там применяются монады — спасибо, господин Вадлер!) и Clean (там применяется Uniqueness Typing). И эти языки совсем не страдают их отсутствия. При этом код с применением монад и uniqueness typing выглядит императивно, хоть и является по сути функциональным.

AF> Беда с ФЯ в том, что их апологеты часто пытаются противопоставлять их императивным языкам. В то же время факты показывают, что наиболее успешны или ФЯ с императивными элементами или императивные языки с функиональными элементами (типичный пример связка С++/C# с запросами SQL).

Так что не надо рисовать чорный образ апологета ФЯ, который раздувает пламя флейма и ненавидит все императивные проявления.
Re[13]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.04 13:01
Оценка: 1 (1) -3
Здравствуйте, Gaperton, Вы писали:

G>Да, это самая серьезная причина из списка

G>А уже как на людей бросаются — "завывания плюсовиков", "единственный шанс для ФЯ", "качественной декларативности в них добиться не удается". Смешно, право слово.

Смешно слушать твои фанатствующие крики временами перехдящие в открытое хамство
Автор: Gaperton
Дата: 20.08.04
. Прекрасно ведь понимашь, что в современном виде ФЯ просто не пригодны для мэйнстрима.

G>А что будет, когда реализуют? Страшно подумать.


А ты не думай. А то хамство сразу прет и зо всех щелей.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: ФЯ
От: serg_mo  
Дата: 20.08.04 14:27
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF>Здравствуйте, serg_mo, Вы писали:


AF> Верно. Только для полноты картины вспомни о затратах ресурсов на переключение контекста.


Ну, вообще-то самосовершенствование в любом аспекте (и не только в профессиональной области) требует усилий. Тем не менее, это же не повод почивать на лаврах, начав писать на С++ в институте и до гробовой доски, не замечая ничего вокруг.

А затраты ресурсов чаще всего не такие уж и большие, надо сказать. Сложно только в первый раз
... << RSDN@Home 1.1.3 stable >>
Re: Почему никто не использует функциональные языки
От: ON  
Дата: 20.08.04 14:37
Оценка: 12 (1) -4
Если эти языки такие могучие, что ж их фанаты не в состоянии самим себе IDE написать?
Теоретики, понимаешь, короли мысли. В падлу себе сопли утереть?

Как хотите, а мне написание ФЯ упорно напоминает программирование на ассемблере. Все так же компактно. Так же сидя перед отдыхающим компьютером нужно свои мозги насиловать.

Еще, зачем я должен переменные таскать из функции в функции, когда можно их объявить глобальными. На мой взгляд императивные языки это и есть доведенные до ума функциональные.
Posted via RSDN NNTP Server 1.9 beta
Re[14]: ФЯ
От: Gaperton http://gaperton.livejournal.com
Дата: 20.08.04 17:16
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Смешно слушать твои фанатствующие крики временами перехдящие в открытое хамство
Автор: Gaperton
Дата: 20.08.04
.

Это где ты там "открытое хамство" заметил? И вообще, кто бы говорил, а ты молчал Тебе подборку твоих высказываний дать? Искать долго не придется — хамишь ты постоянно и всем. Да ты и в этом письме успел отличился, что искать.

G>>А что будет, когда реализуют? Страшно подумать.

VD>А ты не думай. А то хамство сразу прет и зо всех щелей.
Да я вижу, что прет. Если бы я так реагировал на многочисленные провокации по поводу ФЯ, как ты на единственную подколку по поводу твоего R#, меня бы давно забанили, или я бы удавился от расстройства. Спокойнее, Влад, без истерик. Ведь ваш R# и вправду ведь еще... гхм... не закончен? Ну так что ты шумишь?
Re[15]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.04 20:08
Оценка: 1 (1) -2
Здравствуйте, Gaperton, Вы писали:

VD>>Смешно слушать твои фанатствующие крики временами перехдящие в открытое хамство
Автор: Gaperton
Дата: 20.08.04
.

G>Это где ты там "открытое хамство" заметил?

Что за быдляцкие манеры.


G> И вообще, кто бы говорил, а ты молчал


Хочешь в бан на недельку?

G> Тебе подборку твоих высказываний дать? Искать долго не придется — хамишь ты постоянно и всем.


Давай.

G> Да ты и в этом письме успел отличился, что искать.


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

G> Если бы я так реагировал на многочисленные провокации по поводу ФЯ


Да нет никаких провокаций. Люди тебе говорят что думают. А ты все провокациями считаешь. Плевать всем на эти ФЯ. Людям нужен удобный инструмент простой в изучении и использовании. А то что есть сейчас даже запустить тяжело. Не то что изучить и использовать на практике. Статья об этом собственно и говорит.

G>, как ты на единственную подколку по поводу твоего R#, меня бы давно забанили,


Плевать мне на твои потколки. Но слышать подобное процетированному не охота даже не всвой адрес.

G> или я бы удавился от расстройства. Спокойнее, Влад, без истерик. Ведь ваш R# и вправду ведь еще... гхм... не закончен? Ну так что ты шумишь?


А я не шублю. Я тебе сказал свое мнение. ФЯ ужербны и недоработаны. В них есть рациональное зерно, но оно отнюдь не в ругательствах вроде "lazy evaluation, lazy data structures" (это скорее затычки проблем чем достоинства). Достоинства в декларативности и в ином взгляде на код (под другим углом). Но они же порождают и недостатки. Как минимум используя ФЯ я не могу добиться построения такого исполнимого кода который я хочу получить. Отсюда и все споры о производительности. Когад ФЯ оказывается заточен на решение конкретной задачи, то производительность у него приемлемая. Но как только задача не стыкуется с концепцией, то код плучается медленным и мало пригодным. Именно по этому мне интересен подход с преобразованием декларативного стиля в имперетивный. Это позволяет контролировать результат. А так же добиваться большей выразительности.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.04 20:08
Оценка: -1
Здравствуйте, Gaperton, Вы писали:

VD>>Тут ты не прав. Функциональные языки не дают сами по себе приемуществ. Просто они ближе к идеи декларативности. Причем качественной декларативности в них добиться не удается. Причем именно из-за того, что ни заточены на функциональную запись.

G>Да я уже привык, что как только ты пишешь — то я сразу не прав . Правда, как и всегда, сложно понять, в чем? В том, что OCaml — это не то, что хочет Павел? Это, пардон, ему решать, а не тебе и не мне.

Да сказал бы проще. Возразить нечего но хочется остаться правым. А то целый абзац и никакого смысла.

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

G>Да ради бога, я не против.

Судя по твоим возражениям и безграничной агитации — против.

VD>>Возьми к примеру BNF/EBNF натацию и сравни ее с описанием парсера на функциональном языке. BNF/EBNF намного чище и понятнее.

G>Тут ты не прав. Про комбинаторные монадные парсеры слыхал?

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

G> Почитай про них. Код парсера будет выглядеть если не один в один как BNF/EBNF, то очень близко .


А мне не нужно "очень близко". Мне нужно EBNF. Попробуй на досуге переиписать кусок парсера того же шарпа. Сравним результат.

G>Кстати, отчего ты не предлагаешь посмотреть код автомата, который генерится для С#?


Посмотри. Парсер доступен публично. Првда там банальный рекусивный спуск с некоторыми проверками. Но все же.

G>Да ради бога. Или так. Или генерировать эффективный парсер на функциональном языке, например на OCaml или Clean.


Этов все языком. А кода люди берутся за дело, то применяют генераторы и С/С++/C#.

G> Или императивную на OCaml — как душе угодно. Хочешь померятся скоростью с OCaml?


А что мне мериться? Мой парсер готов и летает. Пиши свой помериемся. Но не верится даже то, что он будет написан. А уж то что он окажется сильно шустрее просто выглядит нереально.

G> А что практичнее — каждый решает для себя сам. Ты я вижу — решил.


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

VD>>Имея удобный и простой в использовании механизм трансформации можно создать даже генератор преобразующий функциональные конструкции в императивные. Таким образом язык основанный на трансформации позволяет превратить себя в фукнционльный язык. Причем мы не будем завязаны исключительно на функциональный подход, а сможем выбирать наиболее удбный подход для конкретного случая.


G>Попытка не пытка — зачем дело встало?


Низачем. Делаем. И не только мы.

G> Попробуй реализовать функции высокого порядка


Думаю, с этим проблем не будет.

G>, карринг, lazy evaluation, lazy data structures, и list comprehensions.


Блин. А по русски все это нельзя? Ну, lazy evaluation и т.п. я конечно могу в уме обратно перевести "ленивое выполнение кода". Но все эти "карринги" и т.п...

Что касается отложенных вычислений. То это затыкание дыр функционального подхода. В императивном коде в них нужны нет. От функционального подхода мне интереснее другое. Повторне исползование частей алгоритмов и декларативность. Вот это со временем мы постараемся привнести в R#. Остальное от лишнее.

G> Очень интересна также будет реализация алгебраических типов.


Кому? Мне они не нужны. Кому будут нужны реализует. Моя задача не создать узкоспециализированные решения для конкретных проблем (чтобы прозибать как современные ФЯ). А создать средство позволяющее максимально просто создавать такие прикладные решения путем создания прокрамм преобразующих декларативную или смешанную запись в императивный код на популярном и общепризнанном языке.

G> Обеспечь нам прозрачность по ссылкам.


Зачем? Меня полностью удовлетворяет ситуация со сылками в C#.

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


Твоя фамилия случаем не Макидонский? А что ты тогда о себе во множественном числе? Или ты не заметил, что в основном тут все с тобой не согласны?

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

К примеру, напиши программу на любом ФЯ которая сравниться по простоте и понятности с XPath- или SQL-запросом. Ну, например, вот такой запрос:
//class[@Name='AstNodeCollectionBase']

возвращает классы с именем AstNodeCollectionBase.

G> И вот тогда мы дружно все перейдем на твой R#.


Дык. Работаем... Ищем...

G>А вообще, кое-кто уже давно наслаждаются parse transform, встроеным в Erlang .


Рад за них. Прадва можно посочувствовать тому, что тех кто вообще наслаждается Erlang очень мало. Я по крайней мере в живую не видел.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Почему никто не использует функциональные языки
От: mister-AK Россия  
Дата: 20.08.04 22:19
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Эта тема несколько раз поднималась на форуме, но ни до чего серьезного не договорились. Вот, нашел перевод статьи господина Вадлера на эту тему. Хорошо дядька пишет, правильно.


G>Почему никто не использует функциональные языки



хм.. простите, может я не в кассу...

но был у меня один предмет в ВУЗе — там триггеры изучали... так вот, что-то спор между императивным подходом и функциональным уж очень мне напоминает спор между описанием модели работы автомата (триггера) конечный он или бесконечный, Милли или Мура, не важно.. НО тем не менее двумя вариантами — статической формулой (что соответствует концепции ФЯ) или системой динамических формул (что соответствует концепции ИЯ) Как говорилось профемморами — последнее намного прощще, так как представляет собой как раз ту модель мира, в которой мы живем, т.е. учитывает чудодейтвенное присутствие времени а над первой моделью какой-нить попавшейся сложной системы из этих автоматов можно биться и биться до изнеможения, но добиться умопомрачительной компактности её представления на все века вперед — а вот в результате всё зависит от того, случится ли менять систему когда-нить... ведь всё течет, всё меняется.
Поправьте меня, если мои догадки не совсем в правильном русле данного философского течения
Re[7]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 03:35
Оценка: 3 (2) -1
Здравствуйте, Gaperton, Вы писали:

G>...г-н Ульф Вигер http://www.erlang.se/publications/Ulf_Wiger.pdf


G>... http://www.erlang.se/publications/xjobb/c++-vs-erlang.ps.gz

G>И еще
G>http://www.erlang.org/cslab/publications/bjarnelic.pdf

И что забавно, все в ужасных пдф-ах. Почему чем хуже дела с раскруткой тем больше ПДФ-ов? Такое ощущение, что ПДФ — это такое символ консерваторства.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 03:35
Оценка: 3 (1) -1
Здравствуйте, Курилка, Вы писали:

G>>> Они, не поверишь, реализуются простейшим образом. В две строки.

G>>>
 G>>> transform( [ H | T ], F ) -> [ F( H ) | transform( T, F ) ];
 G>>> transform( [], _ ) -> [].
 G>>>


G>>> Вот и все.


hrg>>(задумчиво) кто-то мне недавно про нечитаемость perl'a говорил


К>Вот как человек явно считающий перл нечитаемым скажу, что такая запись вполне читаема, если читатель имеет понятия о том, что такое функциональное программирование


Вот только почему даже в примитивных случаях нужно мыслить рекурскией? И почему мне вот такая запись:
foreach (X x in xs)
 xxx(x);

кажется понятнее и проще?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 03:35
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Что-то Gapertona сильно бьют

Ц>в этой ветке

Дык кусается, вот и бьют.

Ц>Вроде используют ФЯ :

Ц>SQL, например, чем не ФЯ. Специализированный малость.

Это скорее декларативный язык. ФЯ все же это отдельный класс прикладных языков. Собственно Gapertona пытается доказать, что ФЯ круче паравоза, а ему в ответ отчечают, что не вдили пока ФЯ в рельной жизни. И что основное приемущество ФЯ в декларотивности, но ее можно достичь из без ФЯ. Так что SQL и XPath — это хорошие примеры декларативных языков не являющхся ФЯ и их наличие как раз говорит, о том что н все впорядке в стане ФЯ.

Согласись, что SQL и XPath учатся очень быстро. А за ФЯ люди берутся, обламываются и начинают спрашивать зачем они нужны.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 03:35
Оценка: +1
Здравствуйте, ON, Вы писали:

ON>Теоретики, понимаешь, короли мысли. В падлу себе сопли утереть?


Хамить то зачем?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 21.08.04 05:33
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, AndreyFedotov, Вы писали:


AF>> Согласен — всё это безусловно так. Правда отсутствие императивности интересно при взаимодействии со внешеней системой. Например когда делается запрос к БД — совсем не интересно (как правило), что он там делает, что бы его выполнить. А вот при реализации оконного интерфейса — предсказуемость (императивность) необходима. Я это собственно к тому — что эти подходы объединять и дополнять ими друг-друга, а не противопоставлять.

G>Ты опоздал со своим предложением лет на 40. Со времени появления лиспа, который допускает побочные эффекты, все ФЯ всегда содержали императивные возможности. Иначе они не смогли бы выполнять ввод-вывод и взаимодействовать с внешним миром.
И в очередной раз колумб открыл америку... Я же как раз писал, что успехи в "промышленном применении" у тех языков, AZ которые имеют императивные возможности.

AF>> Беда с ФЯ в том, что их апологеты часто пытаются противопоставлять их императивным языкам. В то же время факты показывают, что наиболее успешны или ФЯ с императивными элементами или императивные языки с функиональными элементами (типичный пример связка С++/C# с запросами SQL).

G>Так что не надо рисовать чорный образ апологета ФЯ, который раздувает пламя флейма и ненавидит все императивные проявления.
Естественно не надо. Реальность гораздо страшнее любых литературных образов
А если серьёзно — то не в приведённой ли статье приводилось описание причин, почему не используются ФЯ там — где успешно и эффективно применяются C++ и Visual Basic? Что это как не попытка захвата территории и анализ причин её провала? Зачем ФЯ к примеру для рисования интерфейса?
И опять таки — я за ФЯ, но я против того, что бы заявлять, что язык "XXX лучше всех" или "подход XXX лучше всех" (в том числе и императивый)
За ФЯ действительно может оказаться будущее — но не сейчас, а позднее — с появлением квантовых вычислений или многослойных (а возможно и многомерных) кристаллов. Т.к. там ленивые вычисления — естественное состояние работы такой структуры, т.е. ФЯ гораздо для них ближе, чем для современных нам процессоров — возможно это сделает их более востребованными.
Ну а сейчас есть некоторые задачи и области — где эти языки успешно применяются и скорее всего постепенно сфера применения ФЯ будет расти, хотя в ближайшие 15-20 лет править будут языки императивные.
Re[8]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 21.08.04 05:34
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>И что забавно, все в ужасных пдф-ах. Почему чем хуже дела с раскруткой тем больше ПДФ-ов? Такое ощущение, что ПДФ — это такое символ консерваторства.

Это не впечатление — это факт!
Re[11]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 21.08.04 05:40
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Курилка, Вы писали:


G>>>> Они, не поверишь, реализуются простейшим образом. В две строки.

G>>>>
 G>>>> transform( [ H | T ], F ) -> [ F( H ) | transform( T, F ) ];
 G>>>> transform( [], _ ) -> [].
 G>>>>


G>>>> Вот и все.


hrg>>>(задумчиво) кто-то мне недавно про нечитаемость perl'a говорил


К>>Вот как человек явно считающий перл нечитаемым скажу, что такая запись вполне читаема, если читатель имеет понятия о том, что такое функциональное программирование


VD>Вот только почему даже в примитивных случаях нужно мыслить рекурскией? И почему мне вот такая запись:

VD>
VD>foreach (X x in xs)
VD> xxx(x);
VD>

VD>кажется понятнее и проще?

И понятнее и проще. Но не функционально-языкасто. А потому есмь ересь и должно Mustdie (следуя логике проповедников ФЯ).
А потом они удивляются, почему "никто" не хочет пользоваться ФЯ.
Было бы интереснее добавить возможности ФЯ в языки обычные. Что то а-ля:

 __functional 
 {
 ...
 };


Или хотя бы так, как обычно задаются запросы к SQL серверу. Это было бы весьма полезно.
Re[13]: ФЯ
От: AndreyFedotov Россия  
Дата: 21.08.04 05:52
Оценка:
Здравствуйте, serg_mo, Вы писали:

_>Здравствуйте, AndreyFedotov, Вы писали:


AF>>Здравствуйте, serg_mo, Вы писали:


AF>> Верно. Только для полноты картины вспомни о затратах ресурсов на переключение контекста.


_>Ну, вообще-то самосовершенствование в любом аспекте (и не только в профессиональной области) требует усилий. Тем не менее, это же не повод почивать на лаврах, начав писать на С++ в институте и до гробовой доски, не замечая ничего вокруг.


А это другая крайность. Крайности, как известно, вредны
Как вредно писать только на C/C++/C# или Haskell, так я думаю ещё вреднее — изучать каждыя язык — просто времени на написание кода не отсанется.

_>А затраты ресурсов чаще всего не такие уж и большие, надо сказать. Сложно только в первый раз

Это слова увлечённого программста (и совершенно прекрасные как для специалиста), а не менеджера или инвестора, который реально реализует промышленные проекты. Посмотри на всякие переходы туда — сюда ИХ глазами. Представь — что ты бы платил за подобные развлечения свои деньги, а не какого то дяди.
Причём таки переходят же. Иначе никаких ФЯ в телекоме не было бы. Просто на практике всё чуть сложнее, чем прочитать описание языка и написать пару программ.
Re[3]: Почему никто не использует функциональные языки
От: ON  
Дата: 21.08.04 06:06
Оценка:
>Хамить то зачем?

Просто люди хорошее запоминают, а с плохим борются.
Не вижу смысла увековечивать в стихах сегодняшнее состояние инфраструктуры ФЯ.
Волки санитары леса
Posted via RSDN NNTP Server 1.9 beta
Re[2]: Почему никто не использует функциональные языки
От: ArtDenis Россия  
Дата: 21.08.04 06:14
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Мне кажется, что единственный реальный шанс выйти в массы для компонентных языков — это быть встроенными в какой-нибудь императивный язык. Например, в R#.


Какое-то странное утверждение. Почти на любом более-менее развитом императивном языке можно программировть, используя приёмы функционального программирования. Только всегда ли это нужно?
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 21.08.04 06:41
Оценка: :)
ON>Волки санитары леса
Осторожно! Модераторы — санитары форума!
Re[7]: Почему никто не использует функциональные языки
От: Larm Украина  
Дата: 21.08.04 08:16
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Правильнее (и честнее) сказать, что ты их не знаешь.

G>Ты их не знаешь, [а так как ты видимо думаешь, что знаешь все,] следовательно их нет .

Не надо только снова про мобильную связь! Это узкая ниша — там этих проектов всего пара будет, остальное это их поддержка и небольшие расширения со временем. Широко, вне этой ниши, они не применяются. Десктоп приложения на них не пишут.
The God who walks is among us...
Re[8]: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 21.08.04 10:54
Оценка: +1
Здравствуйте, VladD2, Вы писали :

V> Здравствуйте, Gaperton, Вы писали:


G>>...г-н Ульф Вигер http://www.erlang.se/publications/Ulf_Wiger.pdf


G>>... http://www.erlang.se/publications/xjobb/c++-vs-erlang.ps.gz

G>>И еще
G>>http://www.erlang.org/cslab/publications/bjarnelic.pdf

V> И что забавно, все в ужасных пдф-ах. Почему чем хуже дела с

V> раскруткой тем больше ПДФ-ов? Такое ощущение, что ПДФ — это такое
V> символ консерваторства.

Да, с пдф-ами засада, если еще читать на LCD мониторе, который при маштабировании портит шрифты.... HTML надоб для этих дел.
Posted via RSDN NNTP Server 1.9 beta
Re[3]: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 21.08.04 11:07
Оценка:
Здравствуйте, VladD2, Вы писали :

V> Согласись, что SQL и XPath учатся очень быстро. А за ФЯ люди берутся,

V> обламываются и начинают спрашивать зачем они нужны.

Влад, SQL — декларативный, подкласс функциональный
Posted via RSDN NNTP Server 1.9 beta
Re[11]: Можно и попроще
От: INTP_mihoshi Россия  
Дата: 21.08.04 11:26
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вот только почему даже в примитивных случаях нужно мыслить рекурскией? И почему мне вот такая запись:

VD>
VD>foreach (X x in xs)
VD> xxx(x);
VD>

VD>кажется понятнее и проще?

В Haskell то, что ты написал, выглядит так.

 map xxx x


В других ФЯ примерно так же. При чем map — это не встроенная функция, а часть стандартной библиотеки. А то, что написал Гапертон — это как раз код аналога этой самой "map", работающий для любых функций и списков. Или других котейнеров.

Кстати, если ты хочешь получить не функционального варианта — в OCaml есть метод List.iter fun list, которая работает с функциями, имеющим побочный эффект.

В ФЯ ты сам выбираешь, как выглядит твой код.
Re[3]: Нельзя
От: INTP_mihoshi Россия  
Дата: 21.08.04 11:29
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Какое-то странное утверждение. Почти на любом более-менее развитом императивном языке можно программировть, используя приёмы функционального программирования. Только всегда ли это нужно?


Нет, нельзя. Алескандреску и Boost это доказали.
Re[12]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 11:34
Оценка: 1 (1)
Здравствуйте, AndreyFedotov, Вы писали:

AF> И понятнее и проще. Но не функционально-языкасто. А потому есмь ересь и должно Mustdie (следуя логике проповедников ФЯ).

AF>А потом они удивляются, почему "никто" не хочет пользоваться ФЯ.

AF> Или хотя бы так, как обычно задаются запросы к SQL серверу. Это было бы весьма полезно.


Мы с Павлом Леоновым в самом начале работы над R# обсуждали подобное расширение. И пришли к мнению, что это вполне возможно даже без серьезного расширения синтаксиса.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 11:34
Оценка:
Здравствуйте, ArtDenis, Вы писали:

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


Да ничего странного. То что можно современных ИЯ — это жалкое подобие того что было бы можно в принципе. Все же факторы и делегаты инструмент довльно ограниченный. В итоге приходится эмулировать. А любая эмуляция хуже чистой реализации.

AD>Только всегда ли это нужно?


Дык где не нужно можно не использовать.

ЗЫ

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

Я часто ловлю себя на мысле, что могу в черне описать довольно сложный алгоритм за какие-то 5-10 минут. А потом мучиться над его реализацие неделями. Декларативность позволила бы упростить процесс реализации и процесс восприятия сути программы.

Изходя из этого я и обращаю внимание на ФЯ как на представителей декларатинвой школы. Так же мне интересны SQL, XPath, XSLT, HTML и т.п. Даже атрибуты в Шарпе интересны для меня, так как позволяют упростить разработку.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 11:34
Оценка:
Здравствуйте, ON, Вы писали:

ON>Волки санитары леса


Согласен. Но можно сказать все тоже самое и не так прямолинейно. Беседа и так временами доходит до грани фола.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Не совсем
От: INTP_mihoshi Россия  
Дата: 21.08.04 11:39
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>И что забавно, все в ужасных пдф-ах. Почему чем хуже дела с раскруткой тем больше ПДФ-ов? Такое ощущение, что ПДФ — это такое символ консерваторства.


Пдф — это признак печатных работ. HTML как-то для формул не предназначен, и для печати тоже. Поэтому пищут обчно на TeX, потом конвертят в ps и pdf.

Так что, для тебя научные работы — признак консерватизма. Не скажу, что это совсем уж не так
Re[12]: Можно и попроще
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 11:44
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>В Haskell то, что ты написал, выглядит так.


INT>
INT> map xxx x
INT>


Рад за них. Но это совсем не понятно. Краткость не есть качество.

INT>В других ФЯ примерно так же. При чем map — это не встроенная функция, а часть стандартной библиотеки. А то, что написал Гапертон — это как раз код аналога этой самой "map", работающий для любых функций и списков. Или других котейнеров.


INT>Кстати, если ты хочешь получить не функционального варианта — в OCaml есть метод List.iter fun list, которая работает с функциями, имеющим побочный эффект.


INT>В ФЯ ты сам выбираешь, как выглядит твой код.


К сожалению, все же за меня уже сделан выбор. Я могу выбрать только вариации, но все они связаны с рекусрисей и как следствие с перестройкой мозга на рекурсивный лад. А мне хотелось бы получить возможности декларатиного задания алгоритмов без подобных жертв. И с простым и понятный синтаксисом. Ведь даже то что ты привел из OCaml довольно некрасиво выглядит.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 11:44
Оценка:
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Влад, SQL — декларативный, подкласс функциональный


Все же он не фунциональный. Он специализированный. Хотя временами похож.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Не совсем
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 11:53
Оценка: +1 -2 :)
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Пдф — это признак печатных работ. HTML как-то для формул не предназначен, и для печати тоже.


У нас почти все статьи на сайте печатаются в журнале. Вот только мы находим смелость превратить их в HTML.

INT>Поэтому пищут обчно на TeX, потом конвертят в ps и pdf.


Откровенно говоря люди предпочитающие TeX ворду мне кажется еще большими мазахистами. Видимо по этому у них и не растет кокос. Они пишут свои работы не для людей, а для других иследователей. В общем, живут в другом мире.

INT>Так что, для тебя научные работы — признак консерватизма. Не скажу, что это совсем уж не так


Ну, в каждой шутке есть...
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Тебе мозги насиловать необязательно.
От: INTP_mihoshi Россия  
Дата: 21.08.04 11:58
Оценка: +1
Здравствуйте, ON, Вы писали:

ON>Как хотите, а мне написание ФЯ упорно напоминает программирование на ассемблере. Все так же компактно. Так же сидя перед отдыхающим компьютером нужно свои мозги насиловать.

Попробуй все-таки написать на ФЯ хоть что-нибудь. Возможно, ощущение сходства с ассемблером исчезнет.
А насчет насилования мозгов — ФП, вобщем, не сложнее матанализа университетского уровня

ON>Еще, зачем я должен переменные таскать из функции в функции, когда можно их объявить глобальными.

А также зачем области видимости и инкапсуляция. Напридумали, понимаешь.

Кстати, все, кто считает, что функциональное программирование не нужно, могут перестать использоваться STL и забыть слова инкапсуляция и полиморфизм. Ибо все это как раз и есть элементы ФЯ, привнесеный в С++.

ON>На мой взгляд императивные языки это и есть доведенные до ума функциональные.

Ну что делать, не хватает у нас умишка-то на императивных кодить. Сопли-та еще подтирать и то не умеем. Вот и ковыряемся в ФЯ потихоньку...



P.S. Народ, чо это мы, а? Почему вдруг на личности стали скатываться? Включая Влада, который, как админ, вообще должен личный пример, аки пионер, подавать?
Re[3]: Тебе мозги насиловать необязательно.
От: Larm Украина  
Дата: 21.08.04 12:48
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

ON>Еще, зачем я должен переменные таскать из функции в функции, когда можно их объявить глобальными.

INT>А также зачем области видимости и инкапсуляция. Напридумали, понимаешь.

INT>Кстати, все, кто считает, что функциональное программирование не нужно, могут перестать использоваться STL и забыть слова инкапсуляция и полиморфизм. Ибо все это как раз и есть элементы ФЯ, привнесеный в С++.


Классно. То инкапсуляция не нужна и не юзайте ее — отродие С++. То детище ФЯ. Но тоже не юзайте ее
The God who walks is among us...
Re[3]: Тебе мозги насиловать необязательно.
От: ArtDenis Россия  
Дата: 21.08.04 13:30
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Кстати, все, кто считает, что функциональное программирование не нужно, могут перестать использоваться STL и забыть слова инкапсуляция и полиморфизм. Ибо все это как раз и есть элементы ФЯ, привнесеный в С++.


С каких это пор инкапсуляция и полиморфизм стали элементами ФП?
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Тебе мозги насиловать необязательно.
От: bkat  
Дата: 21.08.04 14:29
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, INTP_mihoshi, Вы писали:


INT>>Кстати, все, кто считает, что функциональное программирование не нужно, могут перестать использоваться STL и забыть слова инкапсуляция и полиморфизм. Ибо все это как раз и есть элементы ФЯ, привнесеный в С++.


AD>С каких это пор инкапсуляция и полиморфизм стали элементами ФП?


А что такое по-твоему, к примеру,
полиморфизм и почему это не может быть в функциональных языках?
Re[5]: Тебе мозги насиловать необязательно.
От: ArtDenis Россия  
Дата: 21.08.04 14:43
Оценка:
Здравствуйте, bkat, Вы писали:

AD>>С каких это пор инкапсуляция и полиморфизм стали элементами ФП?

B>А что такое по-твоему, к примеру,
B>полиморфизм и почему это не может быть в функциональных языках?

Да, беру свои слова насчёт полиморфизма обратно. Сделал поиск и, с удивлением для себя обнаружил, что в полиморфизм является одним из принципов ФП.
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: Где у ФЯ матчасть?
От: ON  
Дата: 21.08.04 15:13
Оценка:
Где можно посмотреть исходники интерпретатора? Лучше что-нибудь по-проще, джентлементский набор.
Для lisp'а у меня есть by Marc Adler, 735 строк, всего лишь.

Для императивного языка мат.частью является процессор, если знаешь как он работает, как-то сразу и программы на ум приходят. Аналогично с Windows API. Хотелось бы узнать что за чудо понимает код ФЯ.
Posted via RSDN NNTP Server 1.9 beta
Re[4]: Тебе мозги насиловать необязательно.
От: AndreyFedotov Россия  
Дата: 21.08.04 15:25
Оценка: :)
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, INTP_mihoshi, Вы писали:


INT>>Кстати, все, кто считает, что функциональное программирование не нужно, могут перестать использоваться STL и забыть слова инкапсуляция и полиморфизм. Ибо все это как раз и есть элементы ФЯ, привнесеный в С++.


AD>С каких это пор инкапсуляция и полиморфизм стали элементами ФП?


А они ими и не были... Эти понятия возникли в середине 60-х, применительно к обычным императивным языкам. Это потом — когда эти элементы показали и доказали свою эффективность — их стали включать или находить там, где их ранее не было...
Re[16]: ФЯ
От: Gaperton http://gaperton.livejournal.com
Дата: 21.08.04 16:41
Оценка: +2 -1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Gaperton, Вы писали:


VD>>>Смешно слушать твои фанатствующие крики временами перехдящие в открытое хамство
Автор: Gaperton
Дата: 20.08.04
.

G>>Это где ты там "открытое хамство" заметил?
VD>

Что за быдляцкие манеры.

G>> И вообще, кто бы говорил, а ты молчал
VD>Хочешь в бан на недельку?
G>> Тебе подборку твоих высказываний дать? Искать долго не придется — хамишь ты постоянно и всем.
VD>Давай.
G>> Да ты и в этом письме успел отличился, что искать.
VD>Ты видимо не умешь отличать хамства и оскорблений от не лестных слов. Это твои проблемы. Но знай, что подобная "агитация" резко отталкивает разумных людей от того чтобы заниматься тем за что агитируют.

Значит так, Влад. Твои "нелестные слова" являются на самом деле бестактностью, хамством, и оскорблениями. Мне все равно, как именно ты предпочитаешь называешь свои и чужие плохие манеры. Ясное дело, это становится не твоей проблемой, а проблемой окружающих. Мне надоело их слышать в свой адрес, и в чужой тоже. Не хочешь слышать, что твои манеры называют "быдляцкими"? Неприятно? (Замечу, что если бы я хотел тебя оскорбить, я бы назвал тебя "быдлом") Есть отличный способ — держи свои "нелестные слова" при себе. Любой воспитанный человек (каких, к счастью, на форуме много) не испытывает никаких трудностей удержатся от их употребления в адрес собеседника, им не требуется делять над собой усилий. Если у тебя с этим проблемы (я слышал, есть такая болезнь, но надеюсь, это не твой случай), то отправляй меня в бан. Или можешь сразу аккаунт удалить.

G>> Если бы я так реагировал на многочисленные провокации по поводу ФЯ

VD>Да нет никаких провокаций. Люди тебе говорят что думают. А ты все провокациями считаешь. Плевать всем на эти ФЯ.
Во-первых, говори за себя, а не за всех. Во-вторых, твоя и чужая бестактность провоцирует резкие ответы и флейм.

Давай я в порядке иллюстрации тоже скажу, что думаю, чтобы ты понял, что надо фильтровать поток сознания? Плевать всем на твой R#, ты даже объяснить зачем он нужен толком не смог, когда тебя попросили. Дай бог, если им будет пользоваться столько же людей, сколько захудалым языком Hope. Это не провокация, чего ты злишься! Я просто говорю, что думаю. Ты теперь должен конструктивно отвечать, по делу, а не хамить.

VD>Людям нужен удобный инструмент простой в изучении и использовании. А то что есть сейчас даже запустить тяжело. Не то что изучить и использовать на практике. Статья об этом собственно и говорит.

Статья, собственно, датирована 1998 годом. 6 лет прошло. Сейчас для того, чтобы запустить, надо для этого сначала скачать, потом запустить программу "сетуп", а потом ткнуть в появившуюся иконку в меню "Старт". Ты продолжишь настаивать, что это представляет для тебя сложность?

G>>, как ты на единственную подколку по поводу твоего R#, меня бы давно забанили,

VD>Плевать мне на твои потколки. Но слышать подобное процетированному не охота даже не всвой адрес.
У тебя все в порядке с причинно-следственными связями? Не понимаешь, в каких случаях я указываю на "быдляцкие манеры"? Держи свои "нелестные слова" при себе, и никогда не услышишь процетированное в свой адрес.

G>> или я бы удавился от расстройства. Спокойнее, Влад, без истерик. Ведь ваш R# и вправду ведь еще... гхм... не закончен? Ну так что ты шумишь?

VD>А я не шублю. Я тебе сказал свое мнение.
Первой фразой в своем письме выше по ветке ты мне сообщил самую важную часть твоего мнения. "Здесь ты не прав". Бестактно так начинать письма, и к тому же невыгодно тебе же, так как если ты ошибся, ты выставляешь себя дураком. Плюс, ты провоцируешь собеседника "упереться". Ну и естественно, ни в коем случае не уступишь сам — мосты сожжены.

VD>ФЯ ужербны и недоработаны. В них есть рациональное зерно, но оно отнюдь не в ругательствах вроде "lazy evaluation, lazy data structures" (это скорее затычки проблем чем достоинства).

VD>Достоинства в декларативности и в ином взгляде на код (под другим углом).
Функции высокого порядка и "ленивые вычисления" — это, основные и самые мощные механизмы ФЯ. Убери их — и от ФЯ почти ничего не останется. Просто, чтоб ты знал. Вообще, мне несколько странно, что ты, не зная ни одного ФЯ и не написав на нем ни одной программы (поправь меня, если это не так, назови язык, и мы поговорим предметно), берешься рассуждать, где там рациональное зерно, а где затычки проблем, и вдобавок говорить кому-то, что он не прав. У тебя самого этот факт не вызывает никакого беспокойства? Я бы на твоем месте постеснялся.

VD>Но они же порождают и недостатки. Как минимум используя ФЯ я не могу добиться построения такого исполнимого кода который я хочу получить. Отсюда и все споры о производительности.


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

Есть такая программа на OCaml — Fastet Fourier Transform in the West (быстрое преобразование Фурье). Численные методы — что лучше для тестирования голой производительности? Она не зря называется Fastest. Попробуй ее обогнать на С#. А потом поговорим о производительности.

VD>Когад ФЯ оказывается заточен на решение конкретной задачи, то производительность у него приемлемая. Но как только задача не стыкуется с концепцией, то код плучается медленным и мало пригодным.

Медленный и малопригодный код можно написать на любом языке, для этого ума много не нужно. Надо использовать сильные стороны технологии, а не слабые, и все будет в порядке. Да, известны задачи, решение которых на императивных языках сильно проще и быстрее. Для этого в ФЯ есть императивные расширения, и средства межязыкового взаимодействия. Например, OCaml, кроме всего прочего — полноценный OO императивный язык.

VD>Именно по этому мне интересен подход с преобразованием декларативного стиля в имперетивный. Это позволяет контролировать результат. А так же добиваться большей выразительности.


Вообще-то этим преобразованием занимаются компиляторы. А твой подход может и хорош, у меня нет предубеждений. Но для начала тебе надо (я не указываю тебе что делать, просто напоминаю о том, что тебе сделать придется):
1) Полностью довести R# до рабочего состояния.
2) Убедительно показать, что этот подход будет давать реальные преимущества. Меня интересуют следующие измеримые преимущества:
— Заметное (в разы) сокращение объема программы в сравнении с аналогичной С++.
— Аналогичный рост продуктивности труда программиста.
— Заметное (в разы) увеличение качества ПО при тех же затратах, что и на разработку с С++.
3) Обеспечить качественную поддержку коммерческого уровня, и серьезные гарантии, что она не прекратится. Видишь-ли, когда кто-то выбирает средство разработки для проекта с бюджетом от миллиона и выше, он автоматически связывает себя с этим средством лет эдак на 5-10. И было-бы очень обидно, если через пару лет, когда в разработку вбухана куча бабла, выяснится, что спецификации R# изменились без уведомления, команда разработки R# считает, что критичные для моего продукта дефекты исправлять не надо, "потому что это фигня", и уже год как перестали выходить bug-fix релизы, по причине того, что команда занята реализацией очередной гениальной идеи. Предупреждая ответ — твои слова в форуме, какие бы нелестные они не были — это не гарантии, Влад. Это слова. А нужны гарантии. И пока никаких гарантий ты дать не можешь.

Замечу, что, например, с Erlang таких проблем нет и не будет, а применение Erlang по накопленой статистике промышленных применений за последние 10 лет дает измеряемый выигрыш по затратам минимум вчетверо при написании отказоустойчивых распределенных приложений. А это далеко не самый гибкий из ФЯ. Я уж не говорю об отказоустойчивости. Этот ненадежный динамически типизированный язык позволяет при разумных затратах писать софт объемем 1.7 миллионов строк кода с измеряемым временем отказов 99.9999999% (это 30 наносекунд в год. пример — AXD switch). Он позволяет доказывать корректность реализации (благодаря тому, что это ФЯ), что регулярно делали спецы Эрикссон в промышленной разработке — методики опубликованы, и теперь этот фокус может повторить каждый.

Люди начинают применять ФЯ не из фанатизма, как тебе наверно кажется, а потому, что они дают измеримое преимущество. Вовин применят Смолток не из фанатизма, а потому что он видит, что смолток позволяет ему (рискну предположить — вдвое) быстрее и качественнее делать софт.

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

А пока — извини. Все, что ты говоришь — это просто сказ о шкуре неубитого медведя.
Re[17]: ФЯ
От: Павел Леонов Россия icq: 138726397
Дата: 21.08.04 17:13
Оценка: 1 (1) +1
Здравствуйте, Gaperton, Вы писали :

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

PS. ФЯ я интересуюсь, ссылок на статьи и обсуждения Хаскеля и Ерланга у меня в броузере больше чем на МСДН, sourceforge и прочее, однако, имхо не все так просто и очевидно. Наибольшее впечатление пока от Смолтолка и его способностей к evolution design.
Posted via RSDN NNTP Server 1.9 beta
Re[8]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 21.08.04 17:17
Оценка:
Здравствуйте, Larm, Вы писали:

L>Здравствуйте, Gaperton, Вы писали:


G>>Правильнее (и честнее) сказать, что ты их не знаешь.

G>>Ты их не знаешь, [а так как ты видимо думаешь, что знаешь все,] следовательно их нет .

L>Не надо только снова про мобильную связь! Это узкая ниша — там этих проектов всего пара будет, остальное это их поддержка и небольшие расширения со временем. Широко, вне этой ниши, они не применяются. Десктоп приложения на них не пишут.


А почему, собственно, не надо? Телеком — это не только мобильная связь. Это сетевые маршрутизаторы, и еще много чего — посмотри в моих ссылках. Вообще — да, ты прав, вне этой ниши серьезного опыта промышленных применений ФЯ на данный момент нет, есть эпизодические. Тем не менее, это факты успешного применения. Таким образом...
L>Факты реального успешного применения нужны. Их нет.
...ты должен признать, что они есть. И весьма положительные — отчеты публично доступны. И если ты заинтересуешься — ты найдешь еще больше примеров.
Re[3]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 21.08.04 17:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Цунцуяби, Вы писали:


Ц>>Что-то Gapertona сильно бьют

Ц>>в этой ветке

VD>Дык кусается, вот и бьют.

Бьют, вот и кусаюсь.

Ц>>Вроде используют ФЯ :

Ц>>SQL, например, чем не ФЯ. Специализированный малость.
VD>Это скорее декларативный язык. ФЯ все же это отдельный класс прикладных языков. Собственно Gapertona пытается доказать, что ФЯ круче паравоза, а ему в ответ отчечают, что не вдили пока ФЯ в рельной жизни.
Собственно, Гапертон ничего такого доказать не пытается. Он не кричит — "императивные языки изжили себя". Это ему все пытаются доказать, что ФП — полный ацтой. А он препятствует опусканию ниже плинтуса.

Ты вот, например, начал свое первое письмо мне с первой фразой "ты здесь неправ", когда я мирно беседовал о смешении императивного и декларативного стиля в языке OCaml. В духе "сам с собой веду беседу". Твой ответ никак не не согласован с темой моего письма. На, перечитай. http://www.rsdn.ru/Forum/Message.aspx?mid=771466&amp;only=1
Автор: Gaperton
Дата: 19.08.04
А потом говори, кто кусается.
Re[17]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 19:42
Оценка: -5
Здравствуйте, Gaperton, Вы писали:

G>Значит так, Влад. Твои "нелестные слова" являются на самом деле бестактностью, хамством, и оскорблениями.


Можно все таки увидеть оскорбления тебя лично?

G> Мне все равно, как именно ты предпочитаешь называешь свои и чужие плохие манеры.


В данном случае я вижу, твои плохие манеры. Вернее прямое оскорбление собеседника. Кстати, не меня. И не вижу причины по которой должен перехдить на обсуждение себя.

G>то отправляй меня в бан. Или можешь сразу аккаунт удалить.


Ну, матернись разок и я тебе это гарантирую.

VD>>Да нет никаких провокаций. Люди тебе говорят что думают. А ты все провокациями считаешь. Плевать всем на эти ФЯ.

G>Во-первых, говори за себя, а не за всех.

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

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


Ты свои сообещения провол читать? Вот уж где безтактость. На первое возражение буря эмозий с кучей задевающих слов.

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

G>Давай я в порядке иллюстрации тоже скажу, что думаю, чтобы ты понял, что надо фильтровать поток сознания?


Ну, если без оскорблений, то почему бы и нет. А до этого ты говорил не то что думаешь?

G> Плевать всем на твой R#,


Ну, и что?

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


Или ты толком поянть. Ну, да тоже не проблема.

G> Дай бог, если им будет пользоваться столько же людей, сколько захудалым языком Hope.


Да я и не притендую. Мне интересно реализовать свои мысли. Если это удастся и результат меня удовлетворит, то я уже буду рад.

G> Это не провокация, чего ты злишься!


Где? Кто тебе это сказал. Я соврешенно спокоин.

G> Я просто говорю, что думаю. Ты теперь должен конструктивно отвечать, по делу, а не хамить.


Отвечаю.

Я прекрасно понимаю твою точку зрения. Более того без оскорблений она ничуть меня не задевает. Я и сам не верю в то, что в один момент вдруг R# превратится в самый популярный язык программирования. Но буду стараться сделать чтобы это было именно так. И уж ныть о том что все вокруг меня не понимают точно не буду.

G>Статья, собственно, датирована 1998 годом. 6 лет прошло.


Теболее. Актуальности она не потеряла.

G> Сейчас для того, чтобы запустить, надо для этого сначала скачать, потом запустить программу "сетуп", а потом ткнуть в появившуюся иконку в меню "Старт". Ты продолжишь настаивать, что это представляет для тебя сложность?


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

G>У тебя все в порядке с причинно-следственными связями?


У меня да. А вто у тебя... что-то сомнительно.

G> Не понимаешь, в каких случаях я указываю на "быдляцкие манеры"?


А не в каких не нужно. За одно это слово можно в бан на месяц. Тебе говорят, что не нужно его употреблять здесь. У тебя есть место где это делать можно. Вот там и делай.

G> Держи свои "нелестные слова" при себе, и никогда не услышишь процетированное в свой адрес.


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

G>Первой фразой в своем письме выше по ветке ты мне сообщил самую важную часть твоего мнения. "Здесь ты не прав".


И что? Это тебя оскорбило?

G> Бестактно так начинать письма,


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

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


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

G> Плюс, ты провоцируешь собеседника "упереться".


Серьезно? То есть я виноват в твоей упертости? Или это ты о других?

G> Ну и естественно, ни в коем случае не уступишь сам — мосты сожжены.


Чему я должен уступить? Напору? Да не уступлю. Крикам? Тоже не уступлю. Я уступаю только логически верным утверждениям и фактам. От тебя идут одни эмоции. Ты почему-то пытаешся кому-то что-то доказать, но получается не очень. И начинается злость. Ну, и злость выплескивается в первую очередь на тех кто тебе открыто говорит, что по его мнению ты не прав.

G>Функции высокого порядка и "ленивые вычисления" — это, основные и самые мощные механизмы ФЯ.


Функции высокого порядка несомненно интереская концепция. Концпция повтоного использования алгоритмов. Но одной ею щаслив не будешь. А линивые вычисления лично на меня вообще не оказывают никакого впечатления. Я и без ФЯ могу их делать. Вот только не часто нужно. Они нужны именно, чтобы избежать проблем полного просмотра информации в ФЯ. Для ИЯ — это не проблема.

G> Убери их — и от ФЯ почти ничего не останется.


Если это так, то привлекательность ФЯ становится просто сомнительной. Однако это все же не так. В ФЯ есть много других приемуществ.

G> Просто, чтоб ты знал.


А это ты говоришь, чтобы твои слова казались более весомыми? Или просто задеть охота?

G> Вообще, мне несколько странно, что ты, не зная ни одного ФЯ и не написав на нем ни одной программы (поправь меня, если это не так, назови язык, и мы поговорим предметно),


Поправлю. Я пробовал писать на ФЯ и много читал о них. Увидил некоторые приемущества, но как ты это назывешь "не вкурил".

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


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

G> и вдобавок говорить кому-то, что он не прав.


А... Понял. Тебе нельзя говорить, что ты не прав. Для этого нужно ученую степень иметь. Хотя нет вообще нельзя. Это же прямое оскорбление. Доказывать свои утверждения у тебя не очень получается, так что можно вместо этого выместить злость.

G> У тебя самого этот факт не вызывает никакого беспокойства? Я бы на твоем месте постеснялся.


Ты бы постеснялся на своем. Пользы было бы больше.

G>Все споры о производительности исключительно от стереотипов.


А ну, да у ФЯ искоственный интелект. Они во всех случаях знают самый лучший алгоритм.

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


Я в этом не виноват.

G>Есть такая программа на OCaml — Fastet Fourier Transform in the West (быстрое преобразование Фурье). Численные методы — что лучше для тестирования голой производительности?


Лучше что-то более близкое к жизни простых смертных. Про тесты у нас на сайте я тебе вроде уже говорил. Попрбуй возсоздай.

G> Она не зря называется Fastest. Попробуй ее обогнать на С#. А потом поговорим о производительности.


Это вопрос алгоритма. Можно и на ВБСкрипте сделать быстро. Затачили язык на это или нашли лучший алгоритм и добились хороших результатов. А вот не будет заточена реализация под конкретные пробелмы и приплыли.

G>Медленный и малопригодный код можно написать на любом языке, для этого ума много не нужно. Надо использовать сильные стороны технологии, а не слабые, и все будет в порядке.


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

G> Да, известны задачи, решение которых на императивных языках сильно проще и быстрее. Для этого в ФЯ есть императивные расширения,


Неудобные они, эти расширения. Мне было бы удобне иметь функциональный механизм в ИЯ.

G> и средства межязыкового взаимодействия.


Опять же слишком сложно. Тут как с встренным ассемблером. Нет проблем написать пару строче если надо. Но подключать еще один компилятор, ликовать и т.п. это утомительно.

G>Вообще-то этим преобразованием занимаются компиляторы.


Вот и плохо.

G> А твой подход может и хорош, у меня нет предубеждений. Но для начала тебе надо (я не указываю тебе что делать, просто напоминаю о том, что тебе сделать придется):

G>1) Полностью довести R# до рабочего состояния.

Ёжику понятно.

G>2) Убедительно показать, что этот подход будет давать реальные преимущества.


Тоже понятно. Работаем и над тем, и над тем.

G> Меня интересуют следующие измеримые преимущества:

G>- Заметное (в разы) сокращение объема программы в сравнении с аналогичной С++.

Это само собой. Это уже в принципе есть.

G>- Аналогичный рост продуктивности труда программиста.


Тоже само собой. Правда при определенных условиях. "Здарова, мир!" точно проще не станет. А вот многие сложные задачи упростятся. Первым делом перепишим сам R# на нем же. Первая ласточка уже есть. R# генерирует код сам для себя. Пока не много, но все же.

G>- Заметное (в разы) увеличение качества ПО при тех же затратах, что и на разработку с С++.


Я бы не стал сравнивать с С++. Качество ПО увеличивается просто при переходе на Шарп. Но в общем по сравнению с обычным императивным подходом качество конечно повысится. Генерируемый код резко упрощает реализацию многих объемных задач. Это то самый аспектный подход о котором многие сегодня так часто говорят.

G>3) Обеспечить качественную поддержку коммерческого уровня, и серьезные гарантии, что она не прекратится.


Это я прекрасно понимаю. И прекрасно понимаю, что это очень сложная и важная задача. Не уверен, что у нас это удастся, но будем пытаться. Если бы еще помошников было больше...

G> Видишь-ли, когда кто-то выбирает средство разработки для проекта с бюджетом от миллиона и выше, он автоматически связывает себя с этим средством лет эдак на 5-10.


Меня миллионы не интересуют. По крайней мере пока. Если кто-то возмется за миллионные проеткы на R# я конечно буду рад. Но если и нет, то не растроюсь.

G> И было-бы очень обидно, если через пару лет, когда в разработку вбухана куча бабла, выяснится, что спецификации R# изменились


Дык мы генерируем код на C# и надеюсь эта возможность не исчезнет. Так что как максимум заставит "жить как все".

G> без уведомления, команда разработки R# считает, что критичные для моего продукта дефекты исправлять не надо, "потому что это фигня", и уже год как перестали выходить bug-fix релизы, по причине того, что команда занята реализацией очередной гениальной идеи.


Возмет исходники и поправит сам.

G> Предупреждая ответ — твои слова в форуме, какие бы нелестные они не были — это не гарантии, Влад. Это слова. А нужны гарантии. И пока никаких гарантий ты дать не можешь.


А кто может? Гарантия одна, конечный код — это код на C# (хотя можно сделать на любом дотнетном языке). Мы надстраиваем возможности над уже популярным языком, а не делаем все снуля. Думаю — это позволит избежать пробелм что есть у ФЯ.

G>Замечу, что, например, с Erlang таких проблем нет и не будет, а применение Erlang по накопленой статистике промышленных применений за последние 10 лет дает измеряемый выигрыш по затратам минимум вчетверо при написании отказоустойчивых распределенных приложений.


Это все слва сказанные теми кто неравнодушен к Erlang. Реальная статистика говорит о том, что количество его применений не сапоставима с популярными языками. Многие программисты не знают что значит слово Erlang не то что сам язык. Честно говоря эта тема уже надоела. Статистика твоя не убедительна. Читать код на ФЯ откровнно тяжело. Учить ФЯ очень тяжело. Мэйнстрим ими интересуется из любомытсва. И я не вижу рельного решения этих проблем. А без этого они так и останутся невостребованными гениальными идеями.

G> А это далеко не самый гибкий из ФЯ. Я уж не говорю об отказоустойчивости. Этот ненадежный динамически типизированный язык


Надежный и динамически-типизированный для меня лично понятия не совместимые.

G>позволяет при разумных затратах писать софт объемем 1.7 миллионов строк кода с измеряемым временем отказов 99.9999999% (это 30 наносекунд в год. пример — AXD switch).


Чистой воды рекламщина. Вот именно такие заявления приводят к тому, что на остальные слова никто даже не взглянет.

G> Он позволяет доказывать корректность реализации (благодаря тому, что это ФЯ),


А доказывать доказательства им же? Верификация есть не только у ФЯ. Но от ошибок это еще никого не застраховала.

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


А нужно это кому-то? Ну, если реактор или самолоет обсчитывать, то возможно. Но 99% пишут бизнес софт. Где не то что доказать что-то а просто разобраться в законодательстве невозможно. Так что это все опят же грасивые громкие слова. Толку он них нет. Тебе уже не раз говорили, что если бы все было так изумительно как ты пытаешься представить, то никто уже давно бы не программировал бы на ИЯ.

G>Люди начинают применять ФЯ не из фанатизма, как тебе наверно кажется, а потому, что они дают измеримое преимущество.


Скорее всего так и будет... если это когда нибудь случится.

G> Вовин применят Смолток не из фанатизма, а потому что он видит, что смолток позволяет ему (рискну предположить — вдвое) быстрее и качественнее делать софт.


А я по тем же причинам использую C# и все твои бездоказательные предположения и утверждения пока что ни миня, ни других кто тебя слушал не убедили. даже наоборот. Кстати, какое отношение к ФЯ имеет Смлоток? Или это просто потому что тоже экзотика?

G>Вот когда твой подход даст измеряемый выигрыш по затратам хотя-бы на одном классе приложений хотя-бы вдвое (а лучше в четверо).


Похоже ты волнуешся за судьбу R# больше чем я. Мы постораемся. А что получится загадвать не буду. По моим рассчетам на некоторых задачах можно будет резко повысить и качетво кода, и его скорость, и скорость разработки, и простоту соправождения. Более того генерация кода на базе метаинформации из сборок уже неимоверно упростили реализацию и поддержку самого R#.

G> Когда тебе удастся сделать императивный язык, который позволит писать хотя-бы в половину такие надежные программы, как на ФЯ (с возможностью доказательств корректности).


А мне не нужны доказательства. Это тебе нужно ты с ним и мучайся. Меня удовлетворит мнение что продукты на R# получаются более устойчивыми чем на C# или C++.

G>Вот тогда я с интересом послушаю, и постараюсь разобраться, чем твой подход лучше ФЯ.


То есть чужие аргументы тебя не интересуют? Ну, а что ты тогда раздражаешся когда тебе говрят, что мы посмотрим на твоим хваленые ФЯ когда на них будет программировать хотя бы 10% программистов?

G> Да и не только я — все тебе в рот заглядывать будут и всем будет интересна твоя точка зрения.


В рот? Не это лишнее.

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


То что я говорю — это мои мысли. Я заранее говорю, что это всего лишь мои мысли. Так что чьи слова больше смахивают на сказку нужно еще разобраться.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Тебе мозги насиловать необязательно.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 19:42
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Попробуй все-таки написать на ФЯ хоть что-нибудь. Возможно, ощущение сходства с ассемблером исчезнет.


В чем-то он прав. Написать конечно не сложно. А вот понять потом... Читая код на ФЯ ощущаю себя дешифровщиком. Почему-то все время вспоминается Перл.

INT>А насчет насилования мозгов — ФП, вобщем, не сложнее матанализа университетского уровня




INT>Кстати, все, кто считает, что функциональное программирование не нужно, могут перестать использоваться STL и забыть слова инкапсуляция и полиморфизм. Ибо все это как раз и есть элементы ФЯ, привнесеный в С++.


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

INT>P.S. Народ, чо это мы, а? Почему вдруг на личности стали скатываться? Включая Влада, который, как админ, вообще должен личный пример, аки пионер, подавать?


А где я на личности перехожу? Да и не модер я в этом форуме.
А вообще, поддерживаю! Лучше какой-нибудь конструктив обсудить.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Тебе мозги насиловать необязательно.
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.08.04 19:42
Оценка:
Здравствуйте, bkat, Вы писали:

B>А что такое по-твоему, к примеру,

B>полиморфизм и почему это не может быть в функциональных языках?

Что-то не пойму. Полиморфизм, что только в них есть? Или он в ООП привнесен из ФЯ?

Ну, есть он и там, и там. Что плохого то?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Тебе мозги насиловать необязательно.
От: bkat  
Дата: 21.08.04 19:55
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, bkat, Вы писали:


AD>>>С каких это пор инкапсуляция и полиморфизм стали элементами ФП?

B>>А что такое по-твоему, к примеру,
B>>полиморфизм и почему это не может быть в функциональных языках?

AD>Да, беру свои слова насчёт полиморфизма обратно. Сделал поиск и, с удивлением для себя обнаружил, что в полиморфизм является одним из принципов ФП.


А с инкапсуляцией в чем проблема?
Тоже в общем, если приглядеться, она там есть.

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

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

Кстати, Gaperton упоминал, что программы на функциональных языках
можно чаще доказывать формальными методами на корректность.
Уже только этого достаточно, чтобы обратить внимание на функциональные языки.
Особенно там, где надежность программ — это основное требование.
Re[6]: Тебе мозги насиловать необязательно.
От: bkat  
Дата: 21.08.04 20:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, bkat, Вы писали:


B>>А что такое по-твоему, к примеру,

B>>полиморфизм и почему это не может быть в функциональных языках?

VD>Что-то не пойму. Полиморфизм, что только в них есть? Или он в ООП привнесен из ФЯ?


VD>Ну, есть он и там, и там. Что плохого то?


Я не объектных языках и не о том, кто у кого какие идеи перенял.
Речь идет только о функциональных языках.
Оригинальный вопрос был

С каких это пор инкапсуляция и полиморфизм стали элементами ФП?

На него и отвечаю
Re[4]: Тебе мозги насиловать необязательно.
От: ArtDenis Россия  
Дата: 22.08.04 05:51
Оценка:
Здравствуйте, VladD2, Вы писали:

INT>>Попробуй все-таки написать на ФЯ хоть что-нибудь. Возможно, ощущение сходства с ассемблером исчезнет.

VD>В чем-то он прав. Написать конечно не сложно. А вот понять потом... Читая код на ФЯ ощущаю себя дешифровщиком.

Тут ты не прав. Всё зависит от опыта. Когда я сдавал лабораторные на лиспе, преподаваьтель толко мельком взглянув на листинг, сразу заметил: вот сдесь ошибка..., вот здесь можно упростить так..., вот сдесь сделано неоптимально... и т.д.
Надо ещё учесть, что если бы он спросил меня, что делает какая-либо строчка в коде, то мне пришлось бы очень сильно поднапрячься, чтобы вспомнить, что же я имел ввиду, когда её писал
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[5]: Тебе мозги насиловать необязательно.
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.04 07:29
Оценка:
Здравствуйте, ArtDenis, Вы писали:

VD>>В чем-то он прав. Написать конечно не сложно. А вот понять потом... Читая код на ФЯ ощущаю себя дешифровщиком.


AD>Тут ты не прав. Всё зависит от опыта. Когда я сдавал лабораторные на лиспе, преподаваьтель толко мельком взглянув на листинг, сразу заметил: вот сдесь ошибка..., вот здесь можно упростить так..., вот сдесь сделано неоптимально... и т.д.


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

AD>Надо ещё учесть, что если бы он спросил меня, что делает какая-либо строчка в коде, то мне пришлось бы очень сильно поднапрячься, чтобы вспомнить, что же я имел ввиду, когда её писал


Вот именно. Так что в чем-то он прав.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Тебе мозги насиловать необязательно.
От: ON  
Дата: 22.08.04 07:43
Оценка:
>Вот именно. Так что в чем-то он прав.

Когда INTP_mihoshi предложил написать что-нибудь, я сразу запустил OCaml, написал

let rec a = function x -> x + 2;;
a 4;;

и получил 6. Если учесть, что я не видел пол года, ничего на нем не писал кроме такой ерунды, очевидно это у меня в пальцах запомнилось. Я не только не понял как это было отпарсено и выполнено, но и кто водил моими пальцами когда я это печатал... Полный мрак.
Posted via RSDN NNTP Server 1.9 beta
Re[7]: Тебе мозги насиловать необязательно.
От: ON  
Дата: 22.08.04 07:49
Оценка: :)
Вообще-то бывало и хуже.
Самая первая команда которую я набрал на компьютере была "color". Так как в Бейсике переменные инициализировись нулем, получил черные буквы на чемном экране. Позже в Турбо Паскале попал в clipboard. Что такое меню я тогда не знал. Тоже пришлось машину перезапускать.
Posted via RSDN NNTP Server 1.9 beta
Re[8]: Тебе мозги насиловать необязательно.
От: ON  
Дата: 22.08.04 07:57
Оценка:
А вот Windows-форма на F#. Ассемблер еще напоминает потому что писать приходиться в Far'e. Ходя довольно любопытно выходит управлять Excel'ем практически из командной строки.

open System
open System.Windows.Forms

let form = new Form()

let _ = form.Text <- "1st F# App"
let menu = form.Menu <- new MainMenu()
let mnuFile = form.Menu.MenuItems.Add("&File")
let mnuiSayHelloI = new MenuItem("&Say Hello",
new EventHandler(fun sender e -> form.Text <- "Hello"),
Shortcut.CtrlH)
let mnuiSayHello = mnuFile.MenuItems.Add(mnuiSayHelloI)

let _ = Application.Run(form)
Posted via RSDN NNTP Server 1.9 beta
Re: Почему никто не использует функциональные языки
От: WolfHound  
Дата: 22.08.04 08:39
Оценка: 15 (1)
Здравствуйте, Gaperton, Вы писали:

Короче скачал я тут OCaml... Блин... У недоделаного R# тулзов больше и пользоваться ими удобней не смотря на то что все тулзы делались на коленке и в основном для тестов. Причем эти тулзы уже можно применять вреальных проектах для автоматизированного поиска возможных логических ошибок в программах на C#.
Ну что сложно было сделать табконтрол и на один таб поместить нормальный редактор, а на другой консоль? И сделать несколько шорткатов. До этого сложно додуматься? Или сложно реализовать?
Короче это не смотря на всю супурпуперность о которой ты говоришь использовать нельзя.
Итого: Судя по OCaml воз и ныне там.
... << RSDN@Home 1.1.4 rev. 142 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: ФЯ
От: INTP_mihoshi Россия  
Дата: 22.08.04 12:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>То есть тебе самому смешно?

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

А тебе не смешно? Было сказано, что опытный программист легко понимает чужой код на ФЯ. Ты можешь сказать то же самое про ИЯ? Ты всегда легко понимашь чужой код? Включая код, написанные неопытными программистами?
Re[2]: Ну, если нет кнопочек, то делать неча...
От: INTP_mihoshi Россия  
Дата: 22.08.04 13:14
Оценка: 18 (1)
Здравствуйте, WolfHound, Вы писали:

WH>Короче скачал я тут OCaml... Блин... У недоделаного R# тулзов больше и пользоваться ими удобней не смотря на то что все тулзы делались на коленке и в основном для тестов. Причем эти тулзы уже можно применять вреальных проектах для автоматизированного поиска возможных логических ошибок в программах на C#.


Конкретно, чего именно тебе не хватает в Caml, чтое есть в R#?

Прежде чем отвечать, взгляни на Camlp4
здесь

Camlp4 is a preprocessor for OCaml. As a preprocessor, you can do syntax extensions to your OCaml programs. But Camlp4 also provides some other features:

    * A system of grammars
    * A kind of macros called quotations
    * A revised syntax for OCaml
    * A pretty printing system of OCaml programs
    * and other: extensible functions, functional streams, .


У меня сордается ощущение, что по возможностям эта штука покрывает R# как бык овцу. Возможно, обманчивое У него же нет кнопочек...

WH>Ну что сложно было сделать табконтрол и на один таб поместить нормальный редактор, а на другой консоль? И сделать несколько шорткатов. До этого сложно додуматься? Или сложно реализовать?


Просто. Имху достаточно часа от силы и знания lablTk.

WH>Короче это не смотря на всю супурпуперность о которой ты говоришь использовать нельзя.

WH>Итого: Судя по OCaml воз и ныне там.

здесь

>   Q3. What kind of development framework are available in spirit of
>       Delphi/Kylix/Glade?

Emacs! You need something else??



И вообще лучше потри ocamlwin.exe. Он там от лукавого и действительно крив. Запускай ocaml.exe — честное консольное приложение. Дебаггеры и полноценное IDE есть, но почему-то только под никсами...
здесь
Конечно, если ты хочешь действительно разобраться в вопросе.
Re[3]: The graphical interface to the OCaml debugger.
От: INTP_mihoshi Россия  
Дата: 22.08.04 14:39
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

Вдогонку — кому лень искать может взглянуть на интерфейс дебаггера здесь

А это собственно сайт Cameleon
Re[8]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.08.04 16:19
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>Реализация ФЯ была с самого начала сопряжена с большими затратами. К моменту, когда они попытались попасть в прикладное программирование, сложилось как минимум поколение (а то и не одно) людей, уверенных, что язык общего назначения должен быть императивным. В итоге приживались только те технологии, которые не слишком нарушали эту догму. При этом, что характерно, в узких нишах ФЯ таки сумели прорваться — SQL применяется повсеместно. Как ни странно, оказалось, что императивная обработка данных не устраивает даже ярых противников ФЯ. Кроме того, тут речь идет не о мелких шажках типа порядка вычисления аргументов, а о глобальных оптимизациях. И вот тут-то отсутствие императивности начало рулить со страшной силой, не давая программисту навязать умному серверу свои убогие представления о наилучшем способе получения результата.


Антон, а не кажется тебе что ты слишком широко трактуешь термин ФЯ? Если принять за ФЯ sql то очень большое количество языков попадут под это определение. Причем часть из них не воспринимается как средство программирования (например язык запросов любого поисковика) или не позиционируется как язык программирования (как к примеру тот же xslt).
А в вышеупомянутой статье имхо трактовка куда уже. И это понятно почему — если обсуждать огромное количество декларативных и полудекларативных миниязыков то нет оттенка сенсационности.
... << RSDN@Home 1.1.4 beta 2 rev. 166>>
AVK Blog
Re[9]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 22.08.04 17:02
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


AVK>А в вышеупомянутой статье имхо трактовка куда уже. И это понятно почему — если обсуждать огромное количество декларативных и полудекларативных миниязыков то нет оттенка сенсационности.

Его (оттенка сенсационности) там и так нет.
А трактовка действительно поуже, ты прав. Примерно, как здесь: FAQ по функциональным языкам.
Re[10]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.08.04 17:06
Оценка:
Здравствуйте, Gaperton, Вы писали:

AVK>>А в вышеупомянутой статье имхо трактовка куда уже. И это понятно почему — если обсуждать огромное количество декларативных и полудекларативных миниязыков то нет оттенка сенсационности.

G>Его (оттенка сенсационности) там и так нет.

Есть есть. Увы, но такова особенность западной науки — любой успешный западный ученый это как правило популяризатор.
... << RSDN@Home 1.1.4 beta 2 rev. 166>>
AVK Blog
Re[10]: Почему никто не использует функциональные языки
От: Павел Леонов Россия icq: 138726397
Дата: 22.08.04 17:17
Оценка:
Здравствуйте, Gaperton, Вы писали :

AVK>>А в вышеупомянутой статье имхо трактовка куда уже. И это понятно

AVK>>почему — если обсуждать огромное количество декларативных и
AVK>>полудекларативных миниязыков то нет оттенка сенсационности.
G> Его (оттенка сенсационности) там и так нет.
G> А трактовка действительно поуже, ты прав. Примерно, как здесь:
G> FAQ по функциональным<br />
<span class='lineQuote level1'>G&gt; языкам</span>
.


С определением соглашусь, растолкуйте пожалуйста, почему SQL не подпадает под него?
Posted via RSDN NNTP Server 1.9 beta
Re[11]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 22.08.04 17:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Gaperton, Вы писали:


AVK>>>А в вышеупомянутой статье имхо трактовка куда уже. И это понятно почему — если обсуждать огромное количество декларативных и полудекларативных миниязыков то нет оттенка сенсационности.

G>>Его (оттенка сенсационности) там и так нет.

AVK>Есть есть. Увы, но такова особенность западной науки — любой успешный западный ученый это как правило популяризатор.

Про особенность западной науки — да, так часто бывает . И таки в чем по твоему оттенок сенсационности в этой статье?
Re[7]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.04 17:19
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>А тебе не смешно?



Нет.

INT> Было сказано, что опытный программист легко понимает чужой код на ФЯ.


Где было сказано? И потом речь он не очень поытных.

INT> Ты можешь сказать то же самое про ИЯ?


В общем, да. Понять его проще.

INT> Ты всегда легко понимашь чужой код? Включая код, написанные неопытными программистами?


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

Кстати, в дотне и без кода. Я не раз разбирался в декомпилированном коде фрэймворка.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ну, если нет кнопочек, то делать неча...
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.04 17:19
Оценка: 4 (1) +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>И вообще лучше потри ocamlwin.exe. Он там от лукавого и действительно крив. Запускай ocaml.exe — честное консольное приложение. Дебаггеры и полноценное IDE есть, но почему-то только под никсами...

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

Собственно полное подтверждение слов WolfHound-а. Не ставить же мне БСД или Линукс чтобы поиграться с языком?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ну, если нет кнопочек, то делать неча...
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.04 17:19
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Прежде чем отвечать, взгляни на Camlp4

INT>здесь

Кстати, даже внешний вид док выглядит так как будто авторам плевать на тех кто их будет четать.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ну, если нет кнопочек, то делать неча...
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.08.04 17:19
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Конкретно, чего именно тебе не хватает в Caml, чтое есть в R#?


R# — это не препроцессор. Это генератор кода на базе AST.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: ФЯ
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.08.04 18:21
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Что за быдляцкие манеры.

Спокойнее.
... << RSDN@Home 1.1.4 beta 2 rev. 166>>
AVK Blog
Re[12]: ФЯ
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.08.04 18:21
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF> Верно. Только для полноты картины вспомни о затратах ресурсов на переключение контекста.


Но тем не менее у нас получается в рамках одного проекта успешно применять C#, SQL, XSLT и собственный декларативный язык, причем зачастую один генерит программу на другом и наоборот, и что то переключение контекста особых проблем не вызывает.
... << RSDN@Home 1.1.4 beta 2 rev. 166>>
AVK Blog
Re[12]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.08.04 18:55
Оценка:
Здравствуйте, Gaperton, Вы писали:

AVK>>Есть есть. Увы, но такова особенность западной науки — любой успешный западный ученый это как правило популяризатор.

G>Про особенность западной науки — да, так часто бывает . И таки в чем по твоему оттенок сенсационности в этой статье?

А вот те самые ФЯ и то что они перевернут мир .
... << RSDN@Home 1.1.4 beta 2 rev. 166>>
AVK Blog
Re[2]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.08.04 19:51
Оценка:
Здравствуйте, ON, Вы писали:

ON>Если эти языки такие могучие, что ж их фанаты не в состоянии самим себе IDE написать?

ON>Теоретики, понимаешь, короли мысли. В падлу себе сопли утереть?

Постарайся выражаться в более корректной форме.
... << RSDN@Home 1.1.4 beta 2 rev. 166>>
AVK Blog
Re[3]: Почему никто не использует функциональные языки
От: Цунцуяби Россия  
Дата: 23.08.04 03:52
Оценка: 18 (2) +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Цунцуяби, Вы писали:


Ц>>Что-то Gapertona сильно бьют

Ц>>в этой ветке

VD>Дык кусается, вот и бьют.


Надо вам как-то помириться ...
Водки выпить, штоли ...

Карринг — это по имени математика (вроде как ?) — где-то ты Влад спрашивал

Развели спор Лейбница с Ньютоном.

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

Я вообще предлагаю сделать на RSDN форум ФЯ.
Пусть там будет мало народу, хотя кто знает ?
Ведь и про электричество спрашивали какой из него толк.
Я считаю, что ФЯ нуждаются в продвижении ( популяризация — какое-то двусмысленное слово )
Может, например, для квантового компьютинга это будет одним из удобнейших применений, кто знает.
Так что пусть первопроходцы использования ФЯ топчут тропу через RSDN.
Не будет толка — ничего страшного. Будет — мы были ПЕРВЫМИ.
Re[9]: Почему никто не использует функциональные языки
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.08.04 04:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Антон, а не кажется тебе что ты слишком широко трактуешь термин ФЯ? Если принять за ФЯ sql то очень большое количество языков попадут под это определение.

Это например какие?
Вот тут ссылка пробежала, цитирую:

Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these language are formed by using functions to combine basic values. A functional language is a language that supports and encourages programming in a functional style.

В SQL у нас нет (если не рассматривать вендор-расширения) способа управлять исполнением команд. Мы вычисляем выражения. Да, он очень специфический, поскольку в нем есть только один тип операндов — реляции. Тем не менее, оператор select — чистое FP, прямо как здесь написано.
AVK>Причем часть из них не воспринимается как средство программирования (например язык запросов любого поисковика)
Ну, для FP язык поисковика не очень подходит. Для того, чтобы назвать его функциональным языком программирования, потребуется определить, что в нем является функцией, и что куда эта функция отображает. Кроме того, в нем не видно возможности строить новые функции, комбинируя существующие. (Хотя из вышеупомянутого определения и не следует такой необходимости, интуитвно от FP хочется больше, чем от вычисления ровно одной функции двух аргументов)
AVK>или не позиционируется как язык программирования (как к примеру тот же xslt).
Кстати, почему? Вот он (насколько я знаю) вполне "функционален". В том смысле, что в нем функции отображают элементы множества в элементы того же множества, что позволяет (теоретически) комбинировать их для получения новых функций.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Где у ФЯ матчасть?
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.08.04 05:00
Оценка:
Здравствуйте, ON, Вы писали:

ON>Где можно посмотреть исходники интерпретатора? Лучше что-нибудь по-проще, джентлементский набор.

ON>Для lisp'а у меня есть by Marc Adler, 735 строк, всего лишь.

ON>Для императивного языка мат.частью является процессор, если знаешь как он работает, как-то сразу и программы на ум приходят. Аналогично с Windows API. Хотелось бы узнать что за чудо понимает код ФЯ.


Не совсем понятно что ты хочешь — мат. часть или исходники? (ну вещи ведь совсем разные по сути) Если по поводу мат. части, то тут главенствуют вроде бы как лямбда-исчисления (знатоки меня поправят, если что)
Re[13]: Можно и попроще
От: faulx  
Дата: 23.08.04 06:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, INTP_mihoshi, Вы писали:


INT>>В Haskell то, что ты написал, выглядит так.


INT>>
INT>> map xxx x
INT>>


VD>Рад за них. Но это совсем не понятно. Краткость не есть качество.


На вас не угодишь. А так понятнее?
foreach func list



VD>К сожалению, все же за меня уже сделан выбор. Я могу выбрать только вариации, но все они связаны с рекусрисей и как следствие с перестройкой мозга на рекурсивный лад. А мне хотелось бы получить возможности декларатиного задания алгоритмов без подобных жертв. И с простым и понятный синтаксисом. Ведь даже то что ты привел из OCaml довольно некрасиво выглядит.


Выскажу парадоксальную мысль. Если в вашей программе на ФЯ встречается рекурсия, значит, почти наверняка вы делаете что-то неправильно.

Дело в том, что с каждым ФЯ идет в поставке богатая библиотека и вся рекурсия спрятана в функциях этой библиотеки. Чтобы обработать список, никакой рекурсии не надо, вполне достаточно стандартных функций. В качестве аналога можно привести алгоритмы STL — при повсеместном их использовании количество циклов в программе на С++ резко сокращается. Вообще, STL — это такой маленький и уродливый аналог библиотеки ФЯ.
Re[7]: Это можно и попроще написать
От: INTP_mihoshi Россия  
Дата: 23.08.04 06:54
Оценка:
Здравствуйте, ON, Вы писали:

ON>let rec a = function x -> x + 2;;

ON>a 4;;

let a x = x + 2;;
Re[10]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.08.04 07:36
Оценка: 32 (1)
Здравствуйте, Sinclair, Вы писали:

S> Да, он очень специфический, поскольку в нем есть только один тип операндов — реляции. Тем не менее, оператор select — чистое FP, прямо как здесь написано.


Вопрос в определении — в академическом смысле да, и sql и xslt частично ФЯ. Но в смысле практическом за ФЯ обычно принимают языки вроде ML и его потомков, и именно в таком смысле этот термин употребляется в статье.

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


y = f(x),
где x это вводимая фраза, y результат поиска, f(x) собственно искомая функция.

S> Кроме того, в нем не видно возможности строить новые функции, комбинируя существующие.


Почему? Например функция "" или функция + могут образовывать составную функцию.

S> (Хотя из вышеупомянутого определения и не следует такой необходимости, интуитвно от FP хочется больше, чем от вычисления ровно одной функции двух аргументов)


Интересно — сначала ты привел чисто формальное определение и чисто формально натянул его на декларативный sql, хотя он существенно отличается от форм записи реляционной алгебры, а теперь чисто интуитивно отказываешь в такой же операции в отношении языков поисковиков. Вобщем ты уж поределись — если берем формальное определение то подходят оба, если же интуитивное то не подходит ни один.

AVK>>или не позиционируется как язык программирования (как к примеру тот же xslt).

S>Кстати, почему?

Потому что это не язык программирования, а язык трансформаций. Область применения очень специфична — преобразование иерархических структур.

S> Вот он (насколько я знаю) вполне "функционален".


Ровно как и вполне императивен.

S> В том смысле, что в нем функции отображают элементы множества в элементы того же множества,


Э нет. Функции (шаблоны) в нем отображают элементы входного множества в элементы выходного. Входное и выходное множество не пересекаются.

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


Почему теоретически? apply-templates осуществляет комбинацию в функциональном стиле, call-template в императивном. То и другое являются краеугольными камнями xslt.
... << RSDN@Home 1.1.4 beta 2 rev. 168>>
AVK Blog
Re[12]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 07:37
Оценка: +1
Здравствуйте, AndreyFedotov, Вы писали:


AF> И понятнее и проще. Но не функционально-языкасто. А потому есмь ересь и должно Mustdie (следуя логике проповедников ФЯ).

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

А вот про то, что рекурсия — "ацтой", и должно Mustdie, просто потому, что она кому-то непонятна, постов уже много. Вы последовательно доказываете, что Вадлер был слишком оптимистичен в своем последнем абзаце.
Re[11]: Почему никто не использует функциональные языки
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.08.04 07:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:


S>> Кроме того, в нем не видно возможности строить новые функции, комбинируя существующие.


AVK>Почему? Например функция "" или функция + могут образовывать составную функцию.


Они могут работать с результатами, полученными от других поисков?
т.е. можно сделать так:
combine(google("красная"),google("шапочка")) ????????
где combine — это + (просто предст. в виде формулы), а google("шапочка") — это результат поиска слова "шапочка" (т.е. тупо страница гугла)
Что-то плоховато пересечение страниц гугла можно себе представить как комбинацию фунцкий...
Re[13]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 07:45
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Gaperton, Вы писали:


AVK>>>Есть есть. Увы, но такова особенность западной науки — любой успешный западный ученый это как правило популяризатор.

G>>Про особенность западной науки — да, так часто бывает . И таки в чем по твоему оттенок сенсационности в этой статье?
AVK>А вот те самые ФЯ и то что они перевернут мир .
Как странно, ты уже не первый, кто видит в ней ней то, чего там нет. Вон, с Федотовым поабзацно "вслух" читали — все равно не понимает. Проповедники ему везде мерещатся. Простая вроде статья. Понятная.
Re[4]: R# vs ФЯ :)
От: INTP_mihoshi Россия  
Дата: 23.08.04 07:50
Оценка: :)
Здравствуйте, VladD2, Вы писали:

INT>>Конкретно, чего именно тебе не хватает в Caml, чтое есть в R#?


VD>R# — это не препроцессор. Это генератор кода на базе AST.


Если ты не в курсе, то таки препроцессор. По крайней мере, проект называется "R# — препроцессор/компилятор"

Camlp4 позволяет парсить Ocaml (в том числе в AST), добавлять в него новые грамматические конструкции и менять существующие.

Другой вопрос, что OCaml и без препроцессоров может о себе позаботиться Ему, в отличии от C#, костыли не нужны. Camlp4 может пригодиться, разве что, для АОП. Классы в нем есть, множественное наследование и темплейты included. А если бы классов и не было (или тебе они почему-то не понравились), то можно написать свои. Нет, для этого не нужен препроцессор, все в рамках языка. "Возможности вроде функциональных языков", сам понимаешь, имеются

Что касается парсинга, то да, есть парсеры на Ocaml, аналогичные Yacc/Lex. И они входят в стандартную поставку. Но также можно парсить без использования внешних форматов и это будет выглядеть не существенно сложнее. Нет, парсить можно не только функциональные языки. На сайте языка есть примеры парсеров, например, Паскаля и Лого.

Тут меня надо спросить, а почему же при всем при этом Ocaml не юзают все кому не лень. Ответ, я кажется, почти понял, но налеюсь, что его скажет кто-нибудь, кто знает этот язык лучше. Возможно, одна из причин в том, что практическая польза языка не только в том, что он позволяет делать, но и в том, что он не позволяет А вот со вторым у OCaml явные напряги
Re[12]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.08.04 07:57
Оценка:
Здравствуйте, Курилка, Вы писали:

S>>> Кроме того, в нем не видно возможности строить новые функции, комбинируя существующие.


AVK>>Почему? Например функция "" или функция + могут образовывать составную функцию.


К>Они могут работать с результатами, полученными от других поисков?


А при чем тут другие поисковики?
... << RSDN@Home 1.1.4 beta 2 rev. 168>>
AVK Blog
Re[13]: Почему никто не использует функциональные языки
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.08.04 08:12
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Курилка, Вы писали:


S>>>> Кроме того, в нем не видно возможности строить новые функции, комбинируя существующие.


AVK>>>Почему? Например функция "" или функция + могут образовывать составную функцию.


К>>Они могут работать с результатами, полученными от других поисков?


AVK>А при чем тут другие поисковики?


Читай, что написано "других поисков", где ты там поисковики нашёл?
Re[3]: Где у ФЯ матчасть?
От: ON  
Дата: 23.08.04 08:24
Оценка:
From: Курилка

>Не совсем понятно что ты хочешь — мат. часть или исходники? (ну вещи ведь совсем разные по сути) Если по поводу мат. >части, то тут главенствуют вроде бы как лямбда-исчисления (знатоки меня поправят, если что)


И то и другое.
— теорию, желательно по-русски.
— какой-нибудь ML-интерпретатор в исходниках.
— хотя бы примерно описание как работает то, что ФЯ-компиляторы выдают.
Posted via RSDN NNTP Server 1.9 beta
Re[14]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.08.04 08:27
Оценка: 1 (1) +1 :)
Здравствуйте, Gaperton, Вы писали:

AVK>>А вот те самые ФЯ и то что они перевернут мир .

G>Как странно, ты уже не первый, кто видит в ней ней то, чего там нет. Вон, с Федотовым поабзацно "вслух" читали — все равно не понимает. Проповедники ему везде мерещатся. Простая вроде статья. Понятная.

А может ты не видишь? Когда один ошибается это еще ладно. А вот когда несколько человек воспринимают одинаково то закрадывается подозрение что не все так просто .

Собственно в самом начале мы видим такую фразу:

Эксперименты не всегда подтверждать, эту цифру — иногда они показывает улучшение только в четыре раза. Однако, не стоит пренебрегать кодом, который в четыре раза короче, в четыре раза быстрее писать, или в четыре раза проще поддерживать. Так почему же функциональные языки не используются более широко?


Оказывается существует способ в четыре раза быстрее писать и проще поддерживать, а его никто не использует. ВОт тебе и сенсация.
... << RSDN@Home 1.1.4 beta 2 rev. 168>>
AVK Blog
Re[14]: Почему никто не использует функциональные языки
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.08.04 08:38
Оценка: -1
Здравствуйте, Курилка, Вы писали:

AVK>>А при чем тут другие поисковики?


К>Читай, что написано "других поисков", где ты там поисковики нашёл?


Понятно. Ты слишком узко трактуешь рекурсию. Возьмем к примеру язык гугля. Возьмем простейшую функцию — найти ссылки, содержащие слово. find(word) : hrefs. Записывается она так:

word


Едем дальше — теперь возьмем функцию найти ссылки, обязательно содержащие слово. req(hrefs) : hrefs. Таким образом req(find(word)) записывается так:

+word


Наконец берем функцию — найти фразу, содержашую либо одно, либо другое слово. or(hrefs1, hrefs2) : hrefs. Тогда or(find(word), req(find(word2))) запишется так:

word +word2


Понятно что в реальности так поисковик не работает, но это уже детали реализации, а внешне все прекрасно вгоняется в рамки функционального языка.
... << RSDN@Home 1.1.4 beta 2 rev. 168>>
AVK Blog
Re[5]: R# vs ФЯ :)
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 08:51
Оценка: +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Тут меня надо спросить, а почему же при всем при этом Ocaml не юзают все кому не лень.

Потому, что
— Есть куча уже написанного кода на С++/С#/Java, который надо развивать и поддерживать.
— Проще найти специалиста по С++/С#.
— Со стороны програмиста — знание OCaml (Haskell, whatever) не увеличивает его ценность на рынке труда. Он не чувствует необходимости тратить на него время.
— К тому-же, среда программирования не настолько "дружественна", как в коммерческих средствах разработки. Это отпугивает.
— Популярность языка обусловлена также количеством денег, потраченным на рекламу и продвижение. Mainstream — это бизнес, и его участники заинтересованы, чтобы все использовали С# и Java, потому, что в них вложены большие средства. Популярность же остальных "бесплатных языков" так или иначе связана с популярностью Linux.
— Существует набор предубеждений о ФЯ среди незнакомых с ними людей. У ФЯ есть слабые места. Но предубеждения обычно не имеют к ним отношения.

Заметно поправить ситуацию сможет только включение любого из современного ФЯ в учебную ВУЗовскую программу как одного их основных языков.

INT>Ответ, я кажется, почти понял, но налеюсь, что его скажет кто-нибудь, кто знает этот язык лучше. Возможно, одна из причин в том, что практическая польза языка не только в том, что он позволяет делать, но и в том, что он не позволяет А вот со вторым у OCaml явные напряги

О чем ты говоришь? . Никто даже и не догадывается, что OCaml позволяет делать, и, что характерно, не хочет знать. Все, что большинство о нем знает — что в нем есть страшная и неудобная рекурсия, что и обсуждается. Еще обсуждаются, в каком кривом формате (PDF) приведенные ссылки. "Цвет учебника" не нравится.
Re[13]: ФЯ
От: AndreyFedotov Россия  
Дата: 23.08.04 08:58
Оценка: :))
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, AndreyFedotov, Вы писали:


AF>> Верно. Только для полноты картины вспомни о затратах ресурсов на переключение контекста.


AVK>Но тем не менее у нас получается в рамках одного проекта успешно применять C#, SQL, XSLT и собственный декларативный язык, причем зачастую один генерит программу на другом и наоборот, и что то переключение контекста особых проблем не вызывает.

Естественно. Потому, что у Вас оно — сбалансированно. Более того — редко найдёшь хоть сколько-нибудь заметный проект, где бы использовался только один язык.
Тебе известны проекты, где бы одновременно применялось 30-40 языков? Мне — нет. И догадываюсь почему...
Читал, что лет так 30 назад у Пентагона подобные проекты были — и неизменно проваливались. Авторы книги утверждали, что именно это побудило DARPA создать язык ADA и потребовать переход субподрядчиков Пентагона на него. Целью было — как раз уменьшить издержки на "переключение контекста" до приемлемого уровня.
Чуть в сторону. Как то видел подобное утверждение о естественных языках (за точность не ручаюсь): "Образованный человек должен знать минимум один иностранный язык. Если человек знает два иностранных языка, то он молодец и сделает успехи в карьере. Человек знает 6-7 иностранных языков — полиглот и пред ним открыт весь мир. Человек, который знает 15-20 языков — гений. Но тот кто знает больше 20 языков — опасный псих, ль которого следует охранять общество"
Re[6]: Занятная статистика "сравнение СССР и россии"
От: INTP_mihoshi Россия  
Дата: 23.08.04 09:27
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Заметно поправить ситуацию сможет только включение любого из современного ФЯ в учебную ВУЗовскую программу как одного их основных языков.


Вроде-бы на родине OCaml, т.е. во Франции, так и сделали...
Re[15]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 09:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Gaperton, Вы писали:


AVK>>>А вот те самые ФЯ и то что они перевернут мир .

G>>Как странно, ты уже не первый, кто видит в ней ней то, чего там нет. Вон, с Федотовым поабзацно "вслух" читали — все равно не понимает. Проповедники ему везде мерещатся. Простая вроде статья. Понятная.

AVK>А может ты не видишь? Когда один ошибается это еще ладно. А вот когда несколько человек воспринимают одинаково то закрадывается подозрение что не все так просто .


AVK>Собственно в самом начале мы видим такую фразу:

AVK>

AVK>Эксперименты не всегда подтверждать, эту цифру — иногда они показывает улучшение только в четыре раза. Однако, не стоит пренебрегать кодом, который в четыре раза короче, в четыре раза быстрее писать, или в четыре раза проще поддерживать. Так почему же функциональные языки не используются более широко?


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

Было бы преувеличением сказать, что никто не использует функциональные языки. Телефонные вызовы в Европейском парламенте коммутируются программами, написанными на функциональном языке Erlang фирмы Ericsson. Виртуальные компакт-диски распределяются по сети Cornell через систему Ensemble, написанную на CAML, реальные компакт-диски распространяются в Европе компанией Polygram с использованием Natural Expert от Software AG. Функциональные языки выбраны для создания программ автоматического доказательства теорем, таких как система HOL, которая помогла отладить линию многопроцессорных систем HP9000.


AVK> ВОт тебе и сенсация.

Способ такой есть, причем уже настолько давно, что сенсацией он являться не может даже с натяжкой. Ты можешь убедиться в этом сам, написав, например, реализацию AVL деревьев на Haskell. Чужой код не произведет такого впечатления, как свой собственный. А пока взгляни на это:
quicksort( [ H | T ] ) -> [ X || X <- T, X <= H ] ++ [ H ] ++ [ Y || Y <- T, Y > H ];
quicksort( [] ) -> [].


Выигрыш в том, что ты вообще свободен от управления памятью, что ты вынужден всегда делать в С#. Тебе надо думать только об алгоритме. Но за все надо платить, и платить в данном случае придется производительностью.

На С# программа будет гораздо длиннее, но зато ты сможешь применить алгоритм Хоара, который не требует дополнительных затрат памяти. Естественно, до такого управления памятью никакой умный компилятор додуматься не сможет (Хоар и то додумался не сразу). Вот и вся сенсация.
Re[16]: quicksort
От: INTP_mihoshi Россия  
Дата: 23.08.04 10:08
Оценка:
Здравствуйте, Gaperton, Вы писали:

AVK>> ВОт тебе и сенсация.

G>Способ такой есть, причем уже настолько давно, что сенсацией он являться не может даже с натяжкой. Ты можешь убедиться в этом сам, написав, например, реализацию AVL деревьев на Haskell. Чужой код не произведет такого впечатления, как свой собственный. А пока взгляни на это:
G>
G>quicksort( [ H | T ] ) -> [ X || X <- T, X <= H ] ++ [ H ] ++ [ Y || Y <- T, Y > H ];
G>quicksort( [] ) -> [].
G>


Кстати, это не совсем правильный quicksort. Элемент должен браться не первый, а, например случайный, иначе на уже отсортированном списке он будет далеко не quick. Можешь написать правильный?
Re[4]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 10:13
Оценка:
Здравствуйте, ON, Вы писали:

ON>From: Курилка


>>Не совсем понятно что ты хочешь — мат. часть или исходники? (ну вещи ведь совсем разные по сути) Если по поводу мат. >части, то тут главенствуют вроде бы как лямбда-исчисления (знатоки меня поправят, если что)


ON>И то и другое.

ON>- теорию, желательно по-русски.
ON>- хотя бы примерно описание как работает то, что ФЯ-компиляторы выдают.
Ищи эту книгу.
А.Филд, П.Харрисон "функциональное программирование" М.Мир 1993
Там есть исчерпывающие ответы на эти вопросы.
Re[6]: R# vs ФЯ :)
От: sardonyx  
Дата: 23.08.04 10:44
Оценка:
Здравствуйте, Gaperton, Вы писали:


G>Заметно поправить ситуацию сможет только включение любого из современного ФЯ в учебную ВУЗовскую программу как одного их основных языков.


ну вообще то lisp включён в учебные программы Университета да и prolog не забыт, кста вот о чем нада говорить, за ним будущее )
... << RSDN@Home 1.1.3 stable >>
Re[17]: quicksort
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 10:53
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Gaperton, Вы писали:


AVK>>> ВОт тебе и сенсация.

G>>Способ такой есть, причем уже настолько давно, что сенсацией он являться не может даже с натяжкой. Ты можешь убедиться в этом сам, написав, например, реализацию AVL деревьев на Haskell. Чужой код не произведет такого впечатления, как свой собственный. А пока взгляни на это:
G>>
G>>quicksort( [ H | T ] ) -> [ X || X <- T, X <= H ] ++ [ H ] ++ [ Y || Y <- T, Y > H ];
G>>quicksort( [] ) -> [].
G>>


INT>Кстати, это не совсем правильный quicksort. Элемент должен браться не первый, а, например случайный, иначе на уже отсортированном списке он будет далеко не quick. Можешь написать правильный?

Не соглашусь. Порядок элементов в списке вообще говоря случайный. С точки зрения теории вероятностей — совершенно неважно, беру я первый элемент, или какой-то другой. А то, что quick sort в любом случае не будет работать быстрее на сортированном массиве, как медиану не выбирай, — это известная особенность quicksort.

К тому же если брать случайный элемент, то списки лучше не использовать.

И вообще, что ты делаешь? Сейчас такими примерами всех здесь распугаем . Определим функцию, вычисляющую медиану, как ты говоришь. В на входе в рекурсию считаем длину списка, внизу генерируем случайное число, на выходе их рекурсии забираем нужный элемент. Осторожно, hardcore Erlang programming! Слабонервным не смотреть, код слегка оптимизирован для скорости.

median( L ) -> 
   { _, Element } = median( L, 0 ),
   Element.

median( [ H | T ], Count ) -> 
    case median( T, Count + 1 ) of
         { Count, nil } -> { Count, H }; 
                     %% применяем pattern matching для сравнения результата ф-и с Count.
                     %% если номер текущего элемента совпадает со случайным - возвращаем этот элемент.
         Res -> Res; %% в противном случае - что получили - то вернули.
    end.

median( [], Count ) -> { float_to_integer( rand() * ( Count - 1 ) + 0.5 ), nil }.


Примерно так.

Теперь код сортировки будет выглядеть так.
qsort( L ) -> quicksort( L, fun head );
rndqsort( L ) -> quicksort( L, fun median ).

quicksort( L, Median ) ->
    M = Median( L ),
    [ X || X <- L, X <= M ] ++ [ Y || Y <- L, Y > M ];
quicksort( [], _ ) -> [].
Re[8]: Почему никто не использует функциональные языки
От: mister-AK Россия  
Дата: 23.08.04 10:58
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>...в узких нишах ФЯ таки сумели прорваться — SQL применяется повсеместно. Как ни странно, оказалось, что императивная обработка данных не устраивает даже ярых противников ФЯ.


Я хоть и не ярый противник всего живого (включая ФП), но любители SQL (хотя есть менение, что он на ФЯ) это -.
Всегда не понимал, как приживаются эти бейсикообразные монстры
Re[7]: R# vs ФЯ :)
От: mister-AK Россия  
Дата: 23.08.04 11:07
Оценка: +1
Здравствуйте, sardonyx, Вы писали:

S>Здравствуйте, Gaperton, Вы писали:



G>>Заметно поправить ситуацию сможет только включение любого из современного ФЯ в учебную ВУЗовскую программу как одного их основных языков.


S>ну вообще то lisp включён в учебные программы Университета да и prolog не забыт, кста вот о чем нада говорить, за ним будущее )


тут
Автор: uw
Дата: 07.05.04
на форуме как-то говорили, что lisp — функциональный язык раннего типа (т.е. недоделка ), а пролог — не вляется ФЯ
так что вероятней было бы утверждать, что всё же не изучают
Re[18]: quicksort
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 11:13
Оценка:
Что-то помутнение сознания случилость. Вот как надо.
median( L ) -> lists:nth( random:uniform( length( L ) ) - 1, L ).
Re[7]: Пролог
От: INTP_mihoshi Россия  
Дата: 23.08.04 11:15
Оценка:
Здравствуйте, sardonyx, Вы писали:

S>ну вообще то lisp включён в учебные программы Университета да и prolog не забыт, кста вот о чем нада говорить, за ним будущее )


Пролог уже прошлое. Современность — это системы логики высшего порядка, написанные, разумеется, на диалектах ML.
Re[9]: Почему никто не использует функциональные языки
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.08.04 11:27
Оценка:
Здравствуйте, mister-AK, Вы писали:
MA>Я хоть и не ярый противник всего живого (включая ФП), но любители SQL (хотя есть менение, что он на ФЯ) это -.
MA>Всегда не понимал, как приживаются эти бейсикообразные монстры
Это ты про кого?
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 11:42
Оценка:
Да и вообще здесь ошибка. Блин. Рекурсию-то забыл!

G>
G>quicksort( [ H | T ] ) -> quicksort( [ X || X <- T, X <= H ] ) ++ [ H ] ++ quicksort( [ Y || Y <- T, Y > H ] );
G>quicksort( [] ) -> [].
G>
Re[8]: R# vs ФЯ :)
От: sardonyx  
Дата: 23.08.04 11:50
Оценка:
Здравствуйте, mister-AK, Вы писали:

MA>тут
Автор: uw
Дата: 07.05.04
на форуме как-то говорили, что lisp — функциональный язык раннего типа (т.е. недоделка ), а пролог — не вляется ФЯ

MA>так что вероятней было бы утверждать, что всё же не изучают

Так можно про что угодно сказать, но тому же императивному (как тут говорится) обучают на примере дремучего Виртовского Паскаля, да и вообще машина Тьюринга рулит
А лисп он как паскаль, если можно так сказать , для обучения самое оно будет — ничего лишнего. Да и потом необходимо растить новое поколение пользователей самого мощного редактора не свете — emacs

а пролог, ах пролог... я и не говорил что это фунциональный язык, я просто думаю, что если б его преподавали/обучали в необходимом объёме, то это давало бы надежду что человек-инженер-программист не бросится сразу решать задачу в рамках одного императивного (читай basic/fortran что там ещё) подхода, а немного подумает. А так весь этот спор похож на спор кто круче бэтмен vs человек паук или windows vs linux...
... << RSDN@Home 1.1.3 stable >>
Re[19]: На Ocamle это выглядит так
От: INTP_mihoshi Россия  
Дата: 23.08.04 12:29
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Что-то помутнение сознания случилость. Вот как надо.

G>
G>median( L ) -> lists:nth( random:uniform( length( L ) ) - 1, L ).
G>


В Haskell за счет sinctactic sugar выглядело бы лучше, зато так понятнее для непривычных

let rec qsort pivot_fun comp_fun lst = match lst with
  | [] -> [] (*Пустой список не сортируем*)
  | _ -> let pivot = pivot_fun lst in
    match List.partition (fun x -> pivot = x) lst with  (*Отделяем элементы, равные pivot.*)
      (lsteq, lstneq) -> 
      match List.partition (comp_fun pivot) lstneq with (*Из не равных отделяем элементы, большие pivot и меньшие.*)
        (lst1, lst2) -> 
          (* Сортируем не равные и склеиваем *)
          List.concat [qsort pivot_fun comp_fun lst1; lsteq; qsort pivot_fun comp_fun lst2] 


let rnd_pivot_fun lst = List.nth lst (Random.int (List.length lst)) (*Рандомный pivot*)
let num_comp_fun a b = a > b (*Аримфметическое сравнение*)

let qsort_num_rnd = qsort rnd_pivot_fun num_comp_fun


Скомпилено и работает. Хотя на C# или С++, возможно, получился бы почти столь же краткий и понятный код
Кто-нибудь напишет?
Re: Почему никто не использует функциональные языки
От: Xentrax Россия http://www.lanovets.ru
Дата: 23.08.04 13:31
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

G>Почему никто не использует функциональные языки



Я в данный момент как раз решил серьезно ознакомиться с этим направлением в программировании, так что мне пока мало чего есть сказать — за скудностью знаний


Вместе с тем, считаю, что функциональное программирование имеет перспективы.


1. Итак, компьютеры стали быстрыми, производительность уже маловажна. Вместе с тем, индустрия склоняется в сторону многопроцессорных (многоядерных) конфигураций. Производители компиляторов и прочие заинтересованные лица тут же этим заинтересовались, что привело к появлению того же OpenMP.
Функциональный язык в самой своей основе лучше распараллеливается автоматически. Вообще без какого-либо OpenMP. Вообще, оптимизация для ФЯ видится значительно более действенной.

2. Императивная индустрия программирования научилась переносимости ((D)COM, CORBA, XML, Web-Services), а реальные проекты стали чаще использовать несколько языков одновременно. Выросли обземы жестких дисков, появились средства дистрибуции высокой емкости (CD, DVD), появился широкополосный доступ в Internet. Т.е. теперь никто не мешает включить в свой продукт модули, написанные на функциональных языках. Хоть 10 модулей, каждый — на новом языке, а к кажому языку — runtime мегабайт на 20!

3. Одновременно, судя по беглому обзору, функциональные языки стабилизировались и даже появились стандарты, что провоцирует накопление переносимых библиотек, появление специалистов по стандартным языкам и популярным библиотекам (специалиста по кустарной библиотеке и собственному диалекту ФЯ никто искать не будет — ибо таких естествено нет).

4. Постепенно облегчается создание компиляторов, например при переносе на другие платформы ms .net, код, сгенерированный на IL, будет работаь и на этих платформах, причем получит всю необходимую оптимизацию. Кроме того, так как компиляторы обычно пишут на компилируемом языке, поддерживать такой компилятор/IDE становится легче по вышеуказанным пунктам — язык стабилизировался, много разных библиотек.

5. Чтобы там ни говорили, а образование программистов во всем мире растет, так же как и количество программистов, т.е. растет потенциальная аудитория функциональных языков. Императивное программирование с каждым годом становится все более высокоуровневым, и поэтому рано или позно у ФЯ будут коммерческие пользователи в количестве, достаточном для появления рынка труда. Причем, так как на ФЯ будут поначалу программировать довольно квалифицированные программисты, в разных журналах IEEE будет появляться статистика типа "90% проектов на ФЯ оказываются успешны!!!".

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

-. Современный программист пишет обыно не для себя, и не для атомного реактора, прогаммист пишет для людей. Пишет прикладные программы — с менюшками и диалогами, так как программы эти предназначены для людей, а не докторов наук, а потому правильный ФЯ должен позволять программировать эти диаложки с такой же легкостью и императивностью, как и Delphi & C#.
Re[17]: Сферы применения
От: INTP_mihoshi Россия  
Дата: 23.08.04 15:15
Оценка: +1
Здравствуйте, Gaperton, Вы писали:

А вообще, ты можешь привести примеры задач, где ФЯ языки существенно и гарантированно выигрывают у ИЯ?
Re[14]: Можно и попроще
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 16:26
Оценка:
Здравствуйте, faulx, Вы писали:

F>На вас не угодишь. А так понятнее?

F>
F>foreach func list
F>


Да не очень то. От обычного мировозрения это очень сильно отличается.

F>Выскажу парадоксальную мысль. Если в вашей программе на ФЯ встречается рекурсия, значит, почти наверняка вы делаете что-то неправильно.


Да рекурсия там постоянно. Просто она подразумевается. Я о другм. Я хочу декларативности не ограниченой правилами языка или парадигмой.

F>Дело в том, что с каждым ФЯ идет в поставке богатая библиотека и вся рекурсия спрятана в функциях этой библиотеки. Чтобы обработать список, никакой рекурсии не надо, вполне достаточно стандартных функций. В качестве аналога можно привести алгоритмы STL — при повсеместном их использовании количество циклов в программе на С++ резко сокращается.


Мышение все равно унжно менять на рекурсивное.

F> Вообще, STL — это такой маленький и уродливый аналог библиотеки ФЯ.


Уродливый он по другим причинам. Просток как всегда с помощью С++ пытаются сделать, то на что он не рассчитан.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 16:26
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>
G>quicksort( [ H | T ] ) -> [ X || X <- T, X <= H ] ++ [ H ] ++ [ Y || Y <- T, Y > H ];
G>quicksort( [] ) -> [].
G>


Ну, и много так можно выиграть? А читается именно как ассемблер. Вот тебе тоже самое на ИЯ:
static void QuickSort<T>(T[] item, int left, int right)
{
        int i = left;
        int j = right;    
        T center = item[(left + right) / 2];
        while(i <= j)
        {
            while (item[i] < center)
                i++;
            while (item[j] > center)
                j--;

            if (i <= j)
            {
                T x  = item[i];
                item[i] = item[j];
                item[j] = x;
                i++;
                j--;
            }
        } 
        if(left  < j)
            QuickSort(item, left, j);
        if(right > i)
            QuickSort(item, i, right);
}


Сделай у себя названия понятные и коментариев добавь и будет тоже самое. Зато можно оптимизировать как хочешь. А когда будешь приенять, то разницы вообще не будет.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: На Ocamle это выглядит так
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 17:02
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

Вот аналог твоей программы на Erlang.
-module( test ).
-export( [qsort_rnd_std/1] ).

%% реализуем partition, что работал как в OCaml...
partition( Pred, List ) -> partition( Pred, List, [], [] ).
   
partition( Pred, [ Head | Tail ], TrueList, FalseList ) ->
   case Pred( Head ) of
      true -> split( Pred, Tail, [ Head | TrueList ], FalseList );
      _    -> split( Pred, Tail, TrueList, [ Head | FalseList ] )
   end.
partition( _, [], TrueList, FalseList ) -> { TrueList, FalseList }.

%% реализуем quicksort...
qsort( _, _, [] ) -> [];
qsort( Pivot, Compare, List ) ->
   M = Pivot( List ),
   { LQ, GT } = partition( fun( X ) -> Compare( X, M) end, List ),
   { EQ, LT } = partition( fun( X ) -> X == M end, LQ ),
   qsort( LT ) ++ EQ ++ qsort( GT ).

%% выбор медианы случайный.
rnd_pivot( L ) -> lists:nth( random:uniform( length( L ) ), L ).

qsort_rnd_std( List ) -> qsort( fun rnd_pivot/1, fun( A, B ) -> A <= B end, List ).


Этот вариант чуть более оптимален. Лучше сделать будет сложно.
%% более эффективный вариант - split.
%% в один проход разделяет список List на три списка - меньше Value, равно, и больше.
split( List, Value, Compare ) -> split( List, Value, Compare, { [], [], [] } ).
split( [ H | Tail ], Value, Compare, { Lo, Eq, Hi } ) ->
    Splitted = case Compare( H, Value ) of
       _ when H == Value -> { Lo, [ H | Eq ], Hi };
       true -> { [ H | Lo ], Eq, Hi };
       false -> { Lo, Eq, [ H | Hi ] }
    end,
    split( Tail, Value, Compare, Splitted );
split( [], _, _, Result ) -> Result.

%% квиксорт. Сортирует.
qsort( _, _, [] ) -> [];
qsort( Pivot, Compare, List ) ->
    { LT, EQ, GT } = split( List, Pivot( List ), Compare ),
    qsort( Pivot, Compare, LT ) ++ EQ ++ qsort( Pivot, Compare, GT ).
Re[17]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 17:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, и много так можно выиграть? А читается именно как ассемблер. Вот тебе тоже самое на ИЯ:

В данном примере 19 строк против 2-х (не считая пустых строк, комментариев, и фигурных скобок). Выиграть можно в 10 раз (это пример немного исскуственный, реальный выигрыш часто бывает только в разы, а не на порядок). Кстати, читается гораздо проще, чем императивный вариант, из-за отсутствия явного управления памятью. Требуется минимум привычки, которая вырабатывается за несколько дней.

VD>Сделай у себя названия понятные и коментариев добавь и будет тоже самое. Зато можно оптимизировать как хочешь.

Как говорил Кнут, преждевременная оптимизация — корень всех бед. В OCaml ты тоже сможешь оптимизировать, как захочешь. Потом, по показаниям. В Erlang, конечно, таких возможностей поменьше.
VD>А когда будешь приенять, то разницы вообще не будет.
А если нет разницы, то зачем платить больше? Кстати, у тебя программа с первого раза заработала?
Re[5]: Где у ФЯ матчасть?
От: ON  
Дата: 23.08.04 17:37
Оценка:
From: Gaperton http://www.livejournal.com/users/gaperton
>Ищи эту книгу.
>А.Филд, П.Харрисон "функциональное программирование" М.Мир 1993
>Там есть исчерпывающие ответы на эти вопросы.

Спасибо.
Однако не модно уже посылать людей ... в библиотеку.
Не то, чтобы мне искать было лень, просто обычно лучше чего-то одного придерживаться, а то найдешь такое что потом не знаешь как потерять.
Posted via RSDN NNTP Server 1.9 beta
Re[20]: На Ocamle это выглядит так
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 17:49
Оценка: :))
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Скомпилено и работает. Хотя на C# или С++, возможно, получился бы почти столь же краткий и понятный код

INT>Кто-нибудь напишет?

Ну, тагокго понятного конечено никто не сможет. А так Re[16]: Почему никто не использует функциональные языки
Автор: VladD2
Дата: 23.08.04
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Сферы применения
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 17:49
Оценка: 1 (1)
Здравствуйте, INTP_mihoshi, Вы писали:

INT>А вообще, ты можешь привести примеры задач, где ФЯ языки существенно и гарантированно выигрывают у ИЯ?


И за одно объяснить как это возможно. Ведь это как доказать, что С++ быстрее ассемблера.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 17:49
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Так что пусть первопроходцы использования ФЯ топчут тропу через RSDN.

Ц>Не будет толка — ничего страшного. Будет — мы были ПЕРВЫМИ.

Мы только за. Только лучше чем кусаться занялись бы полезными делами. Показали бы императивникам как нужно программировать. Глядишь и популяризировать ничего не прийдется...
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: R# vs ФЯ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 17:49
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Camlp4 позволяет парсить Ocaml (в том числе в AST), добавлять в него новые грамматические конструкции и менять существующие.


В том числе значит препроцессор. Это как макросы с шаблонами.

INT>Другой вопрос, что OCaml и без препроцессоров может о себе позаботиться


Как показывает практиа неможет.

INT> Ему, в отличии от C#, костыли не нужны.


Боюсь что они ему уже не нужны. C# нуждается только в средствах метапрограммирования. Вряд ли это можно называть костылями. Или уж давай порассуждаем зачем в тому же ОКамлу понадобились собственные яки ил лексы...

INT> Camlp4 может пригодиться, разве что, для АОП.


Вот АОП и есть цель R#. Только не на уровне макросов, а на уровне трансформации АСТ.

INT> Классы в нем есть, множественное наследование и темплейты included. А если бы классов и не было (или тебе они почему-то не понравились), то можно написать свои. Нет, для этого не нужен препроцессор, все в рамках языка. "Возможности вроде функциональных языков", сам понимаешь, имеются


Тут есть ряд проблем. Синтаксис Шарпа нравится очень многим. Синтаксис ОКамла еденицам. Реализовать можно многое, но реализовано копейки.

В общем, я тоже могу много чего намечтать. Но это нужно еще сделать и продвинуть. А вот этого в ФЯ я пока не вижу. Слов много дел — 0.

INT>Что касается парсинга, то да, есть парсеры на Ocaml, аналогичные Yacc/Lex.


Гы. Дай догадаюьс... Называютя Окамл Якс, и Окамл лекс?

INT> И они входят в стандартную поставку. Но также можно парсить без использования внешних форматов и это будет выглядеть не существенно сложнее.


Извини за грубость, но языком можно парсить. Этак и на любом ИЯ можно парсить "без проблем". Только дальше строчных калькуляторов никто еще не пошел. Кстати, на плюсах, в Бусте тоже есть библитотечка Спирит. Тоже LL(1)-парсеры позволяет делать. Только нормальный генераторы парсеров куда удобнее и эффективнее.

INT> Нет, парсить можно не только функциональные языки. На сайте языка есть примеры парсеров, например, Паскаля и Лого.


LL(1)-языки, как Каскаль, легко парсятся банальным рекурсивным спуском на любом языке. А уж на ФЯ сам бог велел. Ты вот C# 2.0 отпарсь не нем. А я посмеюсь, как ты будешь трехэтажные навороты лепить чтобы вперед забежать. Да и качетсво такого парсера на нуле. Ни обработки ошибок нормальной, ни читаемости.

INT>Тут меня надо спросить, а почему же при всем при этом Ocaml не юзают все кому не лень. Ответ, я кажется, почти понял, но налеюсь, что его скажет кто-нибудь, кто знает этот язык лучше. Возможно, одна из причин в том, что практическая польза языка не только в том, что он позволяет делать, но и в том, что он не позволяет А вот со вторым у OCaml явные напряги


Интересно какие?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: R# vs ФЯ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 17:49
Оценка: -1
Здравствуйте, Gaperton, Вы писали:

G>- Проще найти специалиста по С++/С#.


Заметь. С#-у 2.5 года. А программистов найти уже проще. И почему ниодна серьезная компания вроде МС или ИБМ не взяла ФЯ в флагманские языки? ИБМ даже смолток готов продвигать, но не ФЯ...

G>- Со стороны програмиста — знание OCaml (Haskell, whatever) не увеличивает его ценность на рынке труда. Он не чувствует необходимости тратить на него время.


Дык если ФЯ так радикально сокращают время разработки, то в чем проблема то?

G>- К тому-же, среда программирования не настолько "дружественна", как в коммерческих средствах разработки. Это отпугивает.


В большинстве случаев этих сред вообще нет. Если емаксы за них не считать.

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


А чем определяется то на что богатые коропорации тратят деньги? Или в них все идиоты? Но тогда откуда у них деньги? А может это заговор?

G> Mainstream — это бизнес, и его участники заинтересованы, чтобы все использовали С# и Java, потому, что в них вложены большие средства.


А почему они вложены именно в них? При таких великих перспективах МС давно бы задвинул всех используя свою модификацияю Окамла.

G>Популярность же остальных "бесплатных языков" так или иначе связана с популярностью Linux.


Ага. То-то его тоже на С развивают.

G>- Существует набор предубеждений о ФЯ среди незнакомых с ними людей. У ФЯ есть слабые места. Но предубеждения обычно не имеют к ним отношения.


Заметь. И твоя их популяризация не дает никакаой пользы. А знаешь почему? Да потому что ни одного полезного прикладнику слова ты не сказал. Ты говоришь круто, но не показываешь где. Ты говоришь понятно, а все кто не знает ФЯ тебе говорят, что отнюдь не понятно.

G>Заметно поправить ситуацию сможет только включение любого из современного ФЯ в учебную ВУЗовскую программу как одного их основных языков.


Они уже давно там были. Да влилетели. Так как вузы делают то что требует рынок. Так что изменить ситуацию можно тлько создав действительно удобный и понятный язык и грамотно его продвинуть.

G>О чем ты говоришь? . Никто даже и не догадывается, что OCaml позволяет делать, и, что характерно, не хочет знать. Все, что большинство о нем знает — что в нем есть страшная и неудобная рекурсия, что и обсуждается. Еще обсуждаются, в каком кривом формате (PDF) приведенные ссылки. "Цвет учебника" не нравится.


Ты вместо того говорить о своих сокровенных знаниях поделился бы ими со всеми. А что касается ПДФ то нужно вообще плевать на популярность чтобы в нашем мире выкладывать статьи в ПДФ и тем более в посскрипте. Так же глупо плевать на внешний вид и эргономику сайта.

Многие не будут смотреть на ФЯ просто глянув на их сайты. И логика в этом есть. Люди не способные сверстать HTML не способны и сделать удобный ЯП.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: R# vs ФЯ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 17:49
Оценка:
Здравствуйте, sardonyx, Вы писали:

S>ну вообще то lisp включён в учебные программы Университета да и prolog не забыт, кста вот о чем нада говорить, за ним будущее )


Оно за ним вот уже 20 лет. Еще мой отец говорил такие слова. Тогда правда отмазка была, что мол медленный он. А теперь?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 18:18
Оценка: 1 (1) -2
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, VladD2, Вы писали:


VD>>Ну, и много так можно выиграть? А читается именно как ассемблер. Вот тебе тоже самое на ИЯ:

G>В данном примере 19 строк против 2-х (не считая пустых строк, комментариев, и фигурных скобок).

А ты все переменные в одну букву вгони, запиши все в одну строку и радуйся от краткости.

G> Выиграть можно в 10 раз


Эти 20 строк читаются без проблем. А в твоем коде каждый симвло нужно анализировать как Шерлок Холмс. По хорошему их нужно так же в 20 расписать и коментариев добавить. А то ты вот сам не заметил, что ошибку сделал.

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


А. Ну, да. Причем на шеснадцатиричные. Давай свои реальные приложения будем глядеть. И не надо мне то что я посмотреть не могу и узкоспециализированное вроде камутаторов. Ты мне покажи что-то что я смоку сказчать на свой писюк, скомпилировать и поглядеть. Ну, и чтобы аналоги были императивные.

G> Кстати, читается гораздо проще,


Ты себя в этом уже убедил. Но я вот себя никак побороть не могу. Для меня это филькина грамота. Причем недающая мне сдлать все так как хочу именно я. Или заставляющая для этого изварачиваться.

G> чем императивный вариант, из-за отсутствия явного управления памятью.


Гдет ты там нашел явное управление памятью? Ты точно термины не путаешь? В Шарпе вообще нет явного управления памятью.

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


Видимо я дефективный. Вот уже 30 лет, а такой привычки выработать не могу. И вроде тот же STL могу использовать и вообще не идиот, но вот до сих пор меня нагромождение палочек убивает. Это ненаглядно и очень тяжело читается.

VD>>Сделай у себя названия понятные и коментариев добавь и будет тоже самое. Зато можно оптимизировать как хочешь.

G>Как говорил Кнут, преждевременная оптимизация — корень всех бед.

О. Кнута тут как раз нехватало. Да и не он это говорил.

Напомню, что о времени оптимизации речи тут не идет. Речь идет о невозможности ее в принципе.

G> В OCaml ты тоже сможешь оптимизировать, как захочешь.


Переписав императивно? А нафиг мне тогда он упал? Ты вот изобрази такой же алгоритм пимперативно на Окамле и сравним с Шарпом. Почему то я уверен, что выглядеть это будет очень не важно.

G>Потом, по показаниям. В Erlang, конечно, таких возможностей поменьше.


Erlang как не имеющий статической типизации меня вообще не волнует.

VD>>А когда будешь приенять, то разницы вообще не будет.

G>А если нет разницы, то зачем платить больше? Кстати, у тебя программа с первого раза заработала?

Скомпилируй, попробуй. Я ее за минуту по памяти надолбил. Твоя точно не заработает. Ты сым написал, что ошибку сделал.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Почему никто не использует функциональные языки
От: Xentrax Россия http://www.lanovets.ru
Дата: 23.08.04 18:43
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


А я так и не смог в свое время выучить это наизусть.

ФЯ-вариант именно понятен и запоминаем, и есть более понятный "классический" вариант — с временными "переменными"

http://www.haskell.org/aboutHaskell.html

qsort []     = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
                 where
                   elts_lt_x   = [y | y <- xs, y < x]
                   elts_greq_x = [y | y <- xs, y >= x]


The first line reads: "The result of sorting an empty list (written []) is an empty list". The second line reads: "To sort a list whose first element is x and the rest of which is called xs, just sort all the elements of xs which are less than x (call them elts_lt_x), sort all the elements of xs which are greater than or equal to x (call them elts_greq_x), and concatenate (++) the results, with x sandwiched in the middle.


Другое дело, что классический С-вариант быстрой сортировки не использует дополнительную память

The C quicksort uses an extremely ingenious technique, invented by Hoare, whereby it sorts the array in place; that is, without using any extra storage. As a result, it runs quickly, and in a small amount of memory. In contrast, the Haskell program allocates quite a lot of extra memory behind the scenes, and runs rather slower than the C program.

Не факт конечно, что это не соптимизируется, но...
Re[20]: На Ocamle это выглядит так
От: ON  
Дата: 23.08.04 19:02
Оценка:
From: INTP_mihoshi
>Скомпилено и работает. Хотя на C# или С++, возможно, получился бы почти столь же краткий и понятный код

А вот так: Сортируем снизу-вверх. Сравниваем два первых значения, упорядочиваем, генерируем функцию сортировки остатка с учетом этих значений. Там будет три рекурсии — до минимума из этих первых двух значений, между, и после. Для последнего имеем такое дерево if-ов, значение по нему попадает в нужное место. Что-нибудь такое, это функциональный стиль?
Posted via RSDN NNTP Server 1.9 beta
Re[6]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 19:39
Оценка:
Здравствуйте, ON, Вы писали:

ON>From: Gaperton http://www.livejournal.com/users/gaperton

>>Ищи эту книгу.
>>А.Филд, П.Харрисон "функциональное программирование" М.Мир 1993
>>Там есть исчерпывающие ответы на эти вопросы.

ON>Спасибо.

ON>Однако не модно уже посылать людей ... в библиотеку.
Эта книга того стоит, чтобы ее найти, на самом деле. Это — лучшее.
ON>Не то, чтобы мне искать было лень, просто обычно лучше чего-то одного придерживаться, а то найдешь такое что потом не знаешь как потерять.
На русском в сети я ничего не знаю, к сожалению. То что видел — слишком заумно и не очень качественно.
Re[21]: На Ocamle это выглядит так
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 20:59
Оценка:
Здравствуйте, Gaperton, Вы писали:

Здорово. Каша еще та. А теперь сравни читаемость с моим варинтом. Интересно так же было бы срвнить и скорость.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 23.08.04 21:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Ну, и много так можно выиграть? А читается именно как ассемблер. Вот тебе тоже самое на ИЯ:

G>>В данном примере 19 строк против 2-х (не считая пустых строк, комментариев, и фигурных скобок).
VD>А ты все переменные в одну букву вгони, запиши все в одну строку и радуйся от краткости.
"Сказать больше нечего, а хочется остаться правым." С тобой надо общаться твоими цитатами.

G>> Выиграть можно в 10 раз

VD>Эти 20 строк читаются без проблем. А в твоем коде каждый симвло нужно анализировать как Шерлок Холмс. По хорошему их нужно так же в 20 расписать и коментариев добавить.
Распиши в 20. А мы посмеемся. Глупо спорить с очевидным, Влад. Там максимум 5 строк. А комментарии не считаются.

VD>А то ты вот сам не заметил, что ошибку сделал.

Ну и что. Это ты вообще к чему?

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

VD>А. Ну, да. Причем на шеснадцатиричные. Давай свои реальные приложения будем глядеть. И не надо мне то что я посмотреть не могу и узкоспециализированное вроде камутаторов. Ты мне покажи что-то что я смоку сказчать на свой писюк, скомпилировать и поглядеть. Ну, и чтобы аналоги были императивные.
Жто можно. Завтра.

G>> Кстати, читается гораздо проще,

VD>Ты себя в этом уже убедил. Но я вот себя никак побороть не могу. Для меня это филькина грамота. Причем недающая мне сдлать все так как хочу именно я. Или заставляющая для этого изварачиваться.
Я себя не убедил, а научил. А ты можешь научится. Но для этого не я должен делать над тобой усилие (да у меня и желания-то нет), а ты сам.

G>> чем императивный вариант, из-за отсутствия явного управления памятью.

VD>Гдет ты там нашел явное управление памятью? Ты точно термины не путаешь? В Шарпе вообще нет явного управления памятью.
Под "управлением памятью" я подразумеваю технику Хоара, которую ты применил в своем алгоритме. Или что там у тебя? Хрен разберешь.

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

VD>Видимо я дефективный. Вот уже 30 лет, а такой привычки выработать не могу. И вроде тот же STL могу использовать и вообще не идиот, но вот до сих пор меня нагромождение палочек убивает. Это ненаглядно и очень тяжело читается.
А никто тебя в идиотизме и не подозревает. Видимо, плохо учился. Или, скорее, не хочешь учится.

VD>>>А когда будешь приенять, то разницы вообще не будет.

G>>А если нет разницы, то зачем платить больше? Кстати, у тебя программа с первого раза заработала?
VD>Скомпилируй, попробуй. Я ее за минуту по памяти надолбил. Твоя точно не заработает. Ты сым написал, что ошибку сделал.
Моя заработала. Я вообще не дурак ошибку поправить, если заметил .

А вот свою сам тестируй. Но там гораздо больше мест облажаться.
Re[18]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 22:45
Оценка: 1 (1) -2
Здравствуйте, Xentrax, Вы писали:

X>The first line reads: "The result of sorting an empty list (written []) is an empty list". The second line reads: "To sort a list whose first element is x and the rest of which is called xs, just sort all the elements of xs which are less than x (call them elts_lt_x), sort all the elements of xs which are greater than or equal to x (call them elts_greq_x), and concatenate (++) the results, with x sandwiched in the middle.


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

X>Другое дело, что классический С-вариант быстрой сортировки не использует дополнительную память


X>The C quicksort uses an extremely ingenious technique, invented by Hoare, whereby it sorts the array in place; that is, without using any extra storage. As a result, it runs quickly, and in a small amount of memory. In contrast, the Haskell program allocates quite a lot of extra memory behind the scenes, and runs rather slower than the C program.


Да с Хаскелем по-моему уже давно все ясно. Гордость фивровальщиков да и только. Язык без статической типизиции и серьезных оптимизаций. В общем, лучший пример языка который никогда не станет массовым и выездает на пиаре.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.08.04 23:08
Оценка: 1 (1) -3
Здравствуйте, Gaperton, Вы писали:

VD>>А ты все переменные в одну букву вгони, запиши все в одну строку и радуйся от краткости.

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

Для этого прийдется задумываться над уместностью цитат.

В данном случае цитата не уместна. Твой код это нагроможднеие палочек и буквочек. Его понимание — это дешифрация.

G>Распиши в 20. А мы посмеемся. Глупо спорить с очевидным, Влад. Там максимум 5 строк. А комментарии не считаются.


Последний втой вариант
Автор: Gaperton
Дата: 23.08.04
занимает строк 13 или больше. И это без коментариев.

VD>>А то ты вот сам не заметил, что ошибку сделал.

G>Ну и что. Это ты вообще к чему?

К тому что "программы запускаются с первого раза".

G>Я себя не убедил, а научил. А ты можешь научится. Но для этого не я должен делать над тобой усилие (да у меня и желания-то нет), а ты сам.


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


VD>>Гдет ты там нашел явное управление памятью? Ты точно термины не путаешь? В Шарпе вообще нет явного управления памятью.

G>Под "управлением памятью" я подразумеваю технику Хоара, которую ты применил в своем алгоритме. Или что там у тебя? Хрен разберешь.

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

G>А никто тебя в идиотизме и не подозревает. Видимо, плохо учился. Или, скорее, не хочешь учится.


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

VD>>Скомпилируй, попробуй. Я ее за минуту по памяти надолбил. Твоя точно не заработает. Ты сым написал, что ошибку сделал.

G>Моя заработала.

А ничего что ты там рекурсию забыл? И вообще, как объяснить ошибки в примитивной программе на языке где и большие прилоежния с первого раза работают?

G> Я вообще не дурак ошибку поправить, если заметил .


А зачем тогда об безошибочности и верефицироемости говорил? Для красного словца?

G>А вот свою сам тестируй. Но там гораздо больше мест облажаться.


И тем не менее "обложался" ты. Причем на волшебном язые.

ЗЫ

Ошибиться можно делать где угодно и кто угодно. Программы пишет человек. А он по определению ошибается. Так что не нужно рассказывать сказки по программы с запуском с первого раза и т.п. Надежность определяется кучае факторов. Среди которых не малую роль занимают отладчики и RAD-средства.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Можно и попроще
От: Цунцуяби Россия  
Дата: 24.08.04 04:07
Оценка: 2 (1) +1
Pre S.
Абсолютно неругательное письмо
Просто письмо — малый жанр
и действительно, что имел ввиду VladD2 —

Script

Здравствуйте, VladD2, Вы писали:


VD>Я хочу декларативности не ограниченой правилами языка или парадигмой.


Переведи ...

jkodfj 893438 09ir -0sdfgop=sfpe=gr[]
Я чего-то декларирую, но другим не понятно — нет соглашений/конвенций,
который накладывает язык.

Тебе не нравиться ФЯ — понятно,нормально,твой выбор.
Какой декларативности хочешь, непонятно ?

Мне кажется, что тебе просто не нравиться эстетика ФЯ.
Для человека это, конечно, важно. И наука знает ВЕЛИКИЕ открытия сделанные из эстетических соображений.
Приятно, когда приятно писать код. Но это лишь сила привычки.
Можно принять и другую эстетику.
Но язык программирования — это какая-то математика, Вычислительная Наука.

Чего не хватает в математике на твой взгляд ?

Лямбда-исчисления( =Haskell) экивалентны машине Тьюринга. Что бы мог Тьюринг посчитать, мог бы и Хаскель и наооборот. Понятно, что щас на Тьюринге не считают, да и не считали, используют более крупные формы — фон Неймана:коды,ассемблер,FORTRAN,C ... .
На этот счет есть интересная статья Бэкаса( Backus )

Haskell, как я понимаю, — это "что компьютер должен знать о комбинаторной логике".

Так какое исчисление ты хочешь предложить ?

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

P.S.
Рекурсия тебе — не нравится — это тоже понятно, нормально.
А как без нее работать с бесконечностями в замкнутой форме, чтобы доказательсва были покомпактнее. Как же в формальной логике и в теории доказательств без рекурсий.Хотя может и можно обойтись ? Может с помощью машины Тьюринга.
Re[17]: ФЯ
От: AndreyFedotov Россия  
Дата: 24.08.04 04:42
Оценка: 2 (1) +1 -1
Здравствуйте, Gaperton, Вы писали:

Хамить начал ты сам. Это конечно ни меня ни Влада не оправдывает, но я его понимаю.
Если с тобой не согласны — это ещё не значит, что ты прав или что тебя хотят обидеть. Но именно так, судя по твоим ответам ты это и вопсримнимаешь.
Re[13]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 24.08.04 04:46
Оценка: -3
Здравствуйте, Gaperton, Вы писали:

Комплексуем? Где я хоть слово сказал про тебя?
Про узколобых фанатов ФЯ — да. Но где я адресовал эти слова тебе?
ТЫ сам только что отнёс эти слова к себе.
Пора понять, что мир вокруг тебя не вертится и там другие люди есть...
Re: Почему никто не использует функциональные языки
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.08.04 05:51
Оценка: 60 (2) +1 :)))
Здравствуйте, Gaperton, Вы писали:
G>Почему никто не использует функциональные языки

На самом деле их никто не использует только потому, что в RSDN Mag до сих пор нет ни одной статьи на их тему. Я уверен, что как только выйдет хорошая статья с практическим примером того, как современная популярная прикладная задача на раз-два-три решается на функциональном языке, прикладники потянутся в эту сторону. Грамотный маркетинг — основа успеха.

... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[19]: ФЯ
От: INTP_mihoshi Россия  
Дата: 24.08.04 06:02
Оценка: 1 (1) +3
Здравствуйте, VladD2, Вы писали:

VD>Эти 20 строк читаются без проблем. А в твоем коде каждый симвло нужно анализировать как Шерлок Холмс. По хорошему их нужно так же в 20 расписать и коментариев добавить. А то ты вот сам не заметил, что ошибку сделал.

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

VD>А. Ну, да. Причем на шеснадцатиричные. Давай свои реальные приложения будем глядеть. И не надо мне то что я посмотреть не могу и узкоспециализированное вроде камутаторов. Ты мне покажи что-то что я смоку сказчать на свой писюк, скомпилировать и поглядеть. Ну, и чтобы аналоги были императивные.


На сайте caml.inria.fr есть примеры кода. Но ты ведб его смотреть не будешь? Там ведб, наверняка, и HTML плозхо сверстан, и кнопочки "Скомпилировать и сравнить с аналогами" нету...

VD>Ты себя в этом уже убедил. Но я вот себя никак побороть не могу. Для меня это филькина грамота. Причем недающая мне сдлать все так как хочу именно я. Или заставляющая для этого изварачиваться.


Да, ФЯ предполагает другой способ мыщления, чем ИЯ. И если "так как хочешь ты" — эьл обязательно как в ИЯ, то действительно, ФЯ тебе не нужны.

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

VD>Видимо я дефективный. Вот уже 30 лет, а такой привычки выработать не могу. И вроде тот же STL могу использовать и вообще не идиот, но вот до сих пор меня нагромождение палочек убивает. Это ненаглядно и очень тяжело читается.

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

VD>Напомню, что о времени оптимизации речи тут не идет. Речь идет о невозможности ее в принципе.


Ошибка. В библиотеке Ocaml реализована оптимизированная сортировка, использующая массивы.

G>> В OCaml ты тоже сможешь оптимизировать, как захочешь.

VD>Переписав императивно? А нафиг мне тогда он упал? Ты вот изобрази такой же алгоритм пимперативно на Окамле и сравним с Шарпом. Почему то я уверен, что выглядеть это будет очень не важно.
Выглядеть будет как минимум не хуже.

G>>Потом, по показаниям. В Erlang, конечно, таких возможностей поменьше.

VD>Erlang как не имеющий статической типизации меня вообще не волнует.
Ошибка. Erlang имеет статическую типизацию.

Вобщем, ты меня убедил. Тебе ФЯ не нужно. И ни в коем случае не читай этот жутко сверстанный HTML и дремучие pdfы.Ну а если вдруг по неосторожности почитаешь, тогда и продолжим разговор.

У меня все.
Re[21]: Функциональный стиль
От: INTP_mihoshi Россия  
Дата: 24.08.04 06:18
Оценка:
Здравствуйте, ON, Вы писали:

ON>From: INTP_mihoshi

>>Скомпилено и работает. Хотя на C# или С++, возможно, получился бы почти столь же краткий и понятный код

ON>А вот так: Сортируем снизу-вверх. Сравниваем два первых значения, упорядочиваем, генерируем функцию сортировки остатка с учетом этих значений. Там будет три рекурсии — до минимума из этих первых двух значений, между, и после. Для последнего имеем такое дерево if-ов, значение по нему попадает в нужное место. Что-нибудь такое, это функциональный стиль?


Функциональный стиль — это...

Сортировка списка по делается следующим образом.
let rec qsort lst = match lst with

Если список пуст, то результатом будет тоже пустой список.
| [] -> []

Если нет, то берем случайный элемент.
| _ -> let pivot = List.nth lst (Random.int (List.length lst)) in

Разделяем все элементы на те, которые равны ему, и не равны.
match List.partition (fun x -> pivot = x) lst with (lsteq, lstneq) ->

Которые не равны — на те, что больше и те, что меньше.
match List.partition (fun x -> pivot > x) lstneq with (lst1, lst2) ->

Те, что больше, и те, что меньше, сортируем по отдельности таким же образом. Возвращаем эти три списка, склеенные в порялке "меньшие отсортированные; равные; большие отсортированные".
List.concat [qsort lst1; lsteq; qsort lst2]


(Для простоты даю версию сортировки со случайным "средним" элементом и арифметическим сравнением элементов. В другом посте была сотрировка с произволными фуекциями сравнения и выбора среднего)

Т.е. если на слух понятно, что алгоритм работает, то это — функциональный стиль
Re[21]: partition
От: INTP_mihoshi Россия  
Дата: 24.08.04 06:32
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Вот аналог твоей программы на Erlang.

G>%% реализуем partition, что работал как в OCaml...
G>[/code]

Вообще-то, я partition использовал только потому, что в Ocaml нет аналога выборки [ || <-]
Re[19]: Почему никто не использует функциональные языки
От: faulx  
Дата: 24.08.04 08:16
Оценка: +1
Здравствуйте, VladD2, Вы писали:


VD>Во-во. Без пояснений тут никуда. А ведь импиративный вариант пояснять не нужно.


Его нужно пояснять для тех, кто не знает языка, на котором он написан.


VD>Да с Хаскелем по-моему уже давно все ясно. Гордость фивровальщиков да и только. Язык без статической типизиции и серьезных оптимизаций.


Именно Haskell и является языком со статической типизацией, остальные языки лишь более или менее приближаются к нему в этом отношении.
Re[15]: Можно и попроще
От: faulx  
Дата: 24.08.04 08:30
Оценка: 2 (2)
Здравствуйте, VladD2, Вы писали:

F>>На вас не угодишь. А так понятнее?

F>>
F>>foreach func list
F>>


VD>Да не очень то. От обычного мировозрения это очень сильно отличается.


Что такое "обычное мировоззрение"? В какой строчке из нижеследующих начинается "обычное мировоззрение" и кончается "необычное"?

map func list
foreach func list
foreach(func, list)
foreach(list, func)
for_each(list, func)
for_each(list.begin, list.end, func)
for_each(list.begin(), list.end(), func)


Последнюю строчку, надеюсь, узнаете? Или STL — это тоже "необычное мировоззрение"?

VD>Да рекурсия там постоянно.

Рекурсия там редко.

VD>Просто она подразумевается.

А вам не все равно, что там подразумевается? Вас беспокоит эффективность? Не волнуйтесь, _на этом_ эффективность не теряется. Сила ФЯ не в рекурсии, а в функциях высшего порядка, таких как foreach, а рекурсия — всего лишь необязательная деталь реализации.

VD>Мышение все равно унжно менять на рекурсивное.

Нет, надо менять мышление на более высокоуровневое. Вместо "организовать цикл по элементам списка, пройтись по ним индексом i и вызвать фукнцию для каждого i-го элемента" думать "вызвать функцию для всех элементов списка". Именно то, к чему призывает STL.


F>> Вообще, STL — это такой маленький и уродливый аналог библиотеки ФЯ.


VD>Уродливый он по другим причинам. Просток как всегда с помощью С++ пытаются сделать, то на что он не рассчитан.

А я разве говорил о других причинах? Правильно, именно поэтому.
Re[2]: Почему никто не использует функциональные языки
От: Andy Panda США  
Дата: 24.08.04 08:32
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>

S>На самом деле их никто не использует только потому, что в RSDN Mag до сих пор нет ни одной статьи на их тему. Я уверен, что как только выйдет хорошая статья с практическим примером того, как современная популярная прикладная задача на раз-два-три решается на функциональном языке, прикладники потянутся в эту сторону. Грамотный маркетинг — основа успеха.


А если она появится еще и в MSDN
... << RSDN@Home 1.1.4 @@subversion >>
Re[20]: Типизация
От: INTP_mihoshi Россия  
Дата: 24.08.04 08:35
Оценка:
Здравствуйте, faulx, Вы писали:

F>Именно Haskell и является языком со статической типизацией, остальные языки лишь более или менее приближаются к нему в этом отношении.


Haskell, Ocaml, SML, Clean имеют статическую типизацию. Erlang — динамическую.

здесь

According to this definition C, C++ or Java aren't StronglyTyped languages. In C and C++ there is pointer to void, Java has typing constrains 'leak' for arrays. ObjectiveCaml can be example of StronglyTyped language. In ObjectiveCaml compiler is able to check any type constraint at compile time.
Re[4]: Где у ФЯ матчасть?
От: faulx  
Дата: 24.08.04 08:36
Оценка: 9 (1)
Здравствуйте, ON, Вы писали:

ON>From: Курилка


>>Не совсем понятно что ты хочешь — мат. часть или исходники? (ну вещи ведь совсем разные по сути) Если по поводу мат. >части, то тут главенствуют вроде бы как лямбда-исчисления (знатоки меня поправят, если что)


ON>И то и другое.

ON>- теорию, желательно по-русски.
ON>- какой-нибудь ML-интерпретатор в исходниках.
ON>- хотя бы примерно описание как работает то, что ФЯ-компиляторы выдают.

здесь

Есть нечто вроде перевода, сокращенного, переделанного с ML на Haskell, недоделанного, корявого, дополненного... Словом, переводил я. Лежит здесь:http://kchri.narod.ru/lecs.pdf
Re[21]: Типизация
От: faulx  
Дата: 24.08.04 08:40
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, faulx, Вы писали:


F>>Именно Haskell и является языком со статической типизацией, остальные языки лишь более или менее приближаются к нему в этом отношении.


INT>Haskell, Ocaml, SML, Clean имеют статическую типизацию. Erlang — динамическую.


INT>здесь


INT>
INT>According to this definition C, C++ or Java aren't StronglyTyped languages. In C and C++ there is pointer to void, Java has typing constrains 'leak' for arrays. ObjectiveCaml can be example of StronglyTyped language. In ObjectiveCaml compiler is able to check any type constraint at compile time.
INT>


Так оно и есть. Однако если сравнивать системы типов в OCaml и Haskell, то в последнем есть классы типов, которые дают возможность управлять ad-hoc-полиморфизмом. Впрочем, это отдельный разговор.
Re[22]: Функциональный стиль
От: ON  
Дата: 24.08.04 08:51
Оценка:
А как же функции высших порядков? Это же самое интересное.
Или я рекламы обчитался, или ФЯ должен генерировать функции, т.е. выполнять чуть ли не всю работу программиста.

Или хотя бы помочь собрать из понятных кусочков нечто большое, что охватить невозможно. Все языки высокого уровня в основном для этого сделаны. Я так понял в ФЯ самомодифицирующиеся программы хакерством не считаются, поскольку программы вроде как и не программы, а декларации, а это очень мощный инструмент. Только ради таких возможностей и берут интерпретаторы. Ну еще удобство отладки, но с ФЯ это пока не прояснилось.
Posted via RSDN NNTP Server 1.9 beta
Re[16]: Можно и попроще
От: Павел Леонов Россия icq: 138726397
Дата: 24.08.04 09:32
Оценка:
Здравствуйте, faulx, Вы писали:

VD>>Мышение все равно унжно менять на рекурсивное.

F>Нет, надо менять мышление на более высокоуровневое. Вместо "организовать цикл по элементам списка, пройтись по ним индексом i и вызвать фукнцию для каждого i-го элемента" думать "вызвать функцию для всех элементов списка".

Уж если менять, тогда так "Для каждого элемента списка..."
Re[23]: Все не так просто...
От: INTP_mihoshi Россия  
Дата: 24.08.04 09:44
Оценка:
Здравствуйте, ON, Вы писали:

ON>А как же функции высших порядков? Это же самое интересное.

ON>Или я рекламы обчитался, или ФЯ должен генерировать функции, т.е. выполнять чуть ли не всю работу программиста.
Тогда, получается, ИЯ должен генерировать данные за программиста?
Просто в типизированных ФЯ гораздо более мощный (с точки зрения языка, а не быстродействия) механизм работы с типами, чем в традиционных ЯП. В остальном все очень похоже на современный С++ с темплейтами, функторами и указателями на функции. Т.е. если выкинуть из С++ кошмарный синтаксис, сделать чуть построже работу с типами и научить компилятор выводить тип самостоятельно там, где можно, а также собирать мусор и оптимизировать то получиться нечто очень похожее на OCaml.
Интересно, кстати, что об этом думает Страуструп

ON>Или хотя бы помочь собрать из понятных кусочков нечто большое, что охватить невозможно. Все языки высокого уровня в основном для этого сделаны. Я так понял в ФЯ самомодифицирующиеся программы хакерством не считаются, поскольку программы вроде как и не программы, а декларации, а это очень мощный инструмент. Только ради таких возможностей и берут интерпретаторы. Ну еще удобство отладки, но с ФЯ это пока не прояснилось.


Самомодифицирующий код — очень растяжимое понятие. Программы на ФЯ, по существу не более самомодифицирующиеся, чем С++.

Удобство отладки состоит опять же в том, что компилятор не прикидывается идиотом И не требует объяснять, где хранить какие-либо значения и какого они типа. Работа ведется в основном с функциями и значениями. Значения эквивалентны функциям без аргументов, так что можно сказать, что только с функциями. Это позволяет писать максимально кратко, переносимо и осмысленно. Так как из кода исчезают бессмысленные частности, различные части кода меньше цепляются друг за друга, поэтому код можно разбить на очень мелкие независимые кусочки, большинство — по нескольку строк. И каждый кусочек можно отлаживать независимо. Вот тебе и удобство отладки.
Re[24]: Текстик
От: INTP_mihoshi Россия  
Дата: 24.08.04 10:29
Оценка:
Вот, кстати, довольно толковый текст на тему "why OCaml"

здесь
Re[20]: ФЯ
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.04 10:59
Оценка: 1 (1)
Здравствуйте, INTP_mihoshi, Вы писали:

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


Итого две ошибки. Меня тоже компилятор поправит если я совершу не логическую ошибку. А с логической не поправит ни какой компилятор, так как это просто другое поведение.

INT>На сайте caml.inria.fr есть примеры кода. Но ты ведб его смотреть не будешь? Там ведб, наверняка, и HTML плозхо сверстан, и кнопочки "Скомпилировать и сравнить с аналогами" нету...


Ты ссылки давай. А то там... есть...

INT>Да, ФЯ предполагает другой способ мыщления, чем ИЯ. И если "так как хочешь ты" — эьл обязательно как в ИЯ, то действительно, ФЯ тебе не нужны.


А почему фанкторы и делегаты не предпологают другого способа мышления? Может все же надо сам язык как-то поправить, чтобы он был удобнее и понятнее?

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


Это как привычка к регексам. Понятнее они от этого не становятся. И без коментария они просто опасны.

VD>>Напомню, что о времени оптимизации речи тут не идет. Речь идет о невозможности ее в принципе.


INT>Ошибка. В библиотеке Ocaml реализована оптимизированная сортировка, использующая массивы.


Т.е. императивно? Изумительно!

INT>Выглядеть будет как минимум не хуже.


Точно хуже. Императивный синтаксис Окамла очень неудачен. Да и зачем тогда он мне нужен? Для шарпа у меня есть все. И красивый синтаксис, и отладчик, и среда разработки и море библиотек.

VD>>Erlang как не имеющий статической типизации меня вообще не волнует.

INT>Ошибка. Erlang имеет статическую типизацию.
По-моему, у них на сайте написано обратное. Да, и у меня тут еще один сторонник по этому поводу есть
Автор: INTP_mihoshi
Дата: 24.08.04
.

INT>Вобщем, ты меня убедил. Тебе ФЯ не нужно. И ни в коем случае не читай этот жутко сверстанный HTML и дремучие pdfы.Ну а если вдруг по неосторожности почитаешь, тогда и продолжим разговор.


Я уже прочитал. И давно. Свинячего восторга не ощутил, хотя разумные и интересные идея несомненно присутствуют. В таком виде мне они не нужны. А вот хорошие идеи следут перенять. Собственно тот же шарп и делался как набор проверенных хороших решений.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Почему никто не использует функциональные языки
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.04 10:59
Оценка:
Здравствуйте, faulx, Вы писали:

VD>>Во-во. Без пояснений тут никуда. А ведь импиративный вариант пояснять не нужно.


F>Его нужно пояснять для тех, кто не знает языка, на котором он написан.


К сожалению, его нужно пояснять в принципе. Запутаться в награмождении палочек не трудно. Это как регексы.

В общем — это называется плохой синтаксис. Вместо тех же регексов можно применять очень красивые и понятные выражения. Получается чуть длинее, но за-то в сто раз понятнее. Хорошим примерут тут является CocoR. У него грамор описывается очень приятным языком.

F>Именно Haskell и является языком со статической типизацией, остальные языки лишь более или менее приближаются к нему в этом отношении.


Видимо я его попутал с Erlang. Извиняюсь.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Можно и попроще
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.04 10:59
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Так какое исчисление ты хочешь предложить ?


Исчисления/вычисления в программировании занимают малый процент. Я бы скзал, что программирование в основном — это обработка данных и в частности вычисления.

Что касается декларативности, то возми к примеру XPath. Я моку без лишних навторотов описать запрос который найдет мне набор веток. Это чисто декларативный язык. Так вот хотелось бы иметь возможнось превращать подобные языки в императивный код эффективно решающий задачу. Другимы словами чтобы вводить какие-то высокоуровневые конструкции позволяющие описать предметную область, а потом иметь механизм превращения этой модели в готовый код который будет иметь все нужные рющечки. Таким образом я получаю возможность работать с простой в понимании моделью и сокращаю время на написание код (так как весь код строится алгоритмически).

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


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

Ц>P.S.

Ц>Рекурсия тебе — не нравится — это тоже понятно, нормально.

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

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


А мне не нужна абстрактная математика. Мне нужно с БД работать, модели мира делать и т.п. Это, как я уже гворил, на 90% данные и работа с ними. А не вычислительная математкика. Вот если прийдется возиться с формулами, то функциональный стиль будет воспринят мной с радостью.

Ц> Как же в формальной логике и в теории доказательств без рекурсий.Хотя может и можно обойтись ? Может с помощью машины Тьюринга.


А зачем обходиться? Ненависть к рекурсии ты приписал мне только что сам. Я ее не испытываю. При работе с деревьями я с радостью применяю рекурсию. В общем, я уже об этом говорил.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 24.08.04 11:18
Оценка: 17 (1) +1
Здравствуйте, VladD2, Вы писали:

Вообще то конечно краткость до определённой степени хорошо, так как позволяет выделить и показать существенные детали и скрыть визуальный шум (отвлекающих или мешающие), но при такой черезмерной краткости, какую продемонстрировал Gaperton — это уже просто тёмный лес. И это действительно не читабельно — и соответсвенно — хуже для реального проекта. Конечно можно научиться понимать и такое, но вообще то написанное Gaperton'ом очень напоминает кусок формулы, выбранный наугад из докзательства какой-нибудь теоремы матанализа, страниц так на 30, без единого коментария.
Соответсвенно программа на ФЯ — будет представлять собой эту теорему целиком — если из неё выкинуть весь текст и оставить одни формулы. И разобраться в этом сможет только профессиональный математик. (Собственно именно математиками и была предложена идея функциональных языков — и идея сделать программу — доказательством неекоей теоремы).
Но математиков всегда было 0.0001% от населения или 0.01% от программистов — и больше их не станет никогда, т.к. для того, что бы стать математиком нужно иметь гораздо более высокий уровень абстрактного мышления, чем для того, что бы стать программистом.
Потому — в том виде в каком программу на ФЯ показал Gaperton — ФЯ однозначно обречены.
Другое дело — что многие идеи ФЯ — сохраняя свою суть, но видоизменяя форму — всё шире распространяются в обычных языках.
С моей точки зрения дело в том, как облечь идеи ФЯ в удобную и лёгкую для восприятия форму в рамках языка императивного — так, что бы можно было пользоваться на выбор действительно наиболее эффективным из этих двух подходов, в рамках одной программы.
Re[22]: Математики
От: INTP_mihoshi Россия  
Дата: 24.08.04 12:02
Оценка: -1
Здравствуйте, AndreyFedotov, Вы писали:

AF> Но математиков всегда было 0.0001% от населения или 0.01% от программистов — и больше их не станет никогда, т.к. для того, что бы стать математиком нужно иметь гораздо более высокий уровень абстрактного мышления, чем для того, что бы стать программистом.


От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.
Re[23]: Математики
От: Nick_ Россия  
Дата: 24.08.04 12:14
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, AndreyFedotov, Вы писали:


AF>> Но математиков всегда было 0.0001% от населения или 0.01% от программистов — и больше их не станет никогда, т.к. для того, что бы стать математиком нужно иметь гораздо более высокий уровень абстрактного мышления, чем для того, что бы стать программистом.


INT>От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.


Ну почему же? Для того что бы разрабатывать интерфейсы, поведение которых не выходит за рамки конечного автомата математического образования не надо
Re[23]: Математики
От: Павел Леонов Россия icq: 138726397
Дата: 24.08.04 12:38
Оценка: 1 (1) +1 :)
Здравствуйте, INTP_mihoshi, Вы писали:

INT>От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.


Звучит красиво, только и с реальностью надо считаться
Re[24]: Не образования...
От: INTP_mihoshi Россия  
Дата: 24.08.04 12:48
Оценка:
Здравствуйте, Nick_, Вы писали:

INT>>От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.


N_>Ну почему же? Для того что бы разрабатывать интерфейсы, поведение которых не выходит за рамки конечного автомата математического образования не надо


Для разработки интерфейсов и программистом быть необязательно. К тому же, я говорил не про образование.
Re[18]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 24.08.04 13:52
Оценка: 58 (9)
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Здравствуйте, Gaperton, Вы писали:


INT>А вообще, ты можешь привести примеры задач, где ФЯ языки существенно и гарантированно выигрывают у ИЯ?

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

Если говорить о ФЯ вообще, чтобы существенно и гарантированно то: Прототипирование, и прочие случаи, где скорость разработки важнее производительности. Системы, где надежность важнее производительности.

ФЯ весьма органично бы смотрелся в качестве вычислительно полного языка запросов к БД. И есть примеры — языки К (KDB), и D4 (Dataphor).

Если говорить именно о функциональном стиле (многие ФЯ позволяют писать и проектировать императивно), то он дает заметные преимущества в описании сложных алгоритмов. Разнообразные оптимизаторы, например. Трассировщик лучей — тоже отличный пример.

А конкретно вот так сказать — где ФЯ гарантированно лучше, ИМХО нельзя. Надо рассматривать связку "язык"-"класс задач". Я рассмотрю несколько языков.

Про Erlang доказано практически, что он рулит в тех задачах, для которых создан (Распределенные/сетевые приложения. Требования: высокая надежность, высокая доступность, хорошая масштабируемость, хорошая производительность при пиковой нагрузке, хорошее время отклика). Будешь писать DNS сервер, маршрутизатор , или ферму веб серверов — он гарантированно выигрывает, потому что специально разработан чтобы здесь выигрывать.

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

Ни то ни другое не подходит для написания десктопных приложений, и удобными универсальными языками не являются. Универсален, выразителен и красив у нас Haskell. Но уж больно паршивый у него компилятор. Он, во-первых медленный. Во-вторых, производительность программ немного не та, что можно ожидать от статически типизированного языка. Особенно разочаровывают массивы, которые должны по идее работать быстро (благодаря реализованым деструктивным изменениям при заворачивании в монаду ST), но тормозят не по децки. Piton ему конкурент, вобщем. Но по красоте и выразительным возможностам Haskell-ю нет равных. Будем ждать нормального компилятора.

Казалось-бы, всех этих недостатков лишен Clean. Вот он, правильный Хаскель! Все у парней хорошо. Компилятор быстрый. Скорость выполнения весьма адекватна (а для чисто функционального "ленивого" языка — так просто фантастическая. Он практически наравне с OCaml, а OCaml во первых, strict, а во-вторых — местами императивен). Парни говорят, что он в частности великолепно подходит для написания десктопных приложений со сложной логикой (Word/Excel). И характеристики языка для этого подходят. Отличный продукт — сказка. Казалось бы. Но и здесь засады.
1) Авторы его пытаются продавать. Т. е. поставить его вы можете бесплатно, но вот коммерческий софт делать низзя. Надо им отстегнуть.
2) И это бы ничего. Ацтигнули бы, нивапрос, покажите только за что. Но ведь в сети нет ни одной ссылки ни на один проект, сделанный на Clean! Ни на один! И ни одного отчета о применении. Не то что серьезного отчета — вообще ни одного! Даже об исследовательских проектах. Если кто-нибудь найдет таковой, просьба сообщить мне. И естественно, ни ворда ни екселя на нем не написано. Теория, конечно, теорией, но практика критерий истины. А на слово я не верю.

А еще эти парни давно (лет 7, минимум) пишут книгу, но никак не могут дописать. Впрочем, draft часть 1 можно скачать. Все это выглядит довольно странно. Я этих людей не понимаю. Но сам язык весьма интересен.

Ну, а дальше — остается OCaml. Язык универсален, хуже чем с императивными языками не будет точно, так как он еще и императивный. Быстрый, функциональный, позволяющий вести разработку с минимальным риском. Будте уверены, производительности — хватит. А начет не хватать — всегда можно оптимизнуть. Одна беда. У меня пока аллергия на синтаксис OCaml, но это дело привычки. Есть отчеты о завершенных проектах на OCaml (как для Erlang) — шлите ссылки. Интересно.
Re[24]: Все не так просто...
От: ON  
Дата: 24.08.04 14:26
Оценка:
From: INTP_mihoshi

> Тогда, получается, ИЯ должен генерировать данные за программиста?


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

Я бы сказал, что программа должна для пользователя выдавать интерпретации исходных данных. Обычная программа, которую выдает компилятор, это _интерпретатор данных_, переводит с одного представления в другое, часть информации обычно теряет, но точно не должна ничего добавлять. Если это действительно программа, а не данные с просмотровщиком.

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

ИЯ-программирование это написание функций, ФЯ это написание функционалов, это функциональное программирование. Разница же есть. Для этого его и нужно использовать, а не писать функции, выполняя функционалы в уме. Разве не так?

Вот солдат учат из автомата стрелять. Обучение начинается с чистки автомата. У нас это qsort. Но ведь автомат совсем не для того, чтобы его чистить.
Posted via RSDN NNTP Server 1.9 beta
Re[14]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 24.08.04 16:26
Оценка:
Здравствуйте, AndreyFedotov, Вы писали:

AF>Здравствуйте, Gaperton, Вы писали:


AF> Комплексуем? Где я хоть слово сказал про тебя?

AF> Про узколобых фанатов ФЯ — да. Но где я адресовал эти слова тебе?
Ох и утомили широколобые... Удивительно, как у них голова в дверной проем пролезает — неудобно наверно...

Что? А где я адресовал эти слова тебе?

Ты вообще в состоянии внятно объяснить, зачем ты это пишешь? Хочешь подчеркнуть свой ум на фоне чужой глупости? По другому никак?

AF> ТЫ сам только что отнёс эти слова к себе.

Говоря в воздух, никому конкретно, ты адресуешь эти слова вообще ВСЕМ участникам, кто высказывается в пользу ФЯ. Из разряда "а потом он оскорбил весь город". И вообще, по моему я сказал "приписывать мне и остальным".

AF> Пора понять, что мир вокруг тебя не вертится и там другие люди есть...

Как ты мне недавно сказал? "Это свего лишь твоя точка зрения".
Задумайся сам над своей фразой. И научись спокойно реагировать на чужие мнения и интересы, тем более что тебя лично они никак не задевают.
Re[20]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 24.08.04 17:00
Оценка:
Здравствуйте, Gaperton, Вы писали:

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

G>Это можно. Завтра.

Вот это простой веб сервер.
-module(httpd).
-export([start/1,server/1,reqhandler/1]).

start(Port) ->
   spawn(httpd, server, [Port]).

server(Port) ->
   {ok, Lsock} = gen_tcp:listen(Port, [binary, {packet, 0}, 
      {active, false}]),
   serverloop(Lsock).

serverloop(Lsock) ->
   {ok, Sock} = gen_tcp:accept(Lsock),
   spawn(httpd,reqhandler,[Sock]),
   serverloop(Lsock).

reqhandler(Sock) ->
   ReqStr = getreq(Sock),
   [FirstArg, SecondArg | Tail] = string:tokens(ReqStr, " \n\t"),
   if 
      FirstArg =/= "GET" ->
         gen_tcp:send(Sock, list_to_binary("400 Bad Request\r\n"));
      true ->
         {ok, BaseName, _} = regexp:gsub(SecondArg, "/$|^$", 
             "/index.html"),
         {ok, File, _} = regexp:sub(BaseName, "^/+", ""),
         sendfile(Sock, File)
   end,
   gen_tcp:close(Sock).

getreq(Sock) ->
   getreq(Sock, []).

getreq(Sock, OrigStr) ->
   {ok, Pack} = gen_tcp:recv(Sock, 0),
   RecStr = binary_to_list(Pack),
   NewStr = lists:append(OrigStr, RecStr),
   Pos = string:str(NewStr, "\r\n"),
   if 
      Pos =/= 0 ->
         string:substr(NewStr, 1, Pos-1);
      true ->
         getreq(Sock, NewStr)
   end.

sendfile(Sock, Filename) ->
   case file:read_file(Filename) of
      {ok, Binary} ->
         gen_tcp:send(Sock, Binary);
      _ ->
         gen_tcp:send(Sock, list_to_binary("404 Not Found\r\n"))
   end.
Re[23]: Математики
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.04 17:23
Оценка: 8 (1) +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.


Математик и программист совершенно разные вещи. Человек конечно может быть и тем, и другим одновременно. Но не обязан. Для программирования нужно уметь логически мыслить. А не знать основы мат-анализа. Я не раз встречал людей знакомых с последним, но с большими проблемами в логике мышления. И программисты из них били никакие.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Текстик
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.04 17:23
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Вот, кстати, довольно толковый текст на тему "why OCaml"

INT>здесь

Почти все пункты можно отнести и к Шарпу. Вот только 3 секунды на П200 для 10 килобайтного файла — это не очень то быстро. Хотя тогда и винты были не те, и памяти меньше.

Портировали бы тесты производительности с нашего сайта (шутриков) под Окамл. Поглядели бы на реальный расклад сил на сегодня.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: R# vs ФЯ :)
От: Gaperton http://gaperton.livejournal.com
Дата: 24.08.04 17:43
Оценка:
G>>О чем ты говоришь? . Никто даже и не догадывается, что OCaml позволяет делать, и, что характерно, не хочет знать. Все, что большинство о нем знает — что в нем есть страшная и неудобная рекурсия, что и обсуждается. Еще обсуждаются, в каком кривом формате (PDF) приведенные ссылки. "Цвет учебника" не нравится.
VD>Ты вместо того говорить о своих сокровенных знаниях поделился бы ими со всеми.
С теми, кто меня об этом просил, я поделился. И готов делиться еще.

Естественно, это было не в ответах на твои посты. Ты мне со своего первого поста зачем-то пытаешься доказать, что ты ФЯ не знаешь, не понимаешь, и они тебе не интересны. Это и так уже все поняли. Ты навязчив.
Re[8]: R# vs ФЯ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.04 18:26
Оценка: -1
Здравствуйте, Gaperton, Вы писали:

G>Естественно, это было не в ответах на твои посты. Ты мне со своего первого поста зачем-то пытаешься доказать, что ты ФЯ не знаешь, не понимаешь, и они тебе не интересны. Это и так уже все поняли. Ты навязчив.


Это ты что-то пытаешся доказать. И за одно постоянно подменяешь мои слова. Зачем?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Сферы применения
От: Цунцуяби Россия  
Дата: 25.08.04 02:50
Оценка:
Dear Gaperton,

Как на ФЯ изменить состояние объекта
послать/принять сигнал
послать каждому объекту(произвольного типа) из списка

можно ли взглянуть

потому как с пониманием, как все вычисляется на ФЯ проблем нет
,а с этим как то ...
Re[21]: Почему никто не использует функциональные языки
От: Xentrax Россия http://www.lanovets.ru
Дата: 25.08.04 04:59
Оценка: +3
Здравствуйте, VladD2, Вы писали:

VD>К сожалению, его нужно пояснять в принципе. Запутаться в награмождении палочек не трудно. Это как регексы.


Мне кажется, со временем ФЯ-код воспринимается довольно легко, и это просто вопрос опыта. По крайней мере, мне хватило пары дней, чтобы научится разбираться в конструкциях наподобие упомянутого qsort. А ведь я видел нечто похожее только на 3-м курсе института (Пролог) и это было очень вскользь...

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

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

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

К Haskell помимо прочей документации прилагается ~60 страничный документ, и некоторые изложенные там концепции кажутся просто восхититительными. Сразу становится понятно, откуда в С++ взялись адаптеры типа bind1st.
Re[20]: Сферы применения
От: Nick_ Россия  
Дата: 25.08.04 05:49
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Dear Gaperton,


Ц>Как на ФЯ изменить состояние объекта

Ц>послать/принять сигнал
Ц>послать каждому объекту(произвольного типа) из списка

Ц>можно ли взглянуть


Ц>потому как с пониманием, как все вычисляется на ФЯ проблем нет

Ц>,а с этим как то ...

Точно так же как с вводом-выводом. Вы очень ограничено мыслите. Говоря "изменить состояние объекта" вы подразумеваете, что есть нечто имеющее имя или идентификатор которое еще и может изменить свое состояние. В функциональных языках это не так, они работают со значениями. Вы можете дать значению имя и не можете потом этому имени дать другое значение. Тоесть нет оператора присваивания.

Изменение состояния обьекта будет выглядить так:
x = ... — объект
x1 = method x params -- вызов метода для обьекта x с параметрами.
метод возвращает измененный объект. Если вы потом не используете предыдущее значение объекта x, то компилятор размещает x1 в памяти вместо x.

Приведу пример из С++
ввод-вывод: cout << "hello " << "world" << endl;
оператор << снова возвращает cout, к которому опять применяется оператор <<
В функциональных языках то же самое, только тот объект ввода-вывода который возвращает функция вывода отличается от первоночального.
Re[24]: Я же говорю, математической мышление, а не образован
От: INTP_mihoshi Россия  
Дата: 25.08.04 05:50
Оценка:
Здравствуйте, VladD2, Вы писали:

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


Знать матанализ совершенно не обязательно. Для понимания ФЯ нужна способность понимать и оперировать сложными абстрактными понятиями. Да, мозги скрипят, по крайней мере поначалу. Но ничего сложнее университетского курса математики. Если человек честно закончил мат-мех, то он, скорее всего, к этому способен. Хотя ему, возможно, просто лень думать, но это общая проблема Просто надо выбирать, либо ты больше думаешь заранее, либо дольше и чаще ловишь багу потом.
Re[24]: Математики
От: Nick_ Россия  
Дата: 25.08.04 05:53
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, INTP_mihoshi, Вы писали:


INT>>От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.


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


У вас странное представление о математике. Математика — это не только матанализ, но и теория множеств, логика, теория алгоритмов...
А логически мыслить полезно всем, независимо от рода деятельности.
Re[18]: Сферы применения
От: faulx  
Дата: 25.08.04 06:18
Оценка: 1 (1)
Здравствуйте, INTP_mihoshi, Вы писали:

INT>А вообще, ты можешь привести примеры задач, где ФЯ языки существенно и гарантированно выигрывают у ИЯ?


Системы компьютерной алгебры?
Re[21]: Сферы применения
От: INTP_mihoshi Россия  
Дата: 25.08.04 06:27
Оценка:
Здравствуйте, Nick_, Вы писали:

Ц>>Как на ФЯ изменить состояние объекта

Ц>>послать/принять сигнал
Ц>>послать каждому объекту(произвольного типа) из списка


N_>Точно так же как с вводом-выводом. Вы очень ограничено мыслите. Говоря "изменить состояние объекта" вы подразумеваете, что есть нечто имеющее имя или идентификатор которое еще и может изменить свое состояние. В функциональных языках это не так, они работают со значениями. Вы можете дать значению имя и не можете потом этому имени дать другое значение. Тоесть нет оператора присваивания.


Зачем же, сразу "ограничено" Монады и понять-то с первого раза сложно, а уж самому догадаться — тем более

N_>Изменение состояния обьекта будет выглядить так:

N_>x = ... — объект
N_>x1 = method x params -- вызов метода для обьекта x с параметрами.
N_>метод возвращает измененный объект. Если вы потом не используете предыдущее значение объекта x, то компилятор размещает x1 в памяти вместо x.

В классическом ФЯ (например, Haskell) Все, действительно, так и происходит. Крутиться "на самом верху" цикл, в котором видны все глобальные переменные. Он занимается вводом-выводом и рулит всеми состояниями.

В казуальных ФЯ, например, в *ML, есть mutable значения, которые являются аналогом обычных переменных.

N_>Приведу пример из С++

N_>ввод-вывод: cout << "hello " << "world" << endl;
N_>оператор << снова возвращает cout, к которому опять применяется оператор <<
N_>В функциональных языках то же самое, только тот объект ввода-вывода который возвращает функция вывода отличается от первоночального.

Не совсем понимаю, к чему этот пример... Слово "применяется" как-то плохо вяжется с ФП
Re[25]: Я же говорю, математической мышление, а не образован
От: AndreyFedotov Россия  
Дата: 25.08.04 06:44
Оценка: 17 (1) +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Знать матанализ совершенно не обязательно. Для понимания ФЯ нужна способность понимать и оперировать сложными абстрактными понятиями. Да, мозги скрипят, по крайней мере поначалу. Но ничего сложнее университетского курса математики. Если человек честно закончил мат-мех, то он, скорее всего, к этому способен. Хотя ему, возможно, просто лень думать, но это общая проблема Просто надо выбирать, либо ты больше думаешь заранее, либо дольше и чаще ловишь багу потом.


Вот именно — полностью согласен. Но это свойство ума хорошего математика.
Дело в том, что можно окончить универ — даже с отличием, просто заучивая формулы и теоремы, но не обладая таким мышлением. По моим наблюдениям таких людей в институтах — большинство. Они кстати потом довольно успешно работают как инженеры, программисты и даже учёные.
Людей у которых хорошо развито абстрактное мышление — гораздо меньше. Но именно такое мышление необходимо для освоения ФЯ в том виде — в каком он был продемонстрирован выше.
Другое дело — SQL — многие запросы по сути своей — такие же функционалы. Но облечены в гораздо более лёгкую для восприятия форму — и их понимает гораздо больше людей.
Re[25]: Математики
От: AndreyFedotov Россия  
Дата: 25.08.04 07:04
Оценка: +1
Здравствуйте, Nick_, Вы писали:

N_>Здравствуйте, VladD2, Вы писали:


VD>>Здравствуйте, INTP_mihoshi, Вы писали:


INT>>>От программистов математиков — 100%. Если программист не умеет математически мыслить — то это кто угодно, но не программист.


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


N_>У вас странное представление о математике. Математика — это не только матанализ, но и теория множеств, логика, теория алгоритмов...

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

Открыл америку... Конечно это нам прекрасно известно. Только если брать статистически — по тому, что изучают в вузах — то для большинства математика — это действительно в основном матанализ и линейная алгебра — поскольку он применяется в научныхб, инжененерных и экономических расчётах — и они составляют 90% если не больше — по объёму часов на их изучение. А вот всё остальное — тензорное исчисление, теория множеств, топология, теория алгоритмов — изучаются вообще далеко не везде, не всеми и далеко не всегда — глубоко. Я прекрасно помню, как нас натаскивали на матан и как поверхностно давали теорию множеств — в итоге последнюю приходилось изучать самому.
Большинство программистов — нарвится Вам это или нет — имеют не очень хорошее образование вообще, математическое — тем более. На западе так вообще считается что программисту знать математику не обязательно. Это реальность и с ней — приходится считаться. И заявлять что они де не программисты — бесполезно — ибо для большинства менеджеров — они программисты и крупные фирмы создавая средства разработки ориентируются на большинство — то есть — на них...
Re[19]: Сферы применения
От: INTP_mihoshi Россия  
Дата: 25.08.04 07:14
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Про Erlang доказано практически, что он рулит в тех задачах, для которых создан (Распределенные/сетевые приложения. Требования: высокая надежность, высокая доступность, хорошая масштабируемость, хорошая производительность при пиковой нагрузке, хорошее время отклика). Будешь писать DNS сервер, маршрутизатор , или ферму веб серверов — он гарантированно выигрывает, потому что специально разработан чтобы здесь выигрывать.


Имху Erlang по сфере применения — удачный функциональный Python

G>Ни то ни другое не подходит для написания десктопных приложений, и удобными универсальными языками не являются. Универсален, выразителен и красив у нас Haskell. Но уж больно паршивый у него компилятор. Он, во-первых медленный. Во-вторых, производительность программ немного не та, что можно ожидать от статически типизированного языка.


У меня большое подозрение, что медлительноость — плата за мощную систему типов Классы типов, полиморфизм по типам и Nil в каждом типе — удобно, стильно, но, видимо, дорого...

G>Казалось-бы, всех этих недостатков лишен Clean. Вот он, правильный Хаскель! ... Все это выглядит довольно странно. Я этих людей не понимаю. Но сам язык весьма интересен.

+1

G>Ну, а дальше — остается OCaml. Язык универсален, хуже чем с императивными языками не будет точно, так как он еще и императивный. Быстрый, функциональный, позволяющий вести разработку с минимальным риском. Будте уверены, производительности — хватит. А начет не хватать — всегда можно оптимизнуть. Одна беда. У меня пока аллергия на синтаксис OCaml, но это дело привычки.


Не у одного тебя К счастью, в OCaml и синтаксис можно выбирать.

здесь

The revised syntax is an alternative syntax for OCaml. Its purposes are 1/ fix some problems of the normal syntax (unclosed constructions sometimes introducing ambiguities, constructors arity, end of top level phrases and structure items, etc) 2/ avoid unjustified double constructions (":=" vs ``<-'', ``fun'' vs ``function'', ``begin..end'' vs parentheses) or concepts (types and types declarations) 3/ bring some ideas (lists, types). In a word, propose a syntax which be more logical, simpler, more consistent and easier to parse and to pretty print.
...
It is a syntax of the complete language, therefore it can be used for all OCaml programs: by the way, Camlp4 is itself completely written in that syntax. Notice that it is not a constraint: it is always possible to convert from and to the normal syntax, using the pretty print facilities of Camlp4.
Re[26]: Текстик
От: faulx  
Дата: 25.08.04 07:38
Оценка: 38 (4)
Здравствуйте, VladD2, Вы писали:

VD>Портировали бы тесты производительности с нашего сайта (шутриков) под Окамл. Поглядели бы на реальный расклад сил на сегодня.


Сегодня за 15 минут для интересу написал на Окамле две программки, реализующие StringTest из набора с этого сайта. Из ваших тестов запускал только gcc, поскольку он у меня сразу запустился (пришлось, правда, добавить #include <malloc.h> и сделать using для cerr, cout, cin и endl.) Программки две, одна более императивная, с использованием string-buildera (здесь он называется Buffer), другая — более функциональная, со злополучной рекурсией (лень было лезть в документацию выяснять, как называется аналог той функции, которая у меня называется repeat_n_times) и с обычными строками. Сами программы приведены ниже, пока что результаты:

GCC           33.89
OCaml имп.    20.49
OCaml функ.   31.72


Время в секундах, машинка у меня слабая. Вот программы:

Первая:

let s = Sys.time();;
let n = 10000000;;
let ss = Buffer.create 0;;
let _ = 
for i = 1 to n do begin
   Buffer.reset ss;
   Buffer.add_string ss ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>";
   Buffer.add_string ss "Мама ";
   Buffer.add_string ss "мыла ";
   Buffer.add_string ss "раму";
   Buffer.add_string ss "\n"
 end
 done;
Printf.printf "%f\n" ( Sys.time() -. s);;


Вторая:

let s = Sys.time();;
let n = 10000000;;

let func s = 
   let ss = s in
   let ss1 = ss ^ ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" in
   let ss2 = ss1 ^ "Мама " in
   let ss3 = ss2 ^ "мыла " in
   let ss4 = ss3 ^ "раму" in
   let ss5 = ss4 ^ "\n" in
   ss5;;

let rec repeat_n_times n f s = 
    if n = 0 then () else begin f(s); repeat_n_times (n - 1) f s end;;

let _ = repeat_n_times n func "";
Printf.printf "%f\n" ( Sys.time() -. s);;


На ОКамле я и вообще писал мало, и последний раз делал это больше года назад, поэтому программы выглядят, возможно, не идеально.
Re[22]: Сферы применения
От: Цунцуяби Россия  
Дата: 25.08.04 09:18
Оценка:
Dear INTP_mihoshi,


N_>> Вы очень ограничено мыслите.


INT>Зачем же, сразу "ограничено"


спасибо за поддержку

Ц>>>Как на ФЯ изменить состояние объекта

Ц>>>послать/принять сигнал
Ц>>>послать каждому объекту(произвольного типа) из списка

INT>В классическом ФЯ (например, Haskell) Все, действительно, так и происходит. Крутиться "на самом верху" цикл, в котором видны все глобальные переменные. Он занимается вводом-выводом и рулит всеми состояниями.


INT>В казуальных ФЯ, например, в *ML, есть mutable значения, которые являются аналогом обычных переменных.


Чисто теоретический вопрос.

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

На OCalm'e видел Web — пример, что ты или Gaperton посылали
почти понятно, но все же, что конкретно ...

Как это( + сигналы), к примеру, на Хаскеле ( можно ли ), Erlang'e ?
Re[20]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 25.08.04 09:26
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:
INT>Имху Erlang по сфере применения — удачный функциональный Python
Не соглашусь, они разные. На Python не получится хорошо сделать то, что выходит на Erlang, и наоборот. Например, Python очень любят встраивать в приложения, как скриптовый язык, что с Erlang вообще не получится сделать, да и неудобен он будет. Ну, и хотел-бы я посмотреть на производительность Web-сервера, написанного на Python. Вот например, Yaws, написаный на Erlang-e по производительности в пиковых режимах легко обходит Apache (ссылку на тесты уже я давал).

Или такая задача. Делаем кластер из 100 машин, на каждой запускаем по процессу, которые объединяются в кольцо. После чего выключаем 10% машин, и смотрим, насколько быстро наши процессы восстановят кольцо. Сомневаюсь, что Python удобен для таких задач.

Ну, а если, с другой стороны, кто решит написать складской учет на Erlang, это будет номер (кстати, надо будет смеху ради попробовать). А на питоне — вроде как и нормально.

G>>Ни то ни другое не подходит для написания десктопных приложений, и удобными универсальными языками не являются. Универсален, выразителен и красив у нас Haskell. Но уж больно паршивый у него компилятор. Он, во-первых медленный. Во-вторых, производительность программ немного не та, что можно ожидать от статически типизированного языка.

INT>У меня большое подозрение, что медлительноость — плата за мощную систему типов Классы типов, полиморфизм по типам и Nil в каждом типе — удобно, стильно, но, видимо, дорого...
К счастью, это вряд ли. Clean-у это не сильно мешает выполняться быстро — а у него система типов очень близка к Хаскелю. От Хаскеля он отличается редким использованием монад (вместо них используется uniqueness typing, где это возможно). А в Хаскеле (речь идет о GHC) они похоже пока не научились эффективно компилировать монады (и неудивительно — это сплошные функции высокого порядка). Отсюда и медленный ввод-вывод, и медленные массивы. И вообще, везде где есть монады — медленно. Я недавно читал статью на эту тему. Там говорилось, что это в принципе возможно, для тех монад, о существовании которых компилятор будет знать. И предлагалась техника.

G>>Ну, а дальше — остается OCaml. Язык универсален, хуже чем с императивными языками не будет точно, так как он еще и императивный. Быстрый, функциональный, позволяющий вести разработку с минимальным риском. Будте уверены, производительности — хватит. А начет не хватать — всегда можно оптимизнуть. Одна беда. У меня пока аллергия на синтаксис OCaml, но это дело привычки.


INT>Не у одного тебя К счастью, в OCaml и синтаксис можно выбирать.

INT>здесь

The revised syntax is an alternative syntax for OCaml. Its purposes are 1/ fix some problems of the normal syntax (unclosed constructions sometimes introducing ambiguities, constructors arity, end of top level phrases and structure items, etc) 2/ avoid unjustified double constructions (":=" vs ``<-'', ``fun'' vs ``function'', ``begin..end'' vs parentheses) or concepts (types and types declarations) 3/ bring some ideas (lists, types). In a word, propose a syntax which be more logical, simpler, more consistent and easier to parse and to pretty print.
...
It is a syntax of the complete language, therefore it can be used for all OCaml programs: by the way, Camlp4 is itself completely written in that syntax. Notice that it is not a constraint: it is always possible to convert from and to the normal syntax, using the pretty print facilities of Camlp4.

Лучше так.
Re[21]: Сферы применения
От: Курилка Россия http://kirya.narod.ru/
Дата: 25.08.04 09:36
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, INTP_mihoshi, Вы писали:

INT>>Имху Erlang по сфере применения — удачный функциональный Python
G>Не соглашусь, они разные. На Python не получится хорошо сделать то, что выходит на Erlang, и наоборот. Например, Python очень любят встраивать в приложения, как скриптовый язык, что с Erlang вообще не получится сделать, да и неудобен он будет. Ну, и хотел-бы я посмотреть на производительность Web-сервера, написанного на Python. Вот например, Yaws, написаный на Erlang-e по производительности в пиковых режимах легко обходит Apache (ссылку на тесты уже я давал).


Может не в тему, но как же Zope?
Куда ещё "питонистей"?
Re[23]: Сферы применения
От: faulx  
Дата: 25.08.04 09:47
Оценка: +1
Здравствуйте, Цунцуяби, Вы писали:

Ц>Чисто теоретический вопрос.


Ц>Предположим, что я пишу десктоп на ФЯ ( имею право )

Ц>Как на Хаскеле и др. будет выглядеть сигнальная система ( окна, колбэки, сообщения )
Ц>Не додумаюсь ...
Ц>Но очень хочется взглянуть

Ц>На OCalm'e видел Web — пример, что ты или Gaperton посылали

Ц>почти понятно, но все же, что конкретно ...

Ц>Как это( + сигналы), к примеру, на Хаскеле ( можно ли ), Erlang'e ?


В Haskelle можно посмотреть соответсвующие библиотеки на www.haskell.org. Например, Fudgets или FranTk. Что касается теории, то искать в гугле по словам functional reactive animation.

Erlang, вообще-то, не предназначен для создания графических интерфейсов. Это возможно, даже в дистрибутив включено приложение gs, позволяющее строить GUI, но не следует ожидать слишком многого. Следует учитывать, что Erlang не является чистым ФЯ, в нем возможны побочные эффекты функций. А понятие "сообщений" вообще встроено в язык. Словом, www.erlang.org
Re[22]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 25.08.04 10:24
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, Gaperton, Вы писали:


G>>Здравствуйте, INTP_mihoshi, Вы писали:

INT>>>Имху Erlang по сфере применения — удачный функциональный Python
G>>Не соглашусь, они разные. На Python не получится хорошо сделать то, что выходит на Erlang, и наоборот. Например, Python очень любят встраивать в приложения, как скриптовый язык, что с Erlang вообще не получится сделать, да и неудобен он будет. Ну, и хотел-бы я посмотреть на производительность Web-сервера, написанного на Python. Вот например, Yaws, написаный на Erlang-e по производительности в пиковых режимах легко обходит Apache (ссылку на тесты уже я давал).

К>Может не в тему, но как же Zope?

К>Куда ещё "питонистей"?
В тему . Как он будет работать при 20000 одновременных соединений? У Yaws производительность остается постоянной после достижения максимума (при росте количества запросов), а у Apache сначала падает, а потом он вообще перестает работать. На 20000 тыщах он не работает вообще.
Re[23]: На примере Tcl
От: INTP_mihoshi Россия  
Дата: 25.08.04 10:30
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Чисто теоретический вопрос.


Ц>Предположим, что я пишу десктоп на ФЯ ( имею право )

Ц>Как на Хаскеле и др. будет выглядеть сигнальная система ( окна, колбэки, сообщения )
Ц>Не додумаюсь ...
Ц>Но очень хочется взглянуть

Выглядеть будет так, как ты хочешь

Для Камла есть биндинг Tcl (и, кстати, OpenGL, если нужно)

Вот пример простейшей программы на labltk.
Взят здесь
Если будешь компилить — понадобятся довольно редкая ныне версия Tcl8.3 (сейчас проще найти 8.0 и 8.4)
Взять ее можно тут

open Camltk;;

let hello_quit () =
  let main_window = openTk () in
  let bouton_quit =
    Button.create main_window
      [Text "Quit"; Command closeTk] in     (* Делаем кнопку с текстом Quit, по нажатии выполняем closeTk*)
  let bouton_press = Button.create main_window [] in
  let rec action_press () =
    Button.configure bouton_press
      [Text "Hello!"; Command press_init]
  and press_init () =
    Button.configure bouton_press
      [Text "Press"; Command action_press] in 
(* Вторая кнопка переключает свой текст по нажатию между Hello! и Press*)
  press_init ();
  pack [bouton_press; bouton_quit] [Side Side_Left];
  mainLoop ();;

if !Sys.interactive then () else begin hello_quit(); exit 0 end;;


Смысл текста вроде [Text "Press"; Command action_press] такой: [ ; ; ] — это список. Слова с большой буквы — конструкторы значений. В данном случае функции Button.configure передается список действий, которые нужно сделать с кнопкой — Text меняет текст, а Command задает действие по нажатию.

Вот пример "сигналов" с параметром

let rafraîchir_couleur x = ...
...
Scale.configure vert [ScaleCommand rafraîchir_couleur]

ScaleCommand — что нужно делать при движении слайдера. В данном случае выполняется функция одного аргумента rafraîchir_couleur с переданным параметром.


Ц>Как это( + сигналы), к примеру, на Хаскеле ( можно ли ), Erlang'e ?

На Хаскелле все сложнее, но как-то выкручиваются Про Erlang не в курсе.
Re[2]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 25.08.04 11:44
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Gaperton, Вы писали:

G>>Почему никто не использует функциональные языки

S>

S>На самом деле их никто не использует только потому, что в RSDN Mag до сих пор нет ни одной статьи на их тему. Я уверен, что как только выйдет хорошая статья с практическим примером того, как современная популярная прикладная задача на раз-два-три решается на функциональном языке, прикладники потянутся в эту сторону. Грамотный маркетинг — основа успеха.


Напоминает "Поездку в Америку", тот эпизод, где папаша объясняет Эдди Мерфи — чем его Мак Дуглас отличается от Мак Дональдса...
Re[23]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 25.08.04 11:59
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Как это( + сигналы), к примеру, на Хаскеле ( можно ли ), Erlang'e ?


wait_for_onhook() ->
    receive %% блокирующий прием сообщения
        onhook -> 
            disconnect(),
            idle();
        {connect, B} ->
            B ! {busy, self()}, %% отправка сообщения процессу с ID = B
            wait_for_onhook(); %% повторить.
    after %% выход через 60 секунд со времени получения последнего сообщения.
        60000 ->
            disconnect(),
            error()
    end.

Запускаем процесс, посылаем ему сообщение.
Server = spawn( fun wait_for_onhook/0 ),
Server ! { connect, self() },
receive { busy, _ } -> uuugh end.
Re[27]: Текстик
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.04 12:51
Оценка:
Здравствуйте, faulx, Вы писали:

А что у тебя за машина?

ЗЫ

Может переведель остальные тесты чтобы было комплексное сравнение? А то строковый тест больно сильно зависит от качества стринг-билдера (т.п. от алгоритма). Да и вообще нужен комплекстый взгляд. Синтетические тесты (сравнение скорости вызовов) можно опустить, так как смысла в них нет. Многие компиляторы просто выбрасывают такие вызовы.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Сферы применения
От: EvilChild Ниоткуда  
Дата: 25.08.04 12:58
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Ну, а дальше — остается OCaml. Язык универсален, хуже чем с императивными языками не будет точно, так как он еще и императивный. Быстрый, функциональный, позволяющий вести разработку с минимальным риском. Будте уверены, производительности — хватит. А начет не хватать — всегда можно оптимизнуть. Одна беда. У меня пока аллергия на синтаксис OCaml, но это дело привычки. Есть отчеты о завершенных проектах на OCaml (как для Erlang) — шлите ссылки. Интересно.


Если я ничего не путаю, то есть вот что:
http://www.mldonkey.org/
A OCAML client for multiple peer-to-peer networks
Re[5]: Где у ФЯ матчасть?
От: ON  
Дата: 25.08.04 14:16
Оценка:
From: faulx
>переводил я. Лежит здесь:http://kchri.narod.ru/lecs.pdf

Самое то. Большое человеческое СПАСИБО.

Покритикую уж заодно, по мелочи
— на 9стр. ?u.u v ?> ?w.w v.
— от чего свободны и с чем связаны переменные, как не понимал, так и не понял. Почему их так назвали...
— вот эта "?", забыл как произносится. Очень неудобно, бывает, читать математику вроде "| x :: y" думая про-себя: "Ррр-аз, икс! Опа, игрек!".
Posted via RSDN NNTP Server 1.9 beta
Re[4]: Почему никто не использует функциональные языки
От: Кодт Россия  
Дата: 25.08.04 14:52
Оценка: 1 (1) +2
Здравствуйте, fddima, Вы писали:

F> Возьми лисп — функциональный? Обработай на нем список без рекурсии пожалуйста... и после этого можно будет говорить о какой-либо эффективности. Приведенный мною примерчик — это вывод который делают практически все студенты реализовав одно и то же задание на "3" строчки на си и на лиспе При чем на лиспе это все выглядит гораздо неуклюже.


Это от незнания. На лиспе есть функции высшего порядка, применяющие другие функции к спискам.

А на том же С/С++ родить что-то с использованием алгоритмов STL — хотя бы for_each — тоже непосильно с непривычки.
Вот и тянутся руки к старому доброму for(...;...;...)

F> И потом я вообще не вижу разницы... я под подобным языком вижу исполняющее нутро которое по сути является императивным, но так устроено, что на нем нельзя писать императивным спсобом Короче сплошные ограничения Я конечно понимаю... закостенелось мышления, но все таки...


Сначала люди в течение десятков лет привыкали — переходили от математического образа мышления к алгоритмическому. А здесь требуется обратно перепривыкать.
Но если в первом случае ими двигала безысходность (фон-неймановская архитектура), то во втором безысходности нет. А человек — он как ёж, птица гордая. Не пнёшь — не полетит.
Перекуём баги на фичи!
Re[20]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 25.08.04 15:00
Оценка:
Здравствуйте, Цунцуяби, Вы писали:

Ц>Dear Gaperton,


Ц>Как на ФЯ изменить состояние объекта

Если писать в функциональном стиле — нельзя. Состояние объекта не меняется, он всегда пересоздается заново (или по крайней мере семантика такая).

Пример. Интерфейс очереди.

put_element( Queue, Element ) -> QueueWithElement.
get_element( QueueWithElement ) -> { QueueWithoutElement, Element }.

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

Queue1 = queue:new(),
Queue2 = queue:put( Element, Queue1 ).

Queue1 — пустая. Queue2 — содержит Element.

Ц>послать/принять сигнал

ProcessID ! AnyObjectOrStructureYouWant

receive
pattern1 -> result;
...
patternN -> result;
end.

Паттерн — запись аналогичная конструктору объекта. Пример:
[ X | List ] — добавляет Х к списку List и возвращает новый список. Но!
[ Head | Tail ] = List Разделяет список List на первый элемент Head и остальную часть Tail.
{ A, B, C } — создает tuple из трех элементов
{ A, B, C } = Z разделяет tuple Z на составляющие, позволяя получить доступ к элементам.

Ц>послать каждому объекту(произвольного типа) из списка

На Хаскеле это делается через type classes. В эрланге таких вещей нет (хотя реализовать похожее поведение можно). Один из вариантов:

process( [ H | T ] ) where is_integer( H ) -> ...
process( [ { tuple1, Value } | T ] ) -> ...

Функция process полиморфна по типам элементов списка. Применяется pattern matching.
Re[5]: Почему никто не использует функциональные языки
От: fddima  
Дата: 25.08.04 15:06
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Это от незнания. На лиспе есть функции высшего порядка, применяющие другие функции к спискам.

Есть. Но как они реализованы? Ведь стандартных функций нам по большому счету не хватит

К>А на том же С/С++ родить что-то с использованием алгоритмов STL — хотя бы for_each — тоже непосильно с непривычки.

К>Вот и тянутся руки к старому доброму for(...;...;...)
Угу... хотя применение for_each и классического for зависит от того, нужен ли нам итератор как отдельное целое, или не нужен. Разумеется если есть выбор. for each красивше записывается, а внутри все тот же итератор...

К>Сначала люди в течение десятков лет привыкали — переходили от математического образа мышления к алгоритмическому. А здесь требуется обратно перепривыкать.

Ну здесь требуется... а требуется ли вообще этот еще тот вопрос для грандиозного флейма не так ли?

К>Но если в первом случае ими двигала безысходность (фон-неймановская архитектура), то во втором безысходности нет. А человек — он как ёж, птица гордая. Не пнёшь — не полетит.

Мда... это уж точно... как ежик порою даже в тумане даже если пнешь — летит куда-то хрен знает куда %)
... << RSDN@Home 1.1.4 beta 2 rev. 170>>
Re[6]: Где у ФЯ матчасть?
От: faulx  
Дата: 26.08.04 04:34
Оценка:
Здравствуйте, ON, Вы писали:

ON>From: faulx

>>переводил я. Лежит здесь:http://kchri.narod.ru/lecs.pdf

ON>Самое то. Большое человеческое СПАСИБО.


ON>Покритикую уж заодно, по мелочи

ON>- на 9стр. ?u.u v ?> ?w.w v.
Ну конечно, \lambda w.w v. Опечатка. Вообще, практически вся теория по лямбда-исчислению просто переведена с Харрисона, ссылку на оригинал я давал. Можно в спорных случаях обращаться туда.

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


Название такое. Перевод bounded и free variables. Может, воспринимать связанные переменные, как локальные?

ON>- вот эта "?", забыл как произносится. Очень неудобно, бывает, читать математику вроде "| x :: y" думая про-себя: "Ррр-аз, икс! Опа, игрек!".


Этого замечания не понял. Если можно, поподробнее.

Вообще, спасибо за критику. Перевод, повторяю, корявый, делал для себя, чтобы читать по нему лекции студентам. К этому курсу еще прилагаются шесть лабораторных, в них даются основы Haskell-а. Если интересует, тоже могу выложить.
Re[28]: Текстик
От: faulx  
Дата: 26.08.04 06:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, faulx, Вы писали:


VD>А что у тебя за машина?


Пентиум 3, 450 мгц, 256 мб.

VD>ЗЫ


VD>Может переведель остальные тесты чтобы было комплексное сравнение? А то строковый тест больно сильно зависит от качества стринг-билдера (т.п. от алгоритма). Да и вообще нужен комплекстый взгляд. Синтетические тесты (сравнение скорости вызовов) можно опустить, так как смысла в них нет. Многие компиляторы просто выбрасывают такие вызовы.


Честно говоря, лень. Может, сделаю со временем. Я же говорю, на ОКамле давно не писал, вспоминается со скрипом. Вот эта ссылка, надеюсь, знакома? Там тестов гораздо больше, и языков тоже.
Re[14]: ФЯ
От: serg_mo  
Дата: 26.08.04 08:40
Оценка: 1 (1) +2
AF> А это другая крайность. Крайности, как известно, вредны
AF> Как вредно писать только на C/C++/C# или Haskell, так я думаю ещё вреднее — изучать каждыя язык — просто времени на написание кода не отсанется.
Как и Вы, я не сторонник крайних мер и не призываю к изучению языков в ущерб работе. Тем не менее, думаю, полезно периодически вытаскивать голову из своей ниши и смотреть, что же нового появилось вокруг. В книге "Pragmatic Programmer" авторы рекомендуют изучать новый язык каждые полгода. Возможно, это чересчур, но рациональное зерно в этом есть .

Как самый простой пример из собственного опыта: в бытность студентом мне часто приходилось писать утилиты по обработке текста. Я писал из на С++, считая, что лучше языка в природе нет. Сейчас я бы выбрал для этих задач, например, Ruby. На нем мои тогдашние задачи решаются на порядок быстрее.

А вообще-то, мне кажется, серьезному программисту следует достаточно хорошо ориентироваться в различных подходах/парадигмах программирования. Даже если программист выбрал для себя объектный подход раз и навсегда, это не значит, что он имеет моральное право недоуменно пучить глаза при словах "функциональное программирование". В конце концов, расширение кругозора в большинстве случаев себя оправдывает .

AF> Это слова увлечённого программста (и совершенно прекрасные как для специалиста), а не менеджера или инвестора, который реально реализует промышленные проекты. Посмотри на всякие переходы туда — сюда ИХ глазами. Представь — что ты бы платил за подобные развлечения свои деньги, а не какого то дяди.

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

AF> Причём таки переходят же. Иначе никаких ФЯ в телекоме не было бы. Просто на практике всё чуть сложнее, чем прочитать описание языка и написать пару программ.

Мне нравятся такие тенденции . Возможно, они выведут нас из того застоя, в котором находится software индустрия
... << RSDN@Home 1.1.3 stable >>
Re[2]: Почему никто не использует функциональные языки
От: Кодт Россия  
Дата: 26.08.04 08:53
Оценка: :))
Здравствуйте, mister-AK, Вы писали:

MA>но был у меня один предмет в ВУЗе — там триггеры изучали... так вот, что-то спор между императивным подходом и функциональным уж очень мне напоминает спор между описанием модели работы автомата (триггера) конечный он или бесконечный, Милли или Мура, не важно.. НО тем не менее двумя вариантами — статической формулой (что соответствует концепции ФЯ) или системой динамических формул (что соответствует концепции ИЯ) Как говорилось профемморами — последнее намного прощще, так как представляет собой как раз ту модель мира, в которой мы живем, т.е. учитывает чудодейтвенное присутствие времени а над первой моделью какой-нить попавшейся сложной системы из этих автоматов можно биться и биться до изнеможения, но добиться умопомрачительной компактности её представления на все века вперед — а вот в результате всё зависит от того, случится ли менять систему когда-нить... ведь всё течет, всё меняется.


Протяжённость времени и пространства — это иллюзия, хотя и чрезвычайно навязчивая.
Уравнение Шрёдингера сворачивает присутствие времени и пространства из "оттуда-туда" в единомоментное "всегда-и-везде" чудодейственно равное "здесь-и-сейчас"...
Перекуём баги на фичи!
Re[29]: Текстик
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.04 09:21
Оценка: 1 (1) -1
Здравствуйте, faulx, Вы писали:

F>Пентиум 3, 450 мгц, 256 мб.


Понятно. Тогда gcc у тебя еще быстро сработал. Видимо библиотека std чуть другая.

F>Честно говоря, лень. Может, сделаю со временем. Я же говорю, на ОКамле давно не писал, вспоминается со скрипом. Вот эта ссылка, надеюсь, знакома? Там тестов гораздо больше, и языков тоже.


Знакома. Там вообще чушь какая-то. Используются разные алгоритмы. Время меряется не участка кода, а всего приложения (утилитой).
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: ФЯ
От: serg_mo  
Дата: 26.08.04 16:38
Оценка:
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Наибольшее впечатление пока от Смолтолка и его способностей к evolution design.


... << RSDN@Home 1.1.3 stable >>
Re[9]: Почему никто не использует функциональные языки
От: Larm Украина  
Дата: 27.08.04 11:52
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>...ты должен признать, что они есть. И весьма положительные — отчеты публично доступны. И если ты заинтересуешься — ты найдешь еще больше примеров.


В мире создаются сотни тысяч программ в год. Сколько процентов из них созданы на ФЯ? Под примерами применения я имею ввиду не пару-тройку завершенных проектов, а сотни и тысячи успешно эксплуатируемых программ.
The God who walks is among us...
Re[10]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 27.08.04 13:05
Оценка:
Здравствуйте, Larm, Вы писали:

L>Здравствуйте, Gaperton, Вы писали:


G>>...ты должен признать, что они есть. И весьма положительные — отчеты публично доступны. И если ты заинтересуешься — ты найдешь еще больше примеров.

L>В мире создаются сотни тысяч программ в год. Сколько процентов из них созданы на ФЯ? Под примерами применения я имею ввиду не пару-тройку завершенных проектов, а сотни и тысячи успешно эксплуатируемых программ.
Очень странно. А я под примерами применения понимаю конкретные примеры конкретного успешного применения. С отчетом о разработке, и опытом успешной эксплуатации. Мне сам факт того, что некие люди колбасят сотни тысяч программ в год на средстве Х интересен мало, потому как он ничего не показывает, кроме популярности средства Х. Это как в рекламе волшебных присадок к моторному маслу: до вас это попробовали 10000000 американцев! Ну и что, собственно?
Re[6]: Где у ФЯ матчасть?
От: Quintanar Россия  
Дата: 28.08.04 08:06
Оценка: 4 (1) +2
ON>Спасибо.
ON>Однако не модно уже посылать людей ... в библиотеку.
ON>Не то, чтобы мне искать было лень, просто обычно лучше чего-то одного придерживаться, а то найдешь такое что потом не знаешь как потерять.

Написать примитивный интерпретатор ФЯ не проблема. Как уже выше сказали ФЯ основываются на лямбда исчислении. Это чисто математическая теория, которая возникла задолго до появления первых компьютеров и первоначально расчитывали, что она станет основанием логики и математики. Позже, однако, выяснилось, что эта теория является ни чем иным, как альтернативным способом выражения понятия вычислимости. Т.е. машина Тьюринга и лямбда исчисление в некотором роде "эквивалентны". В частности это значит, что ФЯ ничем не уступают ИЯ в выразительности.
Лямбда исчисление само по себе очень простое. Там есть переменные a,b,c... символ \lambda и скобки.
Множество лямбда выражений L определяются следующим образом:
1) x принадлежит L
2) если M принадлежит L, то (\lambda xM) принадлежит L
3) если M, N принадлежат L, то (MN) принадлежит L

Ну и есть 3 простых правила вывода (преобразования) этих выражений, которые я тут писать сейчас не буду. На первый взгляд все это выглядит очень примитивно, однако, любое лямбда выражение является по сути дела программой, а правила преобразований позволяют редуцировать большие лямбда программы к "результату". Все языки, которые сейчас принято считать функциональными, по сути дела лишь надстройки над лямбда исчислением. За любой функциональной программой без труда можно увидеть соответствующее ей лямбда выражение (с той оговоркой, что в целях оптимизации используется расширенное и типизированное лямбда исчисление с целыми числами, строками и т.п. И попробуйте ка по императивной программе построить соответствующую машину Тьюринга). А Lisp, например, вообще почти копия ЛИ, что и не удивительно.
Именно в этой близкой связи с теорией и заключена сила ФЯ. Появляется возможность относительно безболезненно анализировать функ. программы математическими методами, искать алгоритмы распараллеливания. Становится легче решать практические задачи, поскольку программы на ФЯ похожи на математические утверждения, что больше соответствует мышлению человека.
Re[15]: ФЯ
От: AndreyFedotov Россия  
Дата: 28.08.04 10:15
Оценка: +1
Здравствуйте, serg_mo, Вы писали:

AF>> А это другая крайность. Крайности, как известно, вредны

AF>> Как вредно писать только на C/C++/C# или Haskell, так я думаю ещё вреднее — изучать каждыя язык — просто времени на написание кода не отсанется.
_>Как и Вы, я не сторонник крайних мер и не призываю к изучению языков в ущерб работе. Тем не менее, думаю, полезно периодически вытаскивать голову из своей ниши и смотреть, что же нового появилось вокруг. В книге "Pragmatic Programmer" авторы рекомендуют изучать новый язык каждые полгода. Возможно, это чересчур, но рациональное зерно в этом есть .
Асолютно согласен. Дело не в том, как часто, а в том, что бы это увеличивало возможности и расширяло кругозор. Для кого то это раз в два месяца, для кого-то раз в год.

_>Как самый простой пример из собственного опыта: в бытность студентом мне часто приходилось писать утилиты по обработке текста. Я писал из на С++, считая, что лучше языка в природе нет. Сейчас я бы выбрал для этих задач, например, Ruby. На нем мои тогдашние задачи решаются на порядок быстрее.

Естественно. Думаю у каждого из нас есть подобный опыт.

_>А вообще-то, мне кажется, серьезному программисту следует достаточно хорошо ориентироваться в различных подходах/парадигмах программирования. Даже если программист выбрал для себя объектный подход раз и навсегда, это не значит, что он имеет моральное право недоуменно пучить глаза при словах "функциональное программирование". В конце концов, расширение кругозора в большинстве случаев себя оправдывает .


AF>> Это слова увлечённого программста (и совершенно прекрасные как для специалиста), а не менеджера или инвестора, который реально реализует промышленные проекты. Посмотри на всякие переходы туда — сюда ИХ глазами. Представь — что ты бы платил за подобные развлечения свои деньги, а не какого то дяди.

_>Опять же, я не говорю о необоснованном выборе языка. Представляя себя на месте инвестора или менеджера, я бы, думаю, голосовал бы за самое эффективное средство разработки. Именно потому, что мне дороги мои деньги. BTW, и не обвиняйте меня в наивности, а правда ли, что это задача менеджера — выбирать средство разработки?

А вот тут вы не правы. Менеджер или инвестор — будет стремиться минимизировать риски. Любая новая технология — высокие риски.
Многочисленные исследования неоднократно показывали, что как проффесионализм команды разработчиков, так и эффективность технологии — далеко не основные факторы успеха проекта. Увы это так...
То есть при правильной организации процесса разработки, используя С++, STL и COM гораздо больше шансов на успех проекта, чем при использовании C#, но при плохой организации проекта.
Вот потому то технологии так сложно и прижываются — что они далеко не основной фактор успеха.

AF>> Причём таки переходят же. Иначе никаких ФЯ в телекоме не было бы. Просто на практике всё чуть сложнее, чем прочитать описание языка и написать пару программ.

_>Мне нравятся такие тенденции . Возможно, они выведут нас из того застоя, в котором находится software индустрия
Тенденций много. Посмотрим, какие из них возьмут верх...
Re[11]: Почему никто не использует функциональные языки
От: AndreyFedotov Россия  
Дата: 28.08.04 10:17
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, Larm, Вы писали:


L>>Здравствуйте, Gaperton, Вы писали:


G>>>...ты должен признать, что они есть. И весьма положительные — отчеты публично доступны. И если ты заинтересуешься — ты найдешь еще больше примеров.

L>>В мире создаются сотни тысяч программ в год. Сколько процентов из них созданы на ФЯ? Под примерами применения я имею ввиду не пару-тройку завершенных проектов, а сотни и тысячи успешно эксплуатируемых программ.
G>Очень странно. А я под примерами применения понимаю конкретные примеры конкретного успешного применения. С отчетом о разработке, и опытом успешной эксплуатации. Мне сам факт того, что некие люди колбасят сотни тысяч программ в год на средстве Х интересен мало, потому как он ничего не показывает, кроме популярности средства Х. Это как в рекламе волшебных присадок к моторному маслу: до вас это попробовали 10000000 американцев! Ну и что, собственно?
А вот ты не прав. Это показатель того, что технология X — это мейнстрим, что основная масса людей ориентируется на неё.
Доминирующее положение именно у таких технологий.
Re[2]: Почему никто не использует функциональные языки
От: Quintanar Россия  
Дата: 28.08.04 11:17
Оценка:
Здравствуйте, Glоbus, Вы писали:

G>Здравствуйте, Gaperton, Вы писали:


G>А нельзя ли темному человеку раскинуть, че такое функциональые языки, потому что ранее похоже я заблуждался относительно этого термина. Желательно поподробнее и с примерами.


Функциональные языки — это языки состоящие из функций Т.е. Есть главная функция, она определяется в терминах подфункций и т.д. В императивном языке выполнение программы сводится к перекладыванию значений из одних ячеек памяти в другие, в функциональном языке ничего подобного нет. Формально (если отвлечься от физической реализации) там преобразуются строки символов по определенным правилам редукции. Поэтому возможно преобразовывать эти строки сразу в нескольких местах, в разном порядке и т.п без изменения конечного результата, в отличие от ИЯ, где есть совершенно четкая цепочка переходов программы из одного состояния в другое и изменить ее не повлияв на результат нельзя.
Re[10]: ФЯ
От: Quintanar Россия  
Дата: 28.08.04 11:28
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>В общем, то к чему ты привык в функциональных языках ни мне, ни очень многим другим попросту не нужно. ФЯ имеют довольно убогии выразительные средства и сложны в изучении и применении. Повторять подвиг горбатого я не хочу.


Это не верно. ФЯ просты в изучении и применении. Про убогие выразительные средства трудно что-то возразить ввиду бессмысленности данного утверждения, но позволю себе заметить, что по выразительности работы со сложными структурами данных ФЯ далеко впереди ИЯ.
Re[11]: ФЯ
От: INTP_mihoshi Россия  
Дата: 28.08.04 12:23
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Это не верно. ФЯ просты в изучении и применении. Про убогие выразительные средства трудно что-то возразить ввиду бессмысленности данного утверждения, но позволю себе заметить, что по выразительности работы со сложными структурами данных ФЯ далеко впереди ИЯ.


Выразительные средства как раз являются главным преимуществом ФЯ. А вот изучеие и применение сложно в основном, психологически. Рефлексы, заточенные (тем больше, чем опытнее программист) на императивные языки сопротивляются Т.к. мыслить во многом приходиться хотя и схожими, но различными категориями. Скажем, рекурсия, исключения, передача по значению являются нормой в ФЯ, но привычная практика сопротивляется их применению on regular basis. Трудно привыкнуть, что знакомы вещи работабют в ФЯ совершенно по-другому.
Re[7]: R# vs ФЯ :)
От: INTP_mihoshi Россия  
Дата: 28.08.04 14:19
Оценка:
VD>Многие не будут смотреть на ФЯ просто глянув на их сайты. И логика в этом есть. Люди не способные сверстать HTML не способны и сделать удобный ЯП.

Кстати, эти HTML (те, что с зелеными заголовками, .т.е. почти вся документация) сгенерены из того же Latex Посмотри внизу заглавной страницы.
Re[8]: R# vs ФЯ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.04 16:33
Оценка: +1
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Кстати, эти HTML (те, что с зелеными заголовками, .т.е. почти вся документация) сгенерены из того же Latex Посмотри внизу заглавной страницы.


О том и речь. Более убого оформить страницы было очень трудно.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Где у ФЯ матчасть?
От: ON  
Дата: 29.08.04 10:45
Оценка:
From: Quintanar

>Написать примитивный интерпретатор ФЯ не проблема.


Меня собственно написание программ на ФЯ не интересует . Наверно буду делать как раз интерпретатор. У меня есть программа чтобы работать с графами. Сейчас на графах работает просто булева алгебра, причем все работает параллельно, и производительность не критична, т.к. это не встроенная в другую система, а среда для пользователя. Хочется сделать, чтобы вершины появлялись, связи перестраивались. Я чувствую, что ФЯ проще и естественнее чем ИЯ, но в этом какая-то своя сложность, как кто-то в письме однажды написал "Письмо большое, потому что у меня не было времени написать коротко".

>Как уже выше сказали ФЯ основываются на лямбда исчислении.


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

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


По-моему слово "функциональный" происходит от слова функционал, а не функция. Почему-то никто не обращает на это внимания. Мне же по-настоящему интересуют даже не фунционалы, а не знаю даже как назвать, формализация что-ли. Нужно по данным построить программу их генератор. Там обязательно нужно накапливать базу знаний, функционалы как раз подходят как представление данных, это такой внутренний слой логики, я уверен что у компьютера программировать на ФЯ получится лучше чем у человека
Posted via RSDN NNTP Server 1.9 beta
Re[21]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 06:17
Оценка:
N_>Точно так же как с вводом-выводом. Вы очень ограничено мыслите. Говоря "изменить состояние объекта" вы подразумеваете, что есть нечто имеющее имя или идентификатор которое еще и может изменить свое состояние. В функциональных языках это не так, они работают со значениями. Вы можете дать значению имя и не можете потом этому имени дать другое значение. Тоесть нет оператора присваивания.

Моделируем, мы, например, ДТП.
В итоге получается, что, например, "сегодняшний" автомобиль имеет другое имя, чем он же, но "завтрашний"?

Но как быть с внешними "ссылками"?

Допустим, у нас есть модуль, который визуализируют автомобиль, соответственно этот модуль держит какую-то "ссылку" на автомобиль.

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

Как об этом узнает модуль-визуализатор?
Re[7]: Где у ФЯ матчасть?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 06:50
Оценка: +2
Q> программы на ФЯ похожи на математические утверждения, что больше соответствует мышлению человека.

Имхо, это какие-то неправильные человеки.

Нормальные люди оперируют состояниями объектов и используют нечеткие множества (когда один и тот же идентификатор означает разное в разных условиях).

Пример:
Возьми ключ, и сними переднее колесо.

Конструкция, по сути, императивная.


Очень редкий человек скажет:
Открюченное колесо — это колесо, которое не прикручено к машине.
Сделай так, чтобы переднее колесо было открюченным колесом.
Re[22]: Сферы применения
От: Nick_ Россия  
Дата: 03.09.04 09:30
Оценка:
Здравствуйте, DarkGray, Вы писали:
DG>Моделируем, мы, например, ДТП.
DG>В итоге получается, что, например, "сегодняшний" автомобиль имеет другое имя, чем он же, но "завтрашний"?

Не обязательно давать "имя" новому значению объекта. Его можно сразу же передать другой функции.

DG>Но как быть с внешними "ссылками"?


DG>Допустим, у нас есть модуль, который визуализируют автомобиль, соответственно этот модуль держит какую-то "ссылку" на автомобиль.


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


DG>Как об этом узнает модуль-визуализатор?


Если "ссылка" внешняя для программы, то работать с ней надо так же как с вводом-выводом.
Если эта "ссылка" для программы внутренняя, то один модуль просто передает обновленные данные другому по значению. И уже дело компилятора как передать его на самом деле. По ссылке или как-то по другому.
Re[12]: Почему никто не использует функциональные языки
От: Gaperton http://gaperton.livejournal.com
Дата: 03.09.04 10:53
Оценка: +1 -1
Здравствуйте, AndreyFedotov, Вы писали:

AF>Здравствуйте, Gaperton, Вы писали:


G>>Здравствуйте, Larm, Вы писали:


L>>>Здравствуйте, Gaperton, Вы писали:


G>>>>...ты должен признать, что они есть. И весьма положительные — отчеты публично доступны. И если ты заинтересуешься — ты найдешь еще больше примеров.

L>>>В мире создаются сотни тысяч программ в год. Сколько процентов из них созданы на ФЯ? Под примерами применения я имею ввиду не пару-тройку завершенных проектов, а сотни и тысячи успешно эксплуатируемых программ.
G>>Очень странно. А я под примерами применения понимаю конкретные примеры конкретного успешного применения. С отчетом о разработке, и опытом успешной эксплуатации. Мне сам факт того, что некие люди колбасят сотни тысяч программ в год на средстве Х интересен мало, потому как он ничего не показывает, кроме популярности средства Х. Это как в рекламе волшебных присадок к моторному маслу: до вас это попробовали 10000000 американцев! Ну и что, собственно?
AF> А вот ты не прав. Это показатель того, что технология X — это мейнстрим, что основная масса людей ориентируется на неё.
AF>Доминирующее положение именно у таких технологий.
В огороде бузина, а в Киеве дядька.

Меня ни капельки не трогает их доминирующее положение. Еще раз. Сама по себе популярность ни когда не являлась и не может являться техническим аргументом. Взывая к популярности продают гербалайф и присадки в двигатель.

Переходим на яблоки. Я лить говно в двигатель только потому, что это до меня сдалало 10 миллионов дураков, не собираюсь. Моей машине от этого легче не будет.

Поэтому не надо говорить про популярность в контексте технической дискуссии, ок?
Re[8]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 03.09.04 10:59
Оценка:
Здравствуйте, DarkGray, Вы писали:

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


DG>Имхо, это какие-то неправильные человеки.


DG>Нормальные люди оперируют состояниями объектов и используют нечеткие множества (когда один и тот же идентификатор означает разное в разных условиях).


DG>Пример:

DG>Возьми ключ, и сними переднее колесо.

DG>Конструкция, по сути, императивная.


DG>Очень редкий человек скажет:

DG>Открюченное колесо — это колесо, которое не прикручено к машине.
DG>Сделай так, чтобы переднее колесо было открюченным колесом.

{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).
Так лучше?
Re[9]: Где у ФЯ матчасть?
От: Mink Россия  
Дата: 03.09.04 11:07
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>Так лучше?

Нет. Лучше:

машина.СнятьПереднееКолесо(ключ);
Сила, она в ньютонах
Re[10]: Где у ФЯ матчасть?
От: Nick_ Россия  
Дата: 03.09.04 11:22
Оценка:
Здравствуйте, Mink, Вы писали:

M>Здравствуйте, Gaperton, Вы писали:


G>>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>>Так лучше?

M>Нет. Лучше:


M>машина.СнятьПереднееКолесо(ключ);


А теперь сравните:

машина.СнятьКолесо();
машина.Починить();
машина.ОдетьКолесо();

и

ОдетьКолесо(Починить(СнятьКолесо(машина)))
Re[11]: Где у ФЯ матчасть?
От: Mink Россия  
Дата: 03.09.04 11:31
Оценка: +2 -1
Здравствуйте, Nick_, Вы писали:

N_>Здравствуйте, Mink, Вы писали:


M>>Здравствуйте, Gaperton, Вы писали:


G>>>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>>>Так лучше?

M>>Нет. Лучше:


M>>машина.СнятьПереднееКолесо(ключ);


N_>А теперь сравните:


N_>машина.СнятьКолесо();

N_>машина.Починить();
N_>машина.ОдетьКолесо();

N_>и


N_>ОдетьКолесо(Починить(СнятьКолесо(машина)))


Во первых, такое элементарно реализуется на ИЯ.
Во вторых, с точки зрения читабельности кода первый вариант мне больше нравится.
Сила, она в ньютонах
Re[10]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 03.09.04 11:38
Оценка: :)
Здравствуйте, Mink, Вы писали:

M>Здравствуйте, Gaperton, Вы писали:


G>>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>>Так лучше?

M>Нет. Лучше:

M>машина.СнятьПереднееКолесо(ключ);
Кто снимает колесо? Умная машина, так выходит? Мне ей только надо отправить сообщение — "снять переднее колесо", и приложить к нему ключ. Машины они такие, все с первого слова понимают.

Согласен, так лучше, зачем самому корячиться

А если серьезно, то абсолютно пофигу, как писать. Разница между ФЯ и не ФЯ будет только в результате операции. Если она вернет измененный объект как часть результата, не тронув предыдущий — это функциональный стиль. Вот и весь пафос.
Re[12]: Где у ФЯ матчасть?
От: Кодт Россия  
Дата: 03.09.04 11:46
Оценка: 4 (1)
Здравствуйте, Mink, Вы писали:

M>Во первых, такое элементарно реализуется на ИЯ.

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

Кому-то нужны пошаговые инструкции, а кому-то — образ результата.

К примеру с колесом:

1.1)
Приезжает дама на сервис, и говорит мастеру: "возьми ключ 19, поставь домкрат, поочерёдно отверни 4 болта с колеса, подними машину, сними колесо, .............., получи деньги, конец".
Что сделает мастер? Спросит "За кого ты меня держишь, *****?".
1.2)
... и говорит: "Проколото левое заднее колесо. Вот деньги, вот машина, почините плиз."

2.1)
Мастер принял заказ и передаёт машину подмастерью со словами "Вот машина, вот инструменты, вот ремкомплект, вперёд".
Подмастерье спрашивает: "Как, чёрт побери?"

2.2)
со словами "возьми ключ 19, ........., а деньги я тебе в конце смены отдам, конец".

2.3)
со словами "Чтобы починить колесо, нужно его снять, диагностировать, заклеить..... Чтобы его снять, нужно отвинтить болты и поддомкратить машину....."
Перекуём баги на фичи!
Re[12]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 03.09.04 11:51
Оценка:
Здравствуйте, Mink, Вы писали:

M>Здравствуйте, Nick_, Вы писали:


N_>>Здравствуйте, Mink, Вы писали:


M>>>Здравствуйте, Gaperton, Вы писали:


G>>>>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>>>>Так лучше?

M>>>Нет. Лучше:


M>>>машина.СнятьПереднееКолесо(ключ);


N_>>А теперь сравните:


N_>>машина.СнятьКолесо();

N_>>машина.Починить();
N_>>машина.ОдетьКолесо();

N_>>и


N_>>ОдетьКолесо(Починить(СнятьКолесо(машина)))


M>Во первых, такое элементарно реализуется на ИЯ.

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

починитьМашину( МашинаСПробитымКолесом ) ->
  Ключ = чешемРепуИВыбираемКлюч( МашинаСПробитымКолесом ),
  { ПлохоеПробитоеКолесо, МашинаБезКолесаЕхатьНеМожет } = снятьПереднееКолесо( МашинаСПробитымКолесом, Ключ ),
  ХорошееОтремонтированноеКолесо = Отремонтировать( ПлохоеПробитоеКолесо ),
  МашинаГотоваДавайДеньги = одетьПереднееКолесо( МашинаБезКолесаЕхатьНеМожет, Ключ, ХорошееОтремонтированноеКолесо ),
  { МашинаГотоваДавайДеньги, вотСколькоТыМнеДолжен( МашинаСПробитымКолесом, МашинаГотоваДавайДеньги ) }


Так лучше?

Вообще такие вещи совершенно одинаково выглядят на ФЯ и ИЯ. Здесь различия только косметические.
Re[11]: Где у ФЯ матчасть?
От: Mink Россия  
Дата: 03.09.04 12:23
Оценка: +6
Здравствуйте, Gaperton, Вы писали:

G>А если серьезно, то абсолютно пофигу, как писать. Разница между ФЯ и не ФЯ будет только в результате операции. Если она вернет измененный объект как часть результата, не тронув предыдущий — это функциональный стиль. Вот и весь пафос.


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

«Простые и последовательные» языки никогда не пользовались особым успехом за стенками академий, а языки с блочной структурой овладели массами. Стоит ли этому удивляться? Ведь компьютерные языки приходится изучать и запоминать, а для этого используется то же серое вещество, с помощью которого мы изучаем и запоминаем естественные языки. Попробуйте-ка назвать хотя бы один естественный язык без существительных, глаголов и скобок! Я бы не рискнул. Все наши познания в лингвистике говорят о том, что эти «плохие» особенности только ускоряют изучение компьютерного языка и делают его более понятным. i++ во всех отношениях действительно понятнее, чем i:=i+1, а x=17+29 читается лучше, нежели (setq(x(+17, 29)). Речь идет не о строении компьютерного языка, а скорее о нашем собственном строении.

Сила, она в ньютонах
Re[23]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 15:41
Оценка:
DG>>Как об этом узнает модуль-визуализатор?

N_>Если "ссылка" внешняя для программы, то работать с ней надо так же как с вводом-выводом.

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

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

Допустим у нас распределенная система — есть что-то (объект, функция — не важно)-сервер, и есть что-то клиенты.

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

И вот не понятно, как это будет выглядить на ФЯ.

ps
На объектах это выглядит просто:

class Server
{
  public int Value;
}

class Client
{
  public Client(Server server) {this.server = server;}
  Server server;
  public void OnTick()
  {
    if (new Random().Next(2) == 0)
       server.Value++;
    Out.Write(server.Value);
  }
}

void Main()
{
  Server server =new Server();
  Timer timer = new Timer();
  timer.Interval = 10;
  timer.Start();
  for (int i = 0; i < 10; ++i)
  {
    Client client = new Client(server);
    timer.Tick += server.OnTick;
  }
}
Re[24]: Сферы применения
От: Кодт Россия  
Дата: 03.09.04 15:55
Оценка:
Здравствуйте, DarkGray, Вы писали:

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


Фактически, передача чего-то по ссылке — это передача не данных, а функции доступа.
Говоря на C++,
void foo(int& bar)
{
  x = bar; sleep();
  y = bar; sleep();
  z = bar; sleep();
  bar = t;
}

////////////////////

void foo(/*byval*/ int(*get)(), /*byval*/ void(*put)(int))
{
  x = get(); sleep();
  y = get(); sleep();
  z = get(); sleep();
  put(t);
}
Перекуём баги на фичи!
Re[24]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 03.09.04 16:37
Оценка: 5 (1)
Здравствуйте, DarkGray, Вы писали:

DG>>>Как об этом узнает модуль-визуализатор?


N_>>Если "ссылка" внешняя для программы, то работать с ней надо так же как с вводом-выводом.

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

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


DG>Допустим у нас распределенная система — есть что-то (объект, функция — не важно)-сервер, и есть что-то клиенты.


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


DG>И вот не понятно, как это будет выглядить на ФЯ.

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

eventCycle( { Server, Clients } ) ->
   receive
   after 1000
      eventCycle( processEvent( fun OnTick/2, Clients, Server, [] ) )
   end.

processEvent( EventHandler, [ Client | Clients ], Server, UpdatedClients ) ->
    { UpdatedClient, UpdatedServer } = EventHandler( Client, Server ),
    processEvent( Clients, UpdatedServer, [ UpdatedClient | UpdatedClients ] ) ];
processEvent( [], Server, UpdatedClients ) -> { Server, UpdatedClients }.

OnTick( Client, Server ) ->
   %% do something, for example
   { Client, Server + 1 }.


Я надеюсь, принцип понятен — это можно обобщить до произвольных событий и реализовать подписку.

Если приложение будет распределенным, то решение на Erlang будет отчасти императивным. Мы запустим по одному процессу на сервер и каждого клиента, и они будут обмениваться сообщениями. Каждый процесс реализуется бесконечно рекурсивной функцией, содержащей обработчик сообщений. Логика внутри процессов будет сделана на чистых функциях.
Re[12]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 03.09.04 17:11
Оценка:
Здравствуйте, Mink, Вы писали:

M>Здравствуйте, Gaperton, Вы писали:


G>>А если серьезно, то абсолютно пофигу, как писать. Разница между ФЯ и не ФЯ будет только в результате операции. Если она вернет измененный объект как часть результата, не тронув предыдущий — это функциональный стиль. Вот и весь пафос.


M>Насчет пофиг я, пожалуй, не соглашусь

Имелось в виду Obj.Method( Parm ) или Method( Obj, Parm ).
Re[25]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 17:54
Оценка:
К>Фактически, передача чего-то по ссылке — это передача не данных, а функции доступа.

Согласен. Но функция опять же откуда должна брать меняющиеся данные...
Re[25]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 17:57
Оценка:
G>Я надеюсь, принцип понятен — это можно обобщить до произвольных событий и реализовать подписку.

А где работа с данными? т.е. где видно, что каждый из клиентов получает обновленные данные с сервера?
Re[9]: Где у ФЯ матчасть?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 03.09.04 18:05
Оценка: +2
G>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).
G>Так лучше?

Меня смущает идентификатор "МашинаБезКолеса".
Это же получается, что также будут идентификаторы "МашинаБезДвухКолес", "МашинаБезКолесаИБампера", "МашинаСКолесамиНоБезЗапаски" и т.д., т.е. на лицо комбинаторный взрыв, причем не понятно, как этого можно будет избежать в реальном проекте.
Re[26]: Сферы применения
От: Nick_ Россия  
Дата: 04.09.04 04:05
Оценка:
Здравствуйте, DarkGray, Вы писали:


К>>Фактически, передача чего-то по ссылке — это передача не данных, а функции доступа.


DG>Согласен. Но функция опять же откуда должна брать меняющиеся данные...


Если вы будуте хранить изменяющиеся данные в общей памяти, то ваша программа будет работать только в одном потоке.
Либо вам придется расставлять критические секции где попало. При этом не факт, что вы правильно с первого раза расставите критические секции и избежите взаимных блокировок.
Да, в функциональных языках для вас будет немного необычно написать то, что хотите. Зато компилятор сможет ее автоматически распараллелить.
Re[10]: Где у ФЯ матчасть?
От: Nick_ Россия  
Дата: 04.09.04 04:07
Оценка:
Здравствуйте, DarkGray, Вы писали:


G>>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>>Так лучше?

DG>Меня смущает идентификатор "МашинаБезКолеса".

DG>Это же получается, что также будут идентификаторы "МашинаБезДвухКолес", "МашинаБезКолесаИБампера", "МашинаСКолесамиНоБезЗапаски" и т.д., т.е. на лицо комбинаторный взрыв, причем не понятно, как этого можно будет избежать в реальном проекте.

Я уже писал.
новая_машина = одеть(починить(снять(машина)))
Re[27]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.09.04 07:25
Оценка:
DG>>Согласен. Но функция опять же откуда должна брать меняющиеся данные...

N_>Если вы будуте хранить изменяющиеся данные в общей памяти, то ваша программа будет работать только в одном потоке.


Вы ушли от вопроса.
На данный момент мне пофигу на блокировки, синхронизацию и т.д.
Сейчас мне интересно видеть, как две независимых части программы получают меняющиеся данные.
От Вас я услышал пока только одни общие слова "ФЯ — крутая парадигма, и там таких проблем нет", и не увидел ни одного конкретного примера.
Создается ощущение, что Вы не понимаете о чем Вас спрашивают, а только повторяете заученные слова.
Re[28]: Сферы применения
От: Nick_ Россия  
Дата: 04.09.04 08:16
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>>>Согласен. Но функция опять же откуда должна брать меняющиеся данные...


N_>>Если вы будуте хранить изменяющиеся данные в общей памяти, то ваша программа будет работать только в одном потоке.


DG>Вы ушли от вопроса.

DG>На данный момент мне пофигу на блокировки, синхронизацию и т.д.
DG>Сейчас мне интересно видеть, как две независимых части программы получают меняющиеся данные.
DG>От Вас я услышал пока только одни общие слова "ФЯ — крутая парадигма, и там таких проблем нет", и не увидел ни одного конкретного примера.
DG>Создается ощущение, что Вы не понимаете о чем Вас спрашивают, а только повторяете заученные слова.

Чесно говоря, я не понимаю вопроса.
если есть глобальные для программы данные, которые могут меняться обоими модулями, то модули должны их передавать друг другу по очереди. Если меняет один модуль, а другой только доступается, то первый модуль вызывает второй и передает ему данные, либо второй модуль вызывает первый что бы тот вернул ему эти данные. Я не понимаю в чем тут трудность?
Если бы вы привели пример кода на каком-нибудь императивном псевдоязыке, то я бы смог привести анологичный пример на функциональном языке.
Re[29]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.09.04 08:55
Оценка:
N_>Чесно говоря, я не понимаю вопроса.
N_>если есть глобальные для программы данные, которые могут меняться обоими модулями, то модули должны их передавать друг другу по очереди.

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

ps
Независимые означает, что модули друг о друге не знают

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


http://www.rsdn.ru/Forum/Message.aspx?mid=793251&amp;only=1
Автор: DarkGray
Дата: 03.09.04
Re[30]: Сферы применения
От: Nick_ Россия  
Дата: 04.09.04 09:50
Оценка:
ЗDG>Есть глобальные данные, которые меняются и читаются несколькими независимыми модулями.

DG>ps

DG>Независимые означает, что модули друг о друге не знают

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

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


DG>http://www.rsdn.ru/Forum/Message.aspx?mid=793251&amp;only=1
Автор: DarkGray
Дата: 03.09.04


Не совсем понятный пример. У вас там что, Client.OnTick вызывается из какого-то другого потока?
Re[31]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.09.04 10:28
Оценка:
N_>Не совсем понятный пример. У вас там что, Client.OnTick вызывается из какого-то другого потока?

В данном примере из одного (считается, что в потоке всегда есть очередь сообщения).

ps
Можно также сделать, чтобы OnTick вызывался из нескольких потоков.
Re[31]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.09.04 10:34
Оценка:
N_>Глобальных данных в функциональном программировании не существует.

Нет, не только глобальных данные — нет, вообще, общих данных.

N_>Придется передавать эти данные клиенту и серверу явно.


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

т.е. фактически не получается модульного программирования
Re[28]: Сферы применения
От: INTP_mihoshi Россия  
Дата: 04.09.04 11:08
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Вы ушли от вопроса.

DG>На данный момент мне пофигу на блокировки, синхронизацию и т.д.
DG>Сейчас мне интересно видеть, как две независимых части программы получают меняющиеся данные.
DG>От Вас я услышал пока только одни общие слова "ФЯ — крутая парадигма, и там таких проблем нет", и не увидел ни одного конкретного примера.
DG>Создается ощущение, что Вы не понимаете о чем Вас спрашивают, а только повторяете заученные слова.

Ну, ФЯ — крутая парадигма, и там таких проблем нет

С отходом от функционального стиля в OCaml это делается так

let my_inc_thread r iv () = 
    for i=1 to 10 do 
        r := !r + iv; 
        Printf.printf "(%d)" !r; 
        flush stdout 
    done in

let x = ref 3 in (* Императивная переменная, меняющая значения *)
let t1 = Thread.create (my_inc_thread x 1) () in
let t2 = Thread.create (my_inc_thread x 100) () in
Thread.join t1;
Thread.join t2


Два треда инкрементят одну переменную.

В чисто функциональном стиле это тоже делается. Даже более изящно. Как всегда, через монады. Т.е. в треде есть функция, которая принимает аргументом старое состояние, ждет сигнала, на основе его и старого состояние делает новое и вызывает (или не вызывает) саму себя уже с новым состоянием. Если интересно — могу набросать код. А лучше почитай O'Reillyвскую книжку — там все это есть.
Re[30]: Сферы применения
От: INTP_mihoshi Россия  
Дата: 04.09.04 11:24
Оценка: +1
Здравствуйте, DarkGray, Вы писали:

N_>>Чесно говоря, я не понимаю вопроса.

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

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


DG>ps

DG>Независимые означает, что модули друг о друге не знают

Но знают об этих глобальных переменных? Вот это и не правильно. Надо обернуть эти глобальные переменны в модуль, которые будет за них "отвечать" и вызывать остальные модули. Кстати, при этом ему тоже не обязательно ничего знать о других модулях, кроме необходимого.

В общем, формулируй конкретную задачу.
Re[32]: Сферы применения
От: Nick_ Россия  
Дата: 04.09.04 11:45
Оценка: +1 :))
Здравствуйте, DarkGray, Вы писали:


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

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

DG>т.е. фактически не получается модульного программирования


Это уже вопрос проектирования, а не языка. Мне кажется, что задача которую вы ставите сама по себе неправильна. Нельзя делать глобальную переменную, которую меняют все кому не поподя. Кривая программа на императивном языке будет сложна для функционального из-за своей кривости, а не потому что функциональные языки плохие.
Re[29]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 06.09.04 13:40
Оценка:
INT>В чисто функциональном стиле это тоже делается. Даже более изящно. Как всегда, через монады.

Чем монады отличаются от объектов?
Re[11]: Где у ФЯ матчасть?
От: hrg Россия  
Дата: 06.09.04 13:45
Оценка:
Nick_ -> "Re[10]: Где у ФЯ матчасть?" :

N> Я уже писал.

N> новая_машина = одеть(починить(снять(машина)))

Машина, которую уже чинили != новая Опять же, каждый экземпляр машины
обладает уникальными идентификационными номерами.

Yury Kopyl aka hrg | http://id.totem.ru |
"Если ты плюнешь на коллектив — коллектив утрется,
но если коллектив плюнет на тебя — ты утонешь" (С)Баралгин
Posted via RSDN NNTP Server 1.9 beta
Re[30]: Сферы применения
От: Quintanar Россия  
Дата: 06.09.04 14:41
Оценка:
Здравствуйте, DarkGray, Вы писали:


INT>>В чисто функциональном стиле это тоже делается. Даже более изящно. Как всегда, через монады.


DG>Чем монады отличаются от объектов?


Поскольку они не имееют ничего общего, ответить на этот вопрос будет сложно.
Re[31]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 06.09.04 14:55
Оценка:
INT>>>В чисто функциональном стиле это тоже делается. Даже более изящно. Как всегда, через монады.

DG>>Чем монады отличаются от объектов?


Q>Поскольку они не имееют ничего общего, ответить на этот вопрос будет сложно.


ИМХО, это ложное утверждение


Объект: характеризуется своим состоянием и операциями над ним.

Монада тоже имеет состояние и тоже имеет некий набор операций над собой.

Так в чем различие?
Re[26]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 06.09.04 14:59
Оценка:
Здравствуйте, DarkGray, Вы писали:


G>>Я надеюсь, принцип понятен — это можно обобщить до произвольных событий и реализовать подписку.


DG>А где работа с данными? т.е. где видно, что каждый из клиентов получает обновленные данные с сервера?

Ну, это...
Функция OnTick принимает два параметра, один из которых — сервер, а второй — клиент. Оба в актуальном состоянии.
Re[32]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 06.09.04 15:04
Оценка:
Здравствуйте, DarkGray, Вы писали:

INT>>>>В чисто функциональном стиле это тоже делается. Даже более изящно. Как всегда, через монады.


DG>>>Чем монады отличаются от объектов?


Q>>Поскольку они не имееют ничего общего, ответить на этот вопрос будет сложно.


DG>ИМХО, это ложное утверждение



DG>Объект: характеризуется своим состоянием и операциями над ним.


DG>Монада тоже имеет состояние и тоже имеет некий набор операций над собой.


DG>Так в чем различие?


Мнэ... Видишь ли, не существует единого способа работающего для всех объяснить, что такое монада.
Я серьезно. Это очень жесткая штука. Прикол в том, что даже если объяснить из чего она состоит, все равно ничего понятно не будет. Отсутствие краткого эффективного объяснения понятии монады — одна из главных проблем обучения языку Haskell. Я по крайней мере такового не видел.
Re[12]: Где у ФЯ матчасть?
От: Gaperton http://gaperton.livejournal.com
Дата: 06.09.04 15:06
Оценка:
Здравствуйте, hrg, Вы писали:

hrg>Nick_ -> "Re[10]: Где у ФЯ матчасть?" :


N>> Я уже писал.

N>> новая_машина = одеть(починить(снять(машина)))

hrg>Машина, которую уже чинили != новая Опять же, каждый экземпляр машины

hrg>обладает уникальными идентификационными номерами.
Все так. Семантика такая — нет деструктивных изменений.
Re[33]: Сферы применения
От: INTP_mihoshi Россия  
Дата: 06.09.04 15:19
Оценка: 21 (2)
Здравствуйте, Gaperton, Вы писали:

G>Мнэ... Видишь ли, не существует единого способа работающего для всех объяснить, что такое монада.

G>Я серьезно. Это очень жесткая штука. Прикол в том, что даже если объяснить из чего она состоит, все равно ничего понятно не будет. Отсутствие краткого эффективного объяснения понятии монады — одна из главных проблем обучения языку Haskell. Я по крайней мере такового не видел.

Google-time!

Результаты 1 - 10 из примерно 2 360 для What the hell are monads?. (0,19 секунд)


Кстати, помогло...
Re[32]: Сферы применения
От: Quintanar Россия  
Дата: 06.09.04 16:00
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>ИМХО, это ложное утверждение

DG>Объект: характеризуется своим состоянием и операциями над ним.
DG>Монада тоже имеет состояние и тоже имеет некий набор операций над собой.
DG>Так в чем различие?

Монада — это "довесок" к твоим собственным вычислениям. Во всяком случае из тех простых примеров, что я видел, можно понимать ее именно так. С ее помощью можно добавить разные дополнительные фичи типа исключений, сбора информации, состояний и т.п. практически не меняя основной так сказать алгоритм.
Re[33]: Сферы применения
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 06.09.04 16:05
Оценка:
DG>>Объект: характеризуется своим состоянием и операциями над ним.
DG>>Монада тоже имеет состояние и тоже имеет некий набор операций над собой.
DG>>Так в чем различие?

Q>Монада — это "довесок" к твоим собственным вычислениям. Во всяком случае из тех простых примеров, что я видел, можно понимать ее именно так. С ее помощью можно добавить разные дополнительные фичи типа исключений, сбора информации, состояний и т.п. практически не меняя основной так сказать алгоритм.


В любом случае, остается один вопрос: если они такие хорошие, зачем они такие сложные?
Почему их нельзя представить в более простом и понятном виде для программиста?
Re[34]: Сферы применения
От: Quintanar Россия  
Дата: 06.09.04 17:02
Оценка: +1 :)
Здравствуйте, DarkGray, Вы писали:

DG>В любом случае, остается один вопрос: если они такие хорошие, зачем они такие сложные?

DG>Почему их нельзя представить в более простом и понятном виде для программиста?

Если их использовать, не задаваясь вопросом, как они работают, то они не сложные. А сложность понимания их сущности обусловленна тем, что они практически буквально выдраны из теории категории, где есть прямой их аналог. А теория категорий одна из самых абстрактных теорий в математике, что, правда говоря, не означает, что она очень сложная. Просто в нее надо долго врубаться, чтобы понять как и что там устроено, привыкнуть к ней.
Почему вдруг теория категорий? Дело в том, что она претендует на роль основания всей математики. В ней можно выразить лямбда-исчисление, формальную логику, логику предикатов частично даже и еще бог знает что. Поэтому создатели(ль) монад искали естественный способ внести императивные фичи в ФЯ так, чтобы тот оставался самим собой и можно было бы доказывать всякие теоремы и т.п. Естественно, что они использовали для этого ТК, которая идеологически очень близка ФП.
Это не значит, что чтобы понять монады, надо учить ТК. Просто ввиду некоторой их абстрактности сразу принцип работы с ними понять нелегко. Тут нужно использовать метод просветления — изучать все возможные примеры, пока не дойдет их смысл.
Re[35]: Сферы применения
От: Gaperton http://gaperton.livejournal.com
Дата: 06.09.04 18:11
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q> Поэтому создатели(ль) монад искали естественный способ внести императивные фичи в ФЯ так, чтобы тот оставался самим собой и можно было бы доказывать всякие теоремы и т.п. Естественно, что они использовали для этого ТК, которая идеологически очень близка ФП.


Добавлю пять копеек. Возникает вопрос — почему просто не разрешить операции с побочными эффектами? Т. е. просто взять, и не добавить в ФЯ нормальные императивные фичи, без всяких монад?

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

Монады — не единственный выход. Второй подход — uniqueness typing, примененный в языке Clean, который обладает двумя преимуществами перед монадами:
1) Позволяет без особых усилий генерировать эффективный код, не проигрывающий императивным вариантам. С монадами это нетривиально. Массивы и ввод/вывод в языке Clean сравним по эффективности с императивными языками.
2) Интуитивно понятен, в отличии от монад. Все просто — вы помечаете аргумент функции звездочкой, и компилятор проверяет, что на него него не остается ссылок после вызова. А раз ссылка на него единственна, то можно делать модифицирующие операции.
Re[8]: Где у ФЯ матчасть?
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.04 19:27
Оценка: -1 :)
Здравствуйте, DarkGray, Вы писали:

DG>Пример:

DG>Возьми ключ, и сними переднее колесо.

DG>Конструкция, по сути, императивная.


Да ты чё? Щаз к твоему предложению приделают функции высшего порядка и окажется, что ты писал о псих-больнице, так как ключ был от шкафа с таблетками, а переднее колесо — это таблетка лежащие с края.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Где у ФЯ матчасть?
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.04 19:27
Оценка:
Здравствуйте, Gaperton, Вы писали:

DG>>Открюченное колесо — это колесо, которое не прикручено к машине.

DG>>Сделай так, чтобы переднее колесо было открюченным колесом.

G>{ Колесо, МашинаБезКолеса } = снятьПереднееКолесо( Машина, Ключ ).

G>Так лучше?

Вот так полная задница.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Где у ФЯ матчасть?
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.04 19:27
Оценка:
Здравствуйте, Кодт, Вы писали:

Не лучше так:
Дама (Д) — У меня колесо проколато надо починить. Сколько мне это будет стоить?...
Слесарь (С) — Извените я раньше матиматиком работал...
Д — И что?
С — Не могли бы вы сформулировать задачу в функциональном стител?
Д — Подлец! Ты на что на что намикаешь? (бьет слесаря по морде).



Это я к тому что инструкции разные бывает. Дама дйствительно не будет описывать набор действий. Он просто опишет проблему. Но опишет она ее хотя и декларативно, но все же не функциональном стиле. Она просто продекларирует свое желание и исходные данные. А уже слесарь обязан будет правильным образом проинтерпретировать их. Даже домыслить их воспользовавшись своим опытом и контестом. И выбрать оптимальный императивный путь решения задачи.

К чему это я все клоню?

Правильно! R#!

Создаем систему деклараций намерений и описания входных данных/предпосылок.
Подбираем наилучшее решение.
Определяем контекст и на его основании выбираем и применяем решение.

А вы говорите функциональные языки...

... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[36]: Сферы применения
От: Quintanar Россия  
Дата: 11.09.04 22:46
Оценка: 3 (1)
Кстати, интересная цитата из статьи Hughes'а:

О теории категорий.

Перед тем, как продолжить, мы немного отклонимся в сторону теории категорий. Концепция монады была разработана специалистами в теории категории задолго до ее последующего применения в функциональном программировании. Некоторым может показаться удивительным тот факт, что нечто столь абстрактное как теория категорий оказалось полезным в столь конкретной области как программирование. В конце концов, теория категорий в известной степени настолько абстрактна, что не может не быть несколько неудовлетворительной: вся она это одни определения без теорем, практически все можно свести к категории, если достаточно долго поломать над этим голову, сказать, что что-то есть категория, значит не сказать практически ничего. Тоже самое относится и к большинству категорных концепций: они имеют множество возможных воплощений и сказать, к примеру, что нечто есть монада, значит не сказать практически ничего. Столь сильная общность — это одна из причин, почему начинающему так трудно развить хорошую интуицию в теории категории, но это и неудивительно: в конце концов, теория категорий была создана с целью быть теорией всего, каркасом в который можно было бы вставить другие многочисленные математические структуры. Но почему столь абстрактная теория должна иметь какое-либо применение в программировании?
Ответ прост: как специалисты в CS мы ценим абстракции! Когда мы разрабатываем интерфейс к програмному компоненту, мы хотим, чтобы он скрывал как можно больше деталей реализации. Мы хотим, чтобы у нас была возможность заменить текущую реализацию на другие возможные альтернативы, многие другие реализации той же самой 'концепции'. Если мы разрабатываем общий интерфейс для библиотек, то возможность выбора из множества реализаций становится еще более важной. Именно высокую общность 'концепции' монад мы оцениваем так высоко, именно потому что теория категорий столь абстрактна, ее концепции оказываются столь полезными в программировании.
Re[37]: Сферы применения
От: Павел Леонов Россия icq: 138726397
Дата: 12.09.04 13:16
Оценка:
Здравствуйте, Quintanar, Вы писали :

Q> Кстати, интересная цитата из статьи Hughes'а:


Хоть парочку ссылочек бы на теорию категорий, в инете искал, но там больше около теорные статьи, прямого материала найти не удалось.
Posted via RSDN NNTP Server 1.9 gamma
Re[38]: Сферы применения
От: naje  
Дата: 12.09.04 13:39
Оценка: 8 (1)
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Здравствуйте, Quintanar, Вы писали :


Q>> Кстати, интересная цитата из статьи Hughes'а:


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


странно что не удалось ничево найти, я в своё время находил минимум 5 введений, недавно даже натолкнулся на какую-то книжку 2004 года доступную в онлайне, из всех введений в теорию категорий Toposes, Triples and Theories by Michael Barr and Charles Wells. наверное самое знаменитое (Triples кстати это и есть монады), лично мне очень сильно понравилось как введение Categories, Types and Structures by Andrea Asperti and Giuseppe Longo.
а вобще вот самый правильный линк, только что проверял, работает нормально здесь

а потом существует просто немеренно количество людей, рассылок и журналов по разным приложениям, нужно просто последний линк немного поменять, только вот что это даёт? эта теория нужна разве только нужно разрабатывать свой язык программирования, а их и так уже норъмалъно.
Re[39]: Сферы применения
От: naje  
Дата: 12.09.04 13:45
Оценка:
Здравствуйте, naje, Вы писали:


N> эта теория нужна разве только нужно разрабатывать свой язык программирования, а их и так уже норъмалъно.


ps да и к пониманию монад эти книжки никак не приблизят, а могут даже и отдалить от понимания того что понимал раньше и не только о монадах, даже если использовать такой линк [http://www.google.com/search?sourceid=mozclient&amp;ie=utf-8&amp;oe=utf-8&amp;q=introduction+category%2Btheory+computing%2Bscience]здесь[/url]
Re[40]: Сферы применения
От: naje  
Дата: 12.09.04 13:53
Оценка:
Здравствуйте, naje, Вы писали:

N>Здравствуйте, naje, Вы писали:



N>> эта теория нужна разве только нужно разрабатывать свой язык программирования, а их и так уже норъмалъно.


N>ps да и к пониманию монад эти книжки никак не приблизят, а могут даже и отдалить от понимания того что понимал раньше и не только о монадах, даже если использовать такой линк здесь

N>

PPS и ещё, если кто-то захочет всё-таки понять монады с использованием теории категорий, то вот Notions of computation and monads, Computational lambda-calculus and monads статьи, из-за которых монады и появились в ФЯ
Re[41]: Сферы применения
От: Павел Леонов Россия icq: 138726397
Дата: 12.09.04 14:03
Оценка:
Здравствуйте, naje, Вы писали :

Все нормально, в этих делах хочется как следует разобраться.
Posted via RSDN NNTP Server 1.9 gamma
Re[42]: Сферы применения
От: Quintanar Россия  
Дата: 12.09.04 16:26
Оценка: :)
Здравствуйте, Павел Леонов, Вы писали:

ПЛ>Здравствуйте, naje, Вы писали :


ПЛ>Все нормально, в этих делах хочется как следует разобраться.


На самом деле нет большого смысла изучать ТК дальше введения. Она действительно очень абстрактная и никакой связи с "жизнью" в ней так просто не углядеть. Все примеры — на основе математических структур. Хотя своя польза в изучении есть, мозги она прочищает конкретно.
Re[9]: Где у ФЯ матчасть?
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.09.04 04:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, DarkGray, Вы писали:


DG>>Пример:

DG>>Возьми ключ, и сними переднее колесо.

DG>>Конструкция, по сути, императивная.


VD>Да ты чё? Щаз к твоему предложению приделают функции высшего порядка и окажется, что ты писал о псих-больнице, так как ключ был от шкафа с таблетками, а переднее колесо — это таблетка лежащие с края.


VladD2, я ещё раз извиняюсь , но можно чуть корректней, если не трудно?
Re[10]: Где у ФЯ матчасть?
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.09.04 17:02
Оценка: -1
Здравствуйте, Курилка, Вы писали:

VD>>Да ты чё? Щаз к твоему предложению приделают функции высшего порядка и окажется, что ты писал о псих-больнице, так как ключ был от шкафа с таблетками, а переднее колесо — это таблетка лежащие с края.


К>VladD2, я ещё раз извиняюсь , но можно чуть корректней, если не трудно?


А что некорректого то? Может это проблемы с юмеорам? И не у меня?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.