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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 212—203 | 202—193 | 192—183 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 531


    № 202   16-06-2006 05:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>К тому же лисп - единственный из языков, где есть органичное
    >>>единство структур. Кода и данных. То, что в одном случае
    >>>прдставление программы, в другом - просто форма представления
    >>>списка.

    Можно ли это воспринимать таким образом:
    Список есть универсальная модель для представления данных и алгоритмов (кода)? Мне это интересно, как человеку, который ценит математический фундамент любого предмета.



    № 201   16-06-2006 05:26 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>> Агитпроп
    Точнее реклама. Она необходима и определяюща на этапе раскрутки.
    Только элементарный прокол. Конкурентов не ругают. Их со снисходительным
    видом замалчивают. Пятую ветку хотите за счёт вашего энтузиазма?

    В ту же тему рекламы.
    Пример успешных проектов ФЯ или тем проектов очень бы впечатлил.
    Займёт ведущее место, широкие перспективы, откиньтесь на спинку кресла
    и расслабьтесь, всё за Вас сделает машина ... Плавали, знаем.

    >>> Долго мы будем ... с машиной при помощи ОДНОГО ПАЛЬЦА ?
    >>> Насколько я знаю тут проблема в том, что нет надежных алгоритмов.
    Да задачи такие оплачиваются, что одного пальца хватает и Бейсика с Excel.
    По моему опыту интересные решения задач случаются на энтузиазме.
    А кормишься с плоских таблиц, обсчёта давно известных спецификаций
    и прочей примитивщины. "А без денег жизнь какая - не годится никуда".

    Маленькую мышку Вы зря обижаете. Народ от клавы никак не оторвётся.
    Ностальгия по Ундервуд. Ведь можно сказать: "По мановению пальца".
    Вроде смысл тот же, а отношение противоположное.

    О новых интерфейсах. Есть дешёвая и распространённая веб-камера.
    Одеваете на тот самый один палец контрастный фону колпачок.
    Программа распознаёт его положение и заменяет манипулятор мышь.
    Хочу попробовать с несколькими камерами и пальцами.

    Как у лиспа с графикой?


    № 200   16-06-2006 04:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 198« (Q. Werty)
    ___________________________

    Попробую ответить так, как я это понимаю. Функциональный подход я знаю только теоретически, поэтому, если что, более опытные товарищи меня поправят.

    2) К вопросу о "мощности". Мне все-таки кажется, что все эти посты говорят о мощности системы run-time, а не ЯЗЫКА. Язык - это текст: скобочки, рюшечки, звездочки и т.п. И как от этого текста может зависеть скорость работы кода? НЕ ПОНИМАЮ!

    Язык может запрещать программисту выполнять какие-то действия. Если они запрещены строго, т.е. не существует путей обхода, run-time может использовать более оптимальные алгоритмы. Jack уже приводил пример: благодаря тому, что прямые операции с памятью в ФЯ запрещены, run-time может самостоятельно выбирать стратегию распараллеливания. run-time императивных языков такой возможности не имеет - прямое вмешательство программы в то, где и как хранятся данные, делает невозможным применение тех алгоритмов распараллеливания, которые использует run-time ФЯ - они просто неработоспособны в этих условиях.

    Вывод - компилятор ЛИСПа дает более качественный код для одних и тех же алгоритмов, чем компиляторы с других языков программирования. Но это заслуга компилятора. При чем здесь ЯЗЫК ?!

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

    Возмём то же распараллеливание. Пусть вычисляются два сложных выражения. Благодаря тому, что функции в ФЯ не имеют побочных эффектов и реентерабельны, из того, как записаны вызовы, сразу становится ясно, зависят ли два выражения друг от друга. А в императивных языках, даже если явной связи нет, функции могут оказаться связаным неявно, например, из-за использования глобальных переменных. Т.к. эти взаимосвязи могут в итоге оказаться очень запутанными, компилятор императивного языка в принципе не способен однозначно сказать, что взаимосвязей нет, и выражения могут вычисляться параллельно. Соответственно, благодаря особенностям языка, компилятор ФЯ может создавать автоматически распараллеливающийся код, а компилятор императивного - не может.


    № 199   16-06-2006 04:17 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 198« (Q. Werty)
    ___________________________
    У меня опять три "дурацких" вопроса:
    Вы меня пожалуйста извините, но у меня ощущение, что вы даже не пытались открывать литературу по лиспу.

    1) К вопросу о близости языка к человеку.
    ...
    Просто с детского сада привык к инфиксной.

    Вы сами ответили на свой вопрос.
    К тому же лисп - единственный из языков, где есть органичное единство структур. Кода и данных. То, что в одном случае прдставление программы, в другом - просто форма представления списка.
    (+ а б с) не просто сложение трёх чисел. Это ещё и список. Всё зависит от того, с какой стороны посмотреть...
    Ещё лисповская записьпомогает прямо отобразить, например, отношение вложенности или принадлежности, деревья, списки (само собой).

    2) К вопросу о "мощности". Мне все-таки кажется, что все эти посты говорят о мощности системы run-time, а не ЯЗЫКА. Язык - это текст: скобочки, рюшечки, звездочки и т.п. И как от этого текста может зависеть скорость работы кода? НЕ ПОНИМАЮ!
    Помимо чисто синтаксических различий ест различия на семантическом уровне операций компилятора. Просто оказывается, что при компиляции функциональных языков (по причинам, о которых JOS уже раз двадцать писал) получается более оптимальный код. Там меньше надо отслежевать зависимотей при "распихивании" значений по регистрам и их "перетеканию" из регистра в регистр (и память). По этой причине (stateless etc.) многие реализации лисп-процессорв делались на стековой архитектуре (как и для Форта, но там это более очевидно).

    3) Объясните, наконец, Jack - ЛИСП - это интерпретатор (Virtual machine) или нативный компилятор. Если интерпретатор, то все слова о его мощности вообще невозможно понять. А если нативный компилятор, то их можно понять только так: нативный код, генерируемый компилятором ЛИСПа, работает быстрее, чем код, сгенерированный нативными компиляторами других, императивных языков. Вывод - компилятор ЛИСПа дает более качественный код для одних и тех же алгоритмов, чем компиляторы с других языков программирования. Но это заслуга компилятора. При чем здесь ЯЗЫК ?!
    На примерах, показывающих сравнение сортировок, это может и не всегда сработает (хотя, например, OCaml уже обгоняет Си на некоторых алгоритмах). JOS тут пытается донести мысль, что наиболее ярко выражено преимущество будет в больших проектах. Не в последнюю очередь потому, что в БОЛЬШОМ проекте разные части и подсистемы бывает удобно реализовывать, используя разные подходы и парадигмы. В Лиспе поддержка будет ЕСТЕСТВЕННОЙ. А в том же Си++ или Обероне мы будем ЭМУЛИРОВАТЬ подход или парадигму, потому, что в языке НЕТ этой поддержки. Что влечёт за собой массу издержек в виде "лишнего" кода и снижения производительности.

    Возвращаясь к Форту. Иногда его тестовые примеры в режиме интерпретации обгоняют скомпилированные аналоги.
    Сообщение не подписано


    № 198   16-06-2006 03:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    У меня опять три "дурацких" вопроса:

    1) К вопросу о близости языка к человеку.
    Цитирую:
    "В Лиспе принят так называемый префиксный способ записи выражений. В начале идет запись некоторого функционального символа, символа операции, затем через пробел – аргументы." - конец цитаты.
    Т.е. выражение в ЛИСПе может выглядеть примерно так:
    (*(+7 8)9)
    А в каком-нибудь далеком от человека языке я напишу примерно так:
    X:=(7+8)*9;
    Может я какой-нибудь "неправильный" человек, но мне второй вариант ближе. Хотя я, конечно, профессионал и знаю, что такое префиксная и постфиксная запись. Просто с детского сада привык к инфиксной.

    2) К вопросу о "мощности". Мне все-таки кажется, что все эти посты говорят о мощности системы run-time, а не ЯЗЫКА. Язык - это текст: скобочки, рюшечки, звездочки и т.п. И как от этого текста может зависеть скорость работы кода? НЕ ПОНИМАЮ!

    3) Объясните, наконец, Jack - ЛИСП - это интерпретатор (Virtual machine) или нативный компилятор. Если интерпретатор, то все слова о его мощности вообще невозможно понять. А если нативный компилятор, то их можно понять только так: нативный код, генерируемый компилятором ЛИСПа, работает быстрее, чем код, сгенерированный нативными компиляторами других, императивных языков. Вывод - компилятор ЛИСПа дает более качественный код для одних и тех же алгоритмов, чем компиляторы с других языков программирования. Но это заслуга компилятора. При чем здесь ЯЗЫК ?!



    № 197   16-06-2006 02:25 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 196« (panda)
    ___________________________
    Вам не приходила в голову мысль делать это хотя бы немного спокойнее?
    Нет, не приходила. Согласитесь есть все таки разница между финном и лезгином :))


    № 196   16-06-2006 02:07 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 194« (Jack Of Shadows)
    ___________________________

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


    № 195   16-06-2006 01:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 189« (Mirage)
    ___________________________
    Как машина такой умной станет, что сама решит что куда записывать? ;)
    Как раз таки тут ума много не надо. Если гарантировать что куда бы не записал - запишешь один раз, то куда конкретно - становится уже не важным.
    Вас же не удивляет что машина достаточно умна, чтобы сообразить когда за вами в памяти мусор убирать ?


    № 194   16-06-2006 01:47 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 190« (panda)
    ___________________________
    Hint: Казалось бы, а причем здесь Григорий XIII ..

    Спасибо за поправку, перепутал названия. В остальном все остается в силе.
    Григорианский календарь - совершенно бессмысленное безсистемное нагромождение, которое только усложняет современную жизнь.


    № 193   16-06-2006 01:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 192« (Антон Григорьев)
    ___________________________
    Согласен, про оберон надо завязывать. Про него и так уже 4 активные ветки.



    <<<... | 212—203 | 202—193 | 192—183 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 531


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

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

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

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

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

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