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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 1102—1093 | 1092—1083 | 1082—1073 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 442


    № 1092   01-09-2006 23:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1091« (Антон Григорьев)
    ___________________________
    »сообщение 712«


    № 1091   01-09-2006 22:56 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1089« (Jack Of Shadows)
    ___________________________

    Ответ на »сообщение 1088« (Geniepro)
    ___________________________
    То есть ваша задача написать рекурсию, удовлетворяющюю требованиям хвостовой рекурсии.


    А каковы эти требования?


    № 1090   01-09-2006 17:12 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1088« (Geniepro)
    ___________________________
    ФЯ быстрее ИЯ ! :-) Как вам такое?

    Да так и должно быть. ФЯ может памяти гораздо больше использовать чем ИЯ, но быть медленнее нет никаких предпосылок. Не путайте ФЯ и динамические языки. Например лисп и Ерланг - динамические языки.
    Поэтому медленнее статических. В runtime постоянно идет проверка типов при выполнении каждой операции.
    А если язык статически типизированный (haskell, ocaml) то никакого отставания в скорости быть не может.
    Более того, ocaml бьет по скорости с++, pascal, delphi, oberon, csharp, java на любых задачах.

    Так что вы зря удивляетесь :))


    № 1089   01-09-2006 17:04 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1088« (Geniepro)
    ___________________________
    Компилятор не может превращать любую рекурсию в хвостовую.
    Этим должен заниматься программист.
    То есть ваша задача написать рекурсию, удовлетворяющюю требованиям хвостовой рекурсии.
    А уж комплилятор, получив от вас такую рекурсию, срубит с нее весь стек.
    Видимо хаскелю че то там не понравилось в вашем коде, и он решил что стек обрубить невозможно.


    № 1088   01-09-2006 15:14 Ответить на это сообщение Ответить на это сообщение с цитированием
    Я никак не могу понять, хвостовая рекурсия в трансляторах Хаскеля есть реально или нет?

    Вот пример функции декремента на F# (а-ля Клини):

    let rec f2 x y z = if (y+1) = x then z else f2 x (y+1) (z+1)

    let f x y z = if x = 1 then 0 else f2 x y z

    let dec n = f n 0 0

    let Nd = 1000000000

    do  Printf.printf "dec %d = %d\n" Nd (dec Nd)

    Результат:

    dec 1000000000 = 999999999

    Всё нормально, хвостовая рекурсия налицо...

    А аналогичный код на Хаскеле:

    dec n = f n 0 0

    f x y z  = if x == 1 then 0 else f2 x y z

    f2 x y z = if (y+1) == x then z else f2 x (y+1) (z+1)

    main = print (dec 1000000)

    выдаёт переполнение стека... GHC переполняет стек уже при n=520200. С Hugs дело ещё хуже - уже при n > 15226...
    Helium посчитал dec 1000000, но дальше у него возникли какие-то проблемы с кучей...

    Выходит, хвостовая рекурсия НЕ гарантируется в Хаскеле?

    PS. Кстати, что меня ну очень сильно удивило, программа на С#, выполняющая цикл вместо рекурсивных вызовов:

    long x, y, z;
    const long N = 1000000000L;

    x = N; y = 0; z = 0;

    while ((y+1) != x)
    {
        y++; z++;
    }

    выдала более медленный код, чем на F# !!! На F# время выполнения - 6.1 сек, на C# - 7.3 сек.
    Вот вам и более быстрый императивный язык (C#)... :-)) А я считал его эталоном быстродействия...

    ФЯ быстрее ИЯ ! :-) Как вам такое?


    № 1087   01-09-2006 11:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1081« (Max Belugin)
    ___________________________
    http://haskelldb.sourceforge.net/


    № 1086   01-09-2006 10:03 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1085« (Антон Григорьев)
    ___________________________
    Основой функционального подхода является отсутствие понятия текущего состояния - есть только исходные данные и результат.
    База данных принципиально предназначена для хранения текущего состояния некоторой системы.
    Понятно, что функциональный подход очень удобен в запросах, которые рассматривают базу, как исходные данные и малопригоден для описания изменения состояния базы.
    Каждому инструменту - свое место.
    Можно, конечно, трактовать начальное состояние и команду на изменение, как начальные данные, а конечное состояние ВСЕЙ БАЗЫ как результат функции и таким образом описать транзакцию. Но по моему это не серьезно.



    № 1085   01-09-2006 08:38 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1084« (Сергей Перовский)
    ___________________________

    Ответ на »сообщение 1083« (Max Belugin)
    ___________________________
    А если говорить о транзакциях, то тут играет роль состояние базы и тут уже не место для функционального подхода.


    Вот о том и речь. БД без транзакций - это очень узкий класс задач. А как быть со всем остальным?


    № 1084   01-09-2006 08:10 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1083« (Max Belugin)
    ___________________________
    А если говорить о транзакциях, то тут играет роль состояние базы и тут уже не место для функционального подхода.


    № 1083   01-09-2006 05:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1082« (Сергей Перовский)
    ___________________________
    это относится к выборке, а есть еще и транзацкуии и изменения


    <<<... | 1102—1093 | 1092—1083 | 1082—1073 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 442


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

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

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

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

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

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