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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 172—163 | 162—153 | 152—143 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 535


    № 162   14-06-2006 11:34 Ответить на это сообщение Ответить на это сообщение с цитированием
    Пришел info21 и своим брюзжанием напомнил мне часто слышавшиеся в одно время разговоры "В гробу я видал вашее ООП. Я и на кошках, ээ то есть на си, неплохо зарабатываю"

    В прочем, призывы работать на ассемблере (си, паскале, обероне) будут наверное слышаться в индустрии программирования до скончания веков :))

    Но главное в том, чтобы у людей был выбор. Чтобы они слышали обе стороны.
    И отрицательное мнение людей о функциональном программировании является органической частью этого обсуждения.
    Правда я бы хотел чтобы оно (мнение) иллюстрировалось бы конкретными примерами.
    Поэтому прошу info21. Не могли бы вы поделиться с описанием тех трудностей, с которыми вам пришлось столкнуться в вашей, судя по всему, долгой практике работы с функциональными (?) языками ?
    Да и вообще а что за язык (языки) то были ?

    А то по вашему ответу на этот вопрос:

    А реализации, случаем, на ФОРТРАНЕ были?
    Фортран не намного хуже ассемблера для реализации того же лиспа.


    может сложиться впечатление что вы действительно по фортрану о лиспе судите :))
    Это типа как - "Напел мне вчера сосед Паваротти. Ну и хреново этот Паваротти поет!" :)))



    № 161   14-06-2006 11:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>А вот скажем чистый (куда уж чище :)) ) функциональный язык хаскель,
    >>>имеет модули. Почитайте на простом, понятном  языке описано:
    >>>http://www.haskell.org/tutorial/modules.html

    Спасибо! По Вашей ссылке я нашел то, о чем давно подозревал :)
    Нет никакой "пропасти" между хорошими императивными языками и хорошими функциональными.
    Вот фрагмент текста на Haskell.
    module Main (main) where
    import Tree ( Tree(Leaf,Branch), fringe )
    main = print (fringe (Branch (Leaf 1) (Leaf 2)))
    Что-то напоминает очень знакомое? Особенно некоторые конструкции :)
    Великие идеи не знают границ - например, такая идея, как идея модульности. И это хорошо.



    № 160   14-06-2006 10:29 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 159« ()
    ___________________________

    Бред какой-то: динамические структуры и Immutability.
    Вы хоть поняли, что сказали?


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

    А реализации, случаем, на ФОРТРАНЕ были?
    Фортран не намного хуже ассемблера для реализации того же лиспа.

    Функциональное пррограммирование на ПАСКАЛЕ?
    Где вы это прочли? Читать вы точно не умеете.

    Мы очень рады. Хотя, поверьте, лично вам это пользы не сделает.
    Рад, что порадовал вас.
    Пользу мне "делает" то, что я делаю на Обероне.

    За то бывает есть объективное сравнение затрат на том или ином языке соответствующих парадигм и подходов.
    Вы не только читать не умеете, но и писать.

    В Лиспе НЕ возвращаются ЛОКАЛЬНЫЕ функции в понятиях, сложившихся в императивных языках.
    Вы точно не умеете читать. Я нигде не говорил про такие функции.

    Такого конкурса для функциональных языков нет.
    Этого вы знать не можете. Вы можете не знать о таком конкурсе.


    № 159   14-06-2006 07:39 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 156« (info21)
    ___________________________
    Поучительно, каждому желаю. Immutability -- незаменимая вещь при работе с сильно динамическими структурами (и про компаскалевский атрибут LIMITED вопросов не будет); про последовательности и фильтры.
    Бред какой-то: динамические структуры и Immutability.
    Вы хоть поняли, что сказали?

    Вынужден уточнить, что первую (и лучшую) половину своей карьеры имел дело практически исключительно с функциональными и марковскими системами.
    А реализации, случаем, на на ФОРТРАНЕ были? А то подозрительно как-то слышать про сочетание "динамические структуры и Immutability".

    но лучше прямо, а не через ухо, -- на Компонентном Паскале (из-за LIMITED и т.п.). Вот тогда и получится не, к примеру, движок для символической алгебры, а просто глиняный пулемет.
    Функциональное пррограммирование на ПАСКАЛЕ? Патология какая-то!

    А к программированию на функц. языках я после Оберона не вернусь
    Мы очень рады. Хотя, поверьте, лично вам это пользы не сделает.

    А чудес не бывает.
    За то бывает есть объективное сравнение затрат на том или ином языке соответствующих парадигм и подходов.

    А возращать локальные функции -- в гробу хочется видеть такие штуки.
    В Лиспе НЕ возвращаются ЛОКАЛЬНЫЕ функции в понятиях, сложившихся в императивных языках.

    Жизнь-то одна, и хочется че-нить реальное совершать, а не примеры для конкурса Obfuscated Lisp генерить.
    Такого конкурса для функциональных языков нет. А вот для императивных - есть. ;)
    Сообщение не подписано


    № 158   14-06-2006 06:37 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 156« (info21)
    ___________________________

    .. первую (и лучшую) половину своей карьеры имел дело практически исключительно с функциональными и марковскими системами.

    Уточню на всякий случай, а то начнут цитировать не так :-)
    Лучшую не потому, что "имел дело ...", а потому, что казалось, что можно спокойно позволить себе заниматься всякой-разной эквилибристикой ...


    № 157   14-06-2006 06:27 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 88« (Руслан Богатырев)
    ___________________________

    ... при сопоставлении функционального и императивного подходов не совсем корректно сравнивать функции Лиспа с объектами.

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

    А "посылание сообщений" -- интерпретация, слова, бла-бла-бла.


    № 156   14-06-2006 06:22 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 90« (Jack Of Shadows)
    ___________________________

    Ответ на »сообщение 83« (info21)
    ___________________________
    А компактность лисповской программы прямо связана с ее нечитабельностью.

    Says who ? ...

    У программистов, знакомых не понаслышке с функциональным подходом есть преимущество. Они могут об этом судить.
    Те же кто всю жизнь писал в императивном стиле, вынуждены верить заявлениям всяких гуру.
    Я призываю всех заинтересованных в 'ndtnt на этот вопрос - не верьте ни мне ни infor21.


    Да, со всякими гуру в он-лайновых форумах просто беда ;-) Хорошо, что Trurl есть.

    "... слишком близки к человеку ..." -- как это помягче говорить по-русски? "язык без костей"? :-)
    То же и про автоматическую параллелизацию.

    Вынужден уточнить, что первую (и лучшую) половину своей карьеры имел дело практически исключительно с функциональными и марковскими системами. Поучительно, каждому желаю. Immutability -- незаменимая вещь при работе с сильно динамическими структурами (и про компаскалевский атрибут LIMITED вопросов не будет); про последовательности и фильтры.

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

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

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

    А возращать локальные функции -- в гробу хочется видеть такие штуки. Жизнь-то одна, и хочется че-нить реальное совершать, а не примеры для конкурса Obfuscated Lisp генерить.

    Резковато, но искренне ;-)


    № 155   14-06-2006 02:55 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 154« (Max Belugin)
    ___________________________
    Ну лисп там чисто случайно. Мужик прочитал книжку по лиспу, о чем решил сообщить миру.
    Если хотите читать действительно интересные блоги по лиспу то вот вам несколько:
    Bill Clementson's Blog - http://bc.tech.coop/blog/index.html
    Gary King - http://www.metabang.com/unclog/
    Lemonodor - http://lemonodor.com/


    № 154   14-06-2006 00:49 Ответить на это сообщение Ответить на это сообщение с цитированием


    № 153   13-06-2006 13:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Зачем нужны эти чортовы макросы в лиспе ? Разве нелдьзя писать без них.
    Конечно можно!
    Но, зачем вам в языке две конструкции if и case ? Разве нельзя все делать с if ?
    Конечно можно! Но какой получится громоздкий код! Чтобы сделать код красивше, меньше, понятнее, вводят в язык case. То же самое с for и while. В принципе for начерта не нужен.
    while i < 100
      i = i + 1;

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

    Но кто вводит эти операторы в язык ? Простые программисты ? Нет! Создатели языка! Только боги, типа Вирта,  Алана Кея, Гослинга, Гвидо ван Россума, Андерса Хейлсберга, решают что вам нужно а что нет.
    А если нужно добавить что то ? Уууу. Тяжкий случай. Затаскают по комитетам, заседаниям, понапишут талмуды нечитаемых стандартов и может быть (МОЖЕТ БЫТЬ!!) лет через 5-10 вы получите то что вам так нужно.

    Вот скажем в хаскеле появились list comprehensions. Аатличная весчь! А в Питоне их нет. Питонисты аж черной завистью изошли, и давай доставать Гвидо, добавь да добавь их в питон. Все мозги ему сделали. Наконец через несколько лет он сдался и УРа !! Теперь в питоне есть list comprehensions.

    Напомнить вам как долго и тяжело шли generics в сишарп ? Как они попавли в java только потому что не отстать от сишарпа ? Посмотрите сколько времени проходит между выходом новых версий языков.
    Короче процесс мучительный.

    А в это время в альтернативном и прекрасном мире лиспа...
    В лиспе видите ли нет оператора if.
    Это макрос. Понадобилось когда то кому то - накропал быстренько. Никакой беготни за хозяином (Mccarty) никаких утрясаний в комитетах, никаких подковерных политических игр со стандартизацией.
    10 минут работы, и вот тебе if. И loop тоже макрос. и dolist (цикл по списку) и dotimes (цикл типа for i=1 to 10) Да практически все что есть в лиспе - макросы.

    Вот скажем в лиспе тоже нет list comprehensions. Ну и что ? Будем устраивать лоббирование и давление на кого то там чтобы добавили ? Будем ждать годы ? Да ни за что! Делов то на часик работы и маленький макрос накропать.
    Вот он кстати:


    (defun open-bracket (stream ch)
      (defmacro comp ((e &rest qs) l2)
        (if (null qs) `(cons ,e ,l2)              ; rule A
            (let ((q1 (car qs))
                  (q (cdr qs)))
              (if (not(eq (cadr q1) `< -))          ; a generator?
                  `(if ,q1 (comp (,e ,@q),l2) ,l2) ; rule B
                  (let ((v (car q1))              ; rule C
                        (l1 (third q1))
                        (h (gentemp \"H-\"))
                        (us (gentemp \"US-\"))
                        (us1 (gentemp \"US1-\")))
                    `(labels ((,h (,us)            ; corresponds to a letrec
                                (if (null ,us) ,l2
                                    (let ((,v (car ,us))
                                          (,us1 (cdr ,us)))
                                      (comp (,e ,@q) (,h ,us1))))))
                      (,h ,l1)))))))
      (do ((l nil)
          (c (read stream t nil t)(read stream t nil t)))
          ((eq c `|]|) `(comp ,(reverse l) ()))
        (push c l)))

    (defun closing-bracket (stream ch) `|]|)



    Все! Эти несколько строк кода заменяют лисперам все ваши комитеты, стандарты и годы ожидания. :)))

    Вот это то что делает лисп уникальным. Много есть императивных языков. Много функциональных.
    Есть даже несколько чистых функциональных языков.
    Но лисп - единственный в своем роде. МЕТА-ЯЗЫК. ПРОТО-ЯЗЫК.

    Руслану вон нужны позарез модули в лиспе. Их нет, и знаете что ? Руслану не нужно ждать когда появится модула - 3, 4, 5 итд. Он может просто НАПИСАТЬ модули для лиспа. Не охота связываться ?
    Их написал уже кто то другой. http://www.flownet.com/gat/locales.pdf

    Да, кстати, packages которые я упоминал, их в лиспе тоже...правильно, НЕТ! Это макросы. :)))

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



    <<<... | 172—163 | 162—153 | 152—143 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 535


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

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

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

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

    Перейти на конкретную страницу по номеру
      
    Время на сайте: 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

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