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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 1562—1553 | 1552—1543 | 1542—1533 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 396


    № 1552   15-11-2006 03:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1548« (Geniepro)
    ___________________________
    По использованию памяти программы на Лиспе и Яве почти совпадают и значительно хуже, чем у С/С++, что, впрочем, и не удивительно.
    Ну, дык, всё познаётся в сравнении...
    Вы предложите прграммисту начала 60-х - начала 70-х работать на том же Си++ - он ужаснётся росту исполняемых файлов! И это - в компилируемом языке! :о)
    В последней версии своей части я всё перекатал обратно на Си. Снижение объёмов (хоть со strip, хоть без) - больше чем на порядок. Для случая организации в виде динамических бибиотек соотношение лучше, но не настолько существенно, что бы восторгаться... :о)

    Что такое будут 128Тб ОЗУ через десять лет? :о)


    № 1551   15-11-2006 01:41 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1537« (Сергей Перовский)
    ___________________________
    Представьте себе, что астроном заявит, что по его расчетам Земля столкнется с крупным астероидом, и на Ваш резонный вопрос "Когда?" скажет: 
    <<<"это произойдёт, когда выполнятся условия ...(перечисление условий)". 

    Мы имеем дело с разными моделями и по разному интерпретируем термины.
    Если мы, всего навсего, пытаемся произвести некоторые вычисления, например расчитываем напряженное состояние конструкции, то время появляется только из за последовательности шагов алгоритма и от него можно абстрагироваться - ура функциональному программированию.
    Если мы моделируем работу аэропорта в критической ситуации, для нас важно время, идущее в нашей модели.
    Я не могу позволить себе сказать: "при условии перегрузки таких то ресурсов аэропорт будет закрыт", мне необходимо явно указать, что "это произойдёт в АА часов ББ минут ВВ секунд".
    Имитационное моделирование представляет собой эксперимент, проводимый над моделью системы. И модельное время, с точки зрения экспериментатора - объективная реальность. И состояния всех элементов в интересующий нас момент времени - объективная реальность. И как тут приложить функциональный подход?

    Повторюсь - ООП недаром было придумано специалистами по имитационному моделированию задолго до того, как вошло в языки общего назначения.


    Уважаемый коллега. Но своим постом, вы как раз и утвеждаете, что "время" в моделировании НЕ является объективной реальностью, а именно - АБСТРАКЦИЯ.

    Первые учёные измеряли интервалы чего-то "условно протяжённого" ЧЕРЕЗ НАБЛЮДАЕМЫЕ ПРОЦЕССЫ.
    Галилей изучал ускорения, по количеству песка, высыпающегося из воронки, пока шарик не скатится по доске. Или считали количество упавших капелек.
    "Мы прибудем в город через три дня пути". Здесь у возницы телеги уже высшая абстракция. Он просто знает, что, при заданной нагрузке на телегу, кормёжке лошади и качестве дороги, лошадь, расходуя свои силы (затрачивая энергию), сумеет "намотать" на обод колёс это расстояние именно за столько "упавших капелек". Количество капелек тоже зависит от жидкости (её свойств), природных погодных условий и диаметра дырочки "капельнецы". Но в данном случае возницу это не интересует. Ему ближе введённая АБСТРАКЦИЯ - ВРЕМЯ.
    То же самое и в имитационном моделировании. Вы просто отказались от выяснения условий, при которых получено ваше "модельное время" (и с чем оно увязано и согласовано). Про переходы между уровнями в атомных часах вы не думаете. Вам "тики" уже даны в виде поддерживаемой вычислительной системой абстракции.
    Времени, как реальности (тем более объективной) - нет. Есть некие процессы, протекание которых мы считаем (опять же - УСЛОВНО-ОБЩЕ-СОГЛАСИТЕЛЬНО) стабильным относительно других процессов и называаем это "периодами времени"...


    № 1550   15-11-2006 01:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1549« (Jack Of Shadows)
    ___________________________
    Нет, тут не просто "средневековье".
    Если бы неандертальцу дали мобильник, то он бы просто не знал "щё з ным робЫты"...
    Аналогия - полная. Водораздел в мышлении проходит не по линиии использования, а по линии намерений применения и инфраструктуры обеспечения применения. В руках - пока, что только дубина. С огнём ещё не научились обращаться... Только бегают от него... :о)


    № 1549   14-11-2006 14:09 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1548« (Geniepro)
    ___________________________

    Ответа на основной вопрос статьи: "Если Лисп так крут, то почему так редко используется" - так и не найдено - сообщество лисперов многие годы ломает головы над этой загадкой.


    А че тут гадать. Посчитайте сколько денег, времени и труда вложено в коммерческую раскрутку с++, java, csharp  и сколько в лисп. Разница на несколько порядков - соответственно и результат.
    Продается как известно то что лучше рекламируется а не то что лучше.
    Правда в перспективе все рано или поздно встает на свои места.
    Просто мы с вами попали в период...средневековья в массовом программировании что ли.


    № 1548   14-11-2006 13:44 Ответить на это сообщение Ответить на это сообщение с цитированием
    Интересная статья мне попалась - Erann Gat "Lisp as an Alternative to Java" 2000 г.
    http://www.flownet.com/gat/papers/lisp-java.pdf

    Сравнительный тест по методу Prechelt'а - одна и таже задача реализуется несколькими программистами и их результаты усредняются.
    Prechelt, L. 1999. "Java vs. C++: Efficiency issues to interpersonal issues"
    У Prechelt'а было сравнение языков С/С++ и Java, Erann Gat добавил тесты на Лиспе и Scheme.

    Правда, Prechelt использовал JDK 1.2, так что сейчас бы у Java результат был бы получше, но тем не менее...

    Erann Gat использовал компиляторы Лиспа Allegro CL 4.3 и Scheme MzScheme (12 программ на Лиспе, 4 на Scheme, в тесте участвовало 14 программистов); программы компилировались в "нативный" машинный код.

    Результаты тестов в общем таковы:

    Опыт программистов в среднем в годах:

    Лисп:  6.2
    С/С++: 9.6
    Java:  7.7

    Время разработки программ в часах:

    Лисп:  от 2 до 8.5
    С/С++: от 3 до 25
    Java:  от 4 до 63

    Длина программ в строках:

    Лисп:      от  51 до 182, в среднем 119 (медиана 134)
    С/С++/Java: от 107 до 614, в среднем 277 (медиана 244)

    Хотя быстрейшие программы на С/С++ были быстрее, чем быстрейшие на Лиспе, среднее время работы программ таково (в секундах):

    Лисп:  41  (медиана 30)
    С/С++: 165 (медиана 54)
    Java:  ок. 3500 (медиана ок. 1500)

    Разброс времени выполнения программ на Лиспе был на порядок меньше, чем на С/С++.
    Результат у Лиспа подпортил один программист с опытом работы на Лиспе меньше года, без него было бы ещё лучше...

    По использованию памяти программы на Лиспе и Яве почти совпадают и значительно хуже, чем у С/С++, что, впрочем, и не удивительно.


    Ответа на основной вопрос статьи: "Если Лисп так крут, то почему так редко используется" - так и не найдено - сообщество лисперов многие годы ломает головы над этой загадкой.

    Основные причины - разочарование в ИИ и соответственно в Лиспе (попал под раздачу) и мифы о громоздкости Лисп-систем (ага, особенно по сравнению с Visual Studio и даже Delphi/C++ Builder :-))


    № 1547   14-11-2006 12:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1546« (Geniepro)
    ___________________________
    По поводу автоматической мемоизации. Сделать для чистых функций - раз плюнуть.
    А вот практическое применение выходит боком. Если кешировать все результаты всех отработанных функций в программе хотя бы средненького размера, то она отьест столько памяти что это уже не смешно.
    Поэтому такое вот полуавтоматическое кеширование, когда вы просто помечаете те функции, результат которых вы хотите повторно использовать, оно на сегодня практичнее.
    Ну а лет через 5-6 когда памяти на настольных писюках будет 10 гиг по умолчанию, тогда можно и об автоматической мемоизации задуматься :))


    № 1546   14-11-2006 11:19 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1541« (Jack Of Shadows)
    ___________________________

    То есть напишите для первого вызова let x = dec 1000000000
    dec не выполнится сразу же а только когда понадобится то есть когда print x
    А вот на второй раз print x не будет выполнять dec, а возьмет запомненное значение.

    Ну это-то понятно. :о)) Просто используется уже x, а не dec 1000...


    Для ручной мемоизации можно воспользоваться функцией memo из модуля memo

    А вот это уже интересно. В GHC 6.6 его почему-то нет, но в WinHugs'е - есть. Осталось только переделать его под GHC...

    Кстати, спасибо за ссылки на отладчик; скачал, буду посмотреть...


    № 1545   14-11-2006 09:29 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1539« (Jack Of Shadows)
    ___________________________
    >>>Разве функциям sin, cos нужно от вас что либо кроме передаваемого им параметра ?
    Навеяло :) Наш преподователь матфизаки когда-то заканчивал разбор сложных задач пренебрежительно произнося: "ну дальше все сводится к задаче в квадратурах". На доске при этом безумная мещанина из синусов, логарифмов и прочих экспонент, но с его точки зрения это уже не представляло интереса.

    Машина играет в шахматы с человеком - придется вводить
    >>>ИЯ - единственный способ общения программы с внешним миром.
    Одна шахматная программа играет с другой, в чем разница?
    Можно, конечно договорится и передавать друг другу каждый раз всю позицию, но проще ли это, чем обмениваться ходами, а не позициями?
    А шахматы, это еще по божески: время дискретное, критерий постоянный, ограничения неизменны, позиция выражается однозначно - просто чудо.
    Возьмем пример посерьезнее - модель эволюции жизни. Миллиарды "существ" играют друг с другом в игру на выживание. На протяжении миллиардов лет модельного времени. Как описать все это в виде функций?


    № 1544   14-11-2006 06:05 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1543« (info21)
    ___________________________
    >>>В лиспе, может, и не сделает. А в Компонентном Паскале -- сделает. Нужно, конечно, подсказать.

    А каким образом. Если with - то не считается


    № 1543   14-11-2006 03:59 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1539« (Jack Of Shadows)
    ___________________________

    Так например открытый файл все равно надо закрывать вручную, открытый connection к базе данных все равно надо закрывать вручную. Никакой сборщик мусора за вас это не сделает. ...

    В лиспе, может, и не сделает. А в Компонентном Паскале -- сделает. Нужно, конечно, подсказать.


    <<<... | 1562—1553 | 1552—1543 | 1542—1533 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 396


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

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

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

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

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

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