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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

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


    № 152   13-06-2006 12:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    По поводу лисповых макросов.
    Руслан, макросы в лиспе это самая обычная лисп программа, которая просто запускается и работает перед компиляцией. После чего уже идет компиляция.
    Поэтому если у вас в макросе ошибка, вы получите нормальное лисп сообщение об ошибке с указанием конкретного места в макросе, как в самом обычном лисп коде. Вернее это и есть обычный лисп код. :))

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

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



    № 151   13-06-2006 12:18 Ответить на это сообщение Ответить на это сообщение с цитированием
    Руслан.
    Ваш вопрос о модулях был не про лисп а про функциональные языки вообще.
    Trurl уже успел привести пример модульной системы в SML и Ocaml. За что ему большая благодарность.
    Более того, вы же сами прекрасно понимаете что если модульная система и функциональная/императивная парадигмы ортогональны (т.е. не зависят друг от друга) то нет никаких препятствий для их совместного проживания.
    С чего вы сделали вывод что в функциональных языках их нет - непонятно.

    Модули как средство инкапсуляции - не единственный механизм.
    В лиспе для этого используется lexical scoping.
    То есть вместо того чтобы использовать отдельные текстовые файлы как границы модулей (почему обязательно так должно быть ?) Используется лехсическая конструкция (let)
    Я кстати приводил пример использования let для сокрытия локальных переменных.
    Как вы его пропустили, не понимаю :))
    В других функциональных языках, как тут господин Trurl приводил пример, используют другие техники.
    Все как видите прекрасно работает. Мы довольны.

    А вот скажем чистый (куда уж чище :)) ) функциональный язык хаскель, имеет модули.
    Почитайте на простом, понятном  языке описано: http://www.haskell.org/tutorial/modules.html

    A Haskell program consists of a collection of modules. A module in Haskell serves the dual purpose of controlling name-spaces and creating abstract data types.

    Даже слово модуль в языке есть:


    module Tree ( Tree(Leaf,Branch), fringe ) where ...



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



    № 150   13-06-2006 11:26 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>Мне очень хочется узнать, как это я до сих пор без них жил и не очень тосковал по этому поводу. ;) Более того, как остальной мир стоит и не падает до сих пор?

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


    № 149   13-06-2006 06:59 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 147« (Руслан Богатырев)
    ___________________________
    Дописать... Т.е. в Лиспе модулей таких нет. Тогда понятно.
    А зачем Вы сейчас спорите насчет модулей в Лиспе, если их там, как выясняется, нет? Мне, например, непонятно.

    Мне очень хочется узнать, как это я до сих пор без них жил и не очень тосковал по этому поводу. ;) Более того, как остальной мир стоит и не падает до сих пор? Может просто надо осмыслить, что действительно для практикующих программистов важнее? Чистота стиля и идеологии или наличие практичных инструментов?
    Что будет в Форт-системе при наличии ошибки использования доморощенного языка? Сообщение о конкретной ошибке этого языка или некое общее сообщение?
    Всё зависит от меры вашего желания обеспечить сервисы такого рода при расширении языка. Впрочем, как и в случае с другими расширяемыми системами.
    Сообщение не подписано


    № 148   13-06-2006 06:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 134« (Jack Of Shadows)
    ___________________________
    Попробую на примере SML. В OCaml примерно то же, но обозначения другие.
    В SML используются термины "структура" и "сигнатура" вместо более традиционных "модуль" и "интерфейс".


    structure S =
      struct
        type t = int
        val  e = 0
        fun s(x) = x+1
      end;


    Здесь определяется структура с именем S, состоящая из трех элементов, на которые можно ссылаться с помощью составных имен вида S.e. Внутри блока struct...end может содержаться произвольная последовательность определений, в том числе и вложенных структур.
    С каждой структурой связана "естественная" сигнатура,которая выводится компилятором. Для S это будет


    structure S :
      sig
        type t
        val e : int
        val s : int -> int
      end



    Но, как правило, сигнатура явно приписывается структуре, что позволяет прятать её компоненты.


    signature Sig =  sig ... end;
    structure S:Sig = struct ... end;



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


    structure S1:Sig1 = S;
    structure S2:Sig2 = S;



    Наконец, имеются средства параметризации структур (структурами же). В результате получаются "функции для структур", называемые Функторами.


    signature SigA = sig ... end;
    signature SigB = sig ... end;
    functor F(A:SigA):SigB  =  struct ... end;
    structure SA:SigA =  struct ... end;
    structure SB = F(SA);


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


    № 147   13-06-2006 06:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 146« ()
    ___________________________

    Всё остальное (вплоть до наделения среды свойствами модульности по типу Оберона) лисперы смогут дописать (или найти в интернете).

    Дописать... Т.е. в Лиспе модулей таких нет. Тогда понятно.

    Тогда не понятно, зачем спорили.

    А зачем Вы сейчас спорите насчет модулей в Лиспе, если их там, как выясняется, нет? Мне, например, непонятно.

    Опять не понял. Что-то сегодня не то в атмосфере. А правила базового языка уже поотменяли? И при чём здесь Форт? Если на форте наращивается базовый (или свой) словарь, то естественно будут определены слова времени исполнения или компиляции, отслеживающие правильность действий и выявляющие нарушение различных инвариантов и условий. В чём проблемы?

    Что будет в Форт-системе при наличии ошибки использования доморощенного языка? Сообщение о конкретной ошибке этого языка или некое общее сообщение?


    № 146   13-06-2006 06:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 144« (Руслан Богатырев)
    ___________________________
    Ответ на »сообщение 143« ()
    ___________________________
    Интересно выяснить причину споров...
    Вот причину не скажу

    Тогда не понятно, зачем спорили.

    Какие языки ФП имеют концепцию модуля как средства для инкапсуляции программных сущностей и инструмента поддержки раздельной компиляции (separate compilation) -- отчуждение интерфейса модуля от его реализации и автономную компиляцию модуля на основе одних интерфейсов при отсутствии доступа к реализации импортируемых им модулей?
    Опять не понял вопроса. Вы о расширяемых языках и системах говорите?
    Для Оберонов исполняемая среда – подлежащая ось. Для Лиспа она чуть расширена до исполняемой среды поддержки языка. В чём проблемы? Всё остальное (вплоть до наделения среды свойствами модульности по типу Оберона) лисперы смогут дописать (или найти в интернете). Опять не вижу проблем. Тот же MetaObject Protocol использовать, можно.

    Лисп. Потому, что проблема выбора отпадет сама собой, когда вы хотя бы одну книжку по введению в Лисп до конца дочитаете... ;)
    Боюсь, укол относительно книжки не по адресу. А аргументация как-то неубедительна - на уровне "потому что потому".
    Что было навеяно – то в текст и попросилось. ;)

    Действительно, и зачем это в языках явно (safe subset) и неявно (отдельные товарищи, программирующие, напр., на C++) выделяют свои подмножества? Ведь под руками -- все богатство фич. И к чему же себя ограничивать?
    Откуда я знаю – почему? Я им не доктор. Головой пусть думают. Я же говорю: главное – не уже заданное богатство фич, а наличие средств их производства. От языковых конструкций и до парадигмальных экзерциссов...
    Итак, я, по Вашим словам, в Лиспе достроил что-то до своего языка (надо думать, при этом имею под ногами только run-time system Лиспа, но не моего языка). Как в этом случае определяются синтаксические и семантические ошибки при использовании мной собственного языка? Вопрос навеян Фортом (Forth).
    Опять не понял. Что-то сегодня не то в атмосфере. А правила базового языка уже поотменяли? И при чём здесь Форт? Если на форте наращивается базовый (или свой) словарь, то естественно будут определены слова времени исполнения или компиляции, отслеживающие правильность действий и выявляющие нарушение различных инвариантов и условий. В чём проблемы?
    Сообщение не подписано


    № 145   13-06-2006 05:38 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 142« ()
    ___________________________

    Но, в общем случае, - зачем?

    Действительно, и зачем это в языках явно (safe subset) и неявно (отдельные товарищи, программирующие, напр., на C++) выделяют свои подмножества? Ведь под руками -- все богатство фич. И к чему же себя ограничивать?

    Итак, я, по Вашим словам, в Лиспе достроил что-то до своего языка (надо думать, при этом имею под ногами только run-time system Лиспа, но не моего языка). Как в этом случае определяются синтаксические и семантические ошибки при использовании мной собственного языка? Вопрос навеян Фортом (Forth).


    № 144   13-06-2006 05:33 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 143« ()
    ___________________________

    Интересно выяснить причину споров...

    Вот причину не скажу, а споры можете посмотреть в архиве "Мыслей об Обероне" в разделе "Школа Оберона" в Королевстве.

    >>Но раз так уверенно возражаете -- буду признателен за примеры таких языков. Не понял вопроса...

    Какие языки ФП имеют концепцию модуля как средства для инкапсуляции программных сущностей и инструмента поддержки раздельной компиляции (separate compilation) -- отчуждение интерфейса модуля от его реализации и автономную компиляцию модуля на основе одних интерфейсов при отсутствии доступа к реализации импортируемых им модулей?

    Лисп. Потому, что проблема выбора отпадет сама собой, когда вы хотя бы одну книжку по введению в Лисп до конца дочитаете... ;)

    Боюсь, укол относительно книжки не по адресу. А аргументация как-то неубедительна - на уровне "потому что потому".


    № 143   13-06-2006 05:20 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 140« (Руслан Богатырев)
    ___________________________
    А кто сказал, что их там нет?
    Так расскажите, в каких. Интересно разобраться, что за сия конструкция в мире функциональных языков. А то, быть может, разумеем под словом "модуль" разное?

    Конечно – разное!
    JOS уже сказал, что на Лисп надо под немного другим углом смотреть. В лиспе работают не модули, а пакеты. Вот выдержки из одной из дискуссий на эту тему:

    Packages map strings onto symbols (identifier objects).
    Modules map symbols/identifiers onto values.

    Packages work at read/parse time.
    Modules work at compile time or run time depending on the module system.

    Common Lisp has a package system but no module system (but it's possible
    to add one -- see e.g. http://www.flownet.com/gat/locales.pdf).
    Python has a module system that works at run-time, but no package system.

    Тут в мире императивности на эту тему споры до хрипоты.
    Интересно выяснить причину споров...

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

    Объясню, зачем нужно выяснять. Предположим есть желание (производственная необходимость, нужное подчеркнуть) использовать обе парадигмы в одном языке. Какой выбрать (ФЯ/ИП или ИЯ/ФП) и почему?
    Лисп. Потому, что проблема выбора отпадет сама собой, когда вы хотя бы одну книжку по введению в Лисп до конца дочитаете... ;)
    Сообщение не подписано


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


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

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

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

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

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

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