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# никто не использует не потому, что люди глупы, а по ряду серьезных причин.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.