Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  04:46[Войти] | [Зарегистрироваться]
Обсуждение темы:
Функциональное программирование

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

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

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

 Jack Of Shadows

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 5502 сообщения

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Средства разработки. Языки программирования.
  • Delphi 4 or Delphi 5
  • Что приобрести в качестве средства разработки?
  • Delphi6
  • Delphi vs PowerBuilder
  • Сравнение компиляторов
  • Вот и вышла Delphi 7... Вы рады?

  • <<<... | 1412—1403 | 1402—1393 | 1392—1383 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 411


    № 1402   02-11-2006 19:34 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1401« (Сергей Перовский)
    ___________________________
    Хотите полью воду вам на мельницу ? :))
    Пару дней назад надо было решить задачу по автоматизации переброски файлов по SFTP клиенту.
    Ну естественно я сразу ткнулся в лисп поскольку лисп это самый лучший язык в мире.
    Быстренько выяснилось что родной библиотеки sftp для лиспа нет. Ну не написал никто, не сподобился :)
    Com библиотеки у меня тоже не было, а платить за коммерческие не хотелось.
    Разбираться с FFI для подключения сишных библиотек к лиспу для такой мелкой задачи было неохота.
    Тогда я просто взял Python, для которого sftp библиотека нашлась.
    Вот и все. На сегодня уже около 8000 pdf им скачали.
    Да и не моя это забота уже. Скрипт работает автоматом.

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



    № 1401   02-11-2006 15:12 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1400« (Jack Of Shadows)
    ___________________________
    >>>Ну а если без шуток то для всего.
    "Идеальных инструментов не бывает"(с)Jack Of Shadows


    № 1400   02-11-2006 13:48 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1398« (Сергей Перовский)
    ___________________________
    Просто каждый раз, когда Вы говорите, что лисп самый лучший, я интересуюсь, самый лучший для чего? И нет мне ответа...


    Не для чего а для кого. Для меня :))
    Ну а если без шуток то для всего. Но это опять таки мое недоказуемое мнение.

    Да, хочу вас предупредить Сергей. Если вы уже решитесь на этот путь то срезать углы не получится.
    Это на java, сишарп можно без переучивания с дельфи пересесть.
    Быстренько проштудировал синтаксис да библиотекиЮ и все.
    По большому счету это все просто машины разных моделей.

    А пересаживаться с них на лисп, это как из за баранки автомашины к штурвалу самолета.
    Нащупать руками "нечто похожее на руль" а ногами "нечто похожее на педали" и я ща полечу, гы :))
    Так не получится.
    Вам таки придется обратно за школьную парту. И решать задачки. Решать потому что их надо решать не так как вы это делали всю свою программисткую жизнь.
    Список книг здесь уже много раз приводился. Если захотите дам еще раз.

    Ну а теперь по поводу главного вопроса который мучает всех императивщиков. "А что если мне это не понадобится ? Я зря потрачу столько времени ?" :))))

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


    № 1399   02-11-2006 13:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1398« (Сергей Перовский)
    ___________________________
    Не "покажите как строить", а просто "покажите многоэтажку", я сам посмотрю.
    Лисп, как вы знаете, все это время был нишевый язык. Программы (и большие сложные программы) на нем пишут.
    Но не ширпотреб. Office или Excel на лиспе вы не увидите.
    В основном это программные системы на заказ, штучная работа. Либо очень дорогие системы.
    Обьектную базу данных, экспертную систему - пожалста.
    На http://www.franz.com/success/ можете посмотреть на примеры использования лиспа в крупных компаниях.
    Там слева под Sucess Stories список.

    Из очень купных проектов например системы искусственного интеллекта на базе лиспа - обычное дело в крупных финансовых структурах. В основном VISA, Mastercard, системы отслеживания credit history, или мониторинга кредитных транзакций.
    Там без экспертных систем никуда. А все разработки в этой области в основном на лиспе и делались.
    Некоторые после этого пепеписывались на си для увеличения быстродействия (например CLIPS) Но язык программиста все равно оставался лиспом.

    Можете еще на lispworks.com посмотреть. У них там есть перечень проектов их крупных клиентов.

    Но все это издалека как вы понимаете. Пощупать рукамаи вам вряд ли удастся. :))

    У ocaml и хаскель дела еще хуже обстоят. Даже по сравнению с лиспом они совершенно неизвестные языки.

    Но тем не менее на хаскеле например написана такая популярная система version control как darcs. http://www.darcs.net/

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

    Или скажем perl 6 пишется на хаскеле. Код тоже доступен http://www.pugscode.org/

    Если вас интересуют практические приземленные вещи, то надо уже смотреть на common-lisp.net по списку библиотек.
    Я например для web программирования использую AllegroServe в качестве web сервера, и webactions как web framework. Еще там есть очень крутая библиотека ucw для этого дела.


    № 1398   02-11-2006 13:08 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1395« (Jack Of Shadows)
    ___________________________
    >>>У меня не получается. Видимо слишком мало в дельфи мест где "удобно" :))
    А при чем тут дельфи. Я про то ЧТО мы делаем, а не чем.
    Если часть задачи можно представить в виде функции, почему нет?

    >>>Мне удобно. Но ведь для вас это не показатель.
    Показатель. Но хотелось бы объективной информации, а не субъективных ощущений.


    >>>Ну это все равно что сказать "мне сопромат учить неинтересно, вы мне сразу покажите как многоэтажку строить" :))
    Не "покажите как строить", а просто "покажите многоэтажку", я сам посмотрю.
    Если человек уже сам настроил достаточно сооружений, естественно его не убедить в достоинствах новой технологии строительства на примере собачьей будки.
    Проблема масштабирования тут стоит очень остро (и в строительстве и в программировании :) ). Я уже упоминал учебник Гриса по формальному программированию, где в качестве сложной задачи приводится алгоритм Евклида.

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




    № 1397   02-11-2006 12:57 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1396« (Geniepro)
    ___________________________
    Дык на то и смешанный язык чтобы можно было бы и так и так.
    Что говорит о том что посадить императивщика за ФЯ (нечистый ФЯ) недостаточно.
    Его нужно учить, учить заново, с нуля.
    А это как сказал нам Сергей Перовский - им неинтересно.

    Мне ocaml не нравится по другой причине. Я не против смешанности. она мне и в лиспе не мешает.
    Но у ocaml есть ... неуклюжести что ли. Например он не полиморфен.
    Для int и float у них разные операторы + и +. - и -. / и /.
    Потом куча совершенно ненужного синтаксиса. Например in в конце каждого let

    Из за этого даже в f# ввели light synthax - чтобы убрать все эти лишние закорючки.
    Мне, человеку привыкшему что любой блок начинается и заканчивается одинаково () ocaml не по душе.

    Кстати я где то читал, что хаскель как раз и задумывался как "исправленный" ML, то есть без всех этих идиосинкразий.
    Я пробовал и хаскель и ocaml. И мне хаскель гораздо больше нравится. Чувствуешь себя как дома, как в лиспе.
    В хаскеле даже основной синтаксис (вызов функций и списки) лисповый.
    То есть (f a b с) а не f(a, b, c)


    № 1396   02-11-2006 12:33 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1395« (Jack Of Shadows)
    ___________________________

    F#/Caml, конечно, хорошо, но честно говоря, я немного разочаровался в этих языках, увидев такой код:

    for x = 0 to x_res - 1 do
      for y = 0 to y_res - 1 do
        f list x y
      done
    done;


    Циклы!!! :-)) Императивщина!!! x и y мутабельны!

    Хотя, тот же SISAL называли ЧИСТЫМ ФЯ с однократными присваиванием, но там тоже были похожие циклы. Там объясняли, что переменная цикла в каждой итерации на самом деле уже не та же самая переменная, что в предыдущей...
    Вот так сохраняли Single Assignment... Может и тут тоже типа того?

    ЗЫ. Наверное, лучше всего ФП выражается в более чистых языках, таких как Хаскелл или Clean. Ленивые вычисления - как раз против императива...

    Хотя, конечно, F# поудобнее... Интересно, Макрософт Рисерч собирается делать Visual Haskell для Студии 2005? Было бы очень классно...


    № 1395   02-11-2006 11:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1394« (Сергей Перовский)
    ___________________________
    Ресурс времени и сил ограничен.
    Это точно. В сутках всего 24 часа. А ведь так много всего нужно и хочется сделать. А тут еще и семья, да и хобби тоже есть правильно ? На айкидо пойти, в тенис поиграть, в горы сходить, кино посмотреть, книжки почитать. Не программированием единым жив человек.
    Я вас понимаю. Каждый человек выбирает то на что ему хочется потратить время. В вашем случае это не функциональное программирование.

    Успею ли я больше? Во первых ускорение может оказаться не настолько большим. Во вторых для моих задач его может вообще не быть.
    Все может быть. Выяснить вы это сможете только поробовав, на что как мы уже выяснили времени у вас катастрофически не хватает. Все таки читать книжку по ocaml (я даже такого инопланетянина как лисп не упоминаю) и решать задачки не так интересно как очередной роман Лукьяненко. Да и скучно учиться ЕЩЕ раз.

    Там, где это удобно, я могу писать в функциональном стиле и в Дельфи.
    У меня не получается. Видимо слишком мало в дельфи мест где "удобно" :))

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

    Вас ввели в заблуждение. В таких ФЯ как ocaml (ближе к вам) или лисп (дальше от вас) императивная работа точно такая же как и в знакомых вам языках.

    Удобно ли для всего этого использовать функционально ориентированный язык?

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


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


    Ну это все равно что сказать "мне сопромат учить неинтересно, вы мне сразу покажите как многоэтажку строить" :))

    На самом деле не все так тяжко. Но знать это может только кто перешел от слов к делу.

    Есть ли у функциональщиков Opensource?
    В виду того что ФЯ пока что не обласканы вниманием коммерческих компаний, они практически только в виде  opensource и существуют.
    Сайт OCAML вы найдете сами. F# и хаскель тоже.
    Лисп здесь: common-lisp.net
    Scheme: Drsheme.org

    Для тех кто ломает голову как же начать применять ФЯ на практических задачах - самый легкий способ F#
    После инсталяции VS и F#
    Создаете 2 проекта. Один сишарп, где рисуете окошки с кнопочками, и всякими другими визуальными рюшечками.
    Там никакого кода не пишите. Просто компилируете получившуюся красоту в виде dll.
    Второй проект f# (оба проекта можно держать в одном solution и просто переключаться между нимим когда надо.)
    В него добавляете assembly reference на созданный вами dll.
    Вуаля! Из f# можете теперь присоединять ивенты к кнопочкам на форме и весь код писать уже на f#

    Книжки по f# пока к сожалению нет. Обещают выпустить в следующем году.
    Но поскольку они постарались сохранить совместимость с ocaml, то можно взять книжку по ocaml.
    На первое время хватит.
    Примеры работы с кнопочками и окошками есть на сайте f#

    Это тем кого лисп пугает. Кого не пугает, лисп конечно самый лучший. :))
    Удачи в уговаривании самого себя.



    № 1394   02-11-2006 07:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1381« (Владимир Лось)
    ___________________________
    >>>Я не о языке говорю, а подходах к проектированию.
    И я о том же.
    Сменить парадигму МЫШЛЕНИЯ непросто.
    Мне говорят, "лучше день учится летать, потом за пять минут долететь"(с)

    Ресурс времени и сил ограничен. Задачи, которые хотелось бы успеть решить, известны. Требуется оптимизировать стратегию.
    Можно пользоваться привычными методами и средствами. Я знаю, что успею не все, что задумал, но многое.
    Можно потратить время на освоение новых методов и технологий. Успею ли я больше? Во первых ускорение может оказаться не настолько большим. Во вторых для моих задач его может вообще не быть.
    Функциональный и императивный подход в чистом виде практически не встречаются.
    Там, где это удобно, я могу писать в функциональном стиле и в Дельфи.
    Но у меня не возникнет проблем там, где функциональный подход не работает.
    Если язык основан на функциональном подходе, то в нем придется извращаться в тех местах, где понятие состояния необходимо. Оно мне надо?

    Работа с пользовательским интерфейсом всегда предполагает понятие текущего состояния; работа с базами данных предполагает понятие текущего состояния; построение конечных автоматов включает понятие состояния и т.д.
    Удобно ли для всего этого использовать функционально ориентированный язык?
    Если решать задачи типа ДАНО->ТРЕБУЕТСЯ(Т.е. если задача состоит в том, чтобы написать ФУНКЦИЮ), то функциональный подход идеален.
    Если же нужно создать интерактивную (в любом смысле) систему, то тут возникают большие сомнения, которые пока никто рассеять не смог.
    А призывы попробывать непонятны. Попробывать решать задачки? Неинтересно.
    Вот попробывать изучить пример построения серьезной системы - это да.
    На это я бы времени не пожалел.
    Есть ли у функциональщиков Opensource?




    № 1393   02-11-2006 07:18 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1392« (Владимир Лось)
    ___________________________

    Ответ на »сообщение 1389« (al_mt)
    ___________________________
    Если я хоть что-то понял относительно ФЯ, кэширование должно быть спрятано от программиста напрочь.
    Это не только применительно к ФЯ...
    А где,когда и какой идиот выствляет клиенту(пользователю) своей библиотеки(системы, утилиты, поделки) факт наличия кеша и необходимости им управлять? Смысл кеша как раз в "незаметности" и "создании впечатления" :о)

    При чём здесь пользователь??? Я программист. У меня в памяти кусочек документа, в БД весь документ. В подкачиваю/выгружаю куски по мере надобности. ИМХО в такой ситуации теряется главное преимущество ФЯ, т.к. мне приходится вручную рулить императивными сущностями.


    <<<... | 1412—1403 | 1402—1393 | 1392—1383 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 411


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

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

    Яндекс цитирования