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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 882—873 | 872—863 | 862—853 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 464


    № 872   20-08-2006 04:59 Ответить на это сообщение Ответить на это сообщение с цитированием
    Заканчиваю "треп" на "философские" темы! :))))
    Артем, hugi и др.!
    Помогите разобраться с конкретным вопросом.
    В большинстве "динамических" языков (скриптовых и функциональных), например, в Haskell, PHP, Python, Ruby (и т.д.) реализован абстрактный тип данных МАССИВ. С "внешней" точки зрения этот тип данных очень похож на список, даже синтаксис во всех языках почти одинаковый!
    Для массива, как я понимаю, главное это доступ к элементам по индексу. В классическом массиве быстрота доступа достигается путем расположения элементов в смежных ячейках памяти - адрес любого элемента просто вычисляется по его индексу. Но в "классическом" списке все наоборот - элементы выделяются в произвольных областях динамической памяти (heap) и быстрый произвольный доступ к элементу невозможен, даже в 2-направленном списке.
    Я попробовал в Haskell создать массив более менее приличного размера: матрицу 500 Х 500 = 250000 элементов. На создание Hugs "убил" минуты 2-3! Явно похоже на создание списка - на выделение одного куска памяти для классического array столько времени потратить нельзя. Но при обращении к элементам не заметил разницы между обращением к a!(1,1) и a!(500,500). Значит что-то в "массиве-списке" ускоряет обращение по индексу. Что именно? Расположение элементов в списке в смежных полях памяти (как в "классическом" Array) или другие методы?
    Вот конкретный вопрос, без "философии" :). Кто знает ответ?


    № 871   20-08-2006 04:46 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 869« (SJ)
    ___________________________
    Не смешите меня. Ни С++, ни Delphi чистыми ООП-языками не являются.
    Вы невнимательно прочитали:
    Что мы и наблюдаем в чистых (не смешаных, как C++ и Delphi) ООП-языках.
     hugi


    № 870   20-08-2006 04:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>Не смешите меня. Ни С++, ни Delphi чистыми ООП-языками не являются
    Сорри! Не заметил скобки :(


    № 869   20-08-2006 04:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    to hugi
    >>>Связанные логически данные являются объектом в концептуальном смысле :),
    >>>но не обязательно являются объектом в смысле ООП.

    Если Вы читали мои посты, то не могли не заметить, что я говорил об объектах только в смысле ООП! В концептуальном смысле объектом является и чашка кофе на моем столе. А с этим я вообще никогда и не спорил.

    >>>Но, повторюсь в очередной раз: меньше всего мне хотелось бы продолжать
    >>>эту дискуссию.

    OK! Тем более, что говорили мы, как выяснилось, о совершенно разных вещах :)

    to Артем

    >>>Тогда уважаемый программист и питерский бомж эквивалентны

    Смейтесь, но это действительно так. Их биологическую эквивалентность любой врач подтвердит :)

    >>>Оставьте Вселенную в покое. Речь идет о конкретных реализациях. Если уж
    >>>говорить о теории ООП, то в идеале в ней все типы являются классами, а
    >>>экземпляры типов – объектами. Что мы и наблюдаем в чистых (не смешаных,
    >>>как C++ и Delphi) ООП-языках.

    Не смешите меня. Ни С++, ни Delphi чистыми ООП-языками не являются. На эту тему не хочу распространяться - поговорите с любым программистом на тему "объектной чистоты" языка С++. Тут и об обыкновенной "чистоте" никто даже не думает говорить, а Вы об "объектной"...
    Хотите конкретику - пожалуйста. В объектно-ориентированном языке Oberon-2 есть тип данных REAL, который не является классом в смысле ООП, а следовательно, и переменные этого типа не являются объектами в смысле ООП.
    В рамках этой конкретики Вы согласны, что понятия "данные" и "объект" не являются синонимами друг друга?

    >>>Не смешите меня – у вас, что, есть формула для преобразования одного в
    >>>другое? Это что, так просто? :)

    Пора бы знать, что в программировании две программы (алгоритма) считаются эквивалентными в том случае, когда они реализуют вычисление одной и  той же функции. Иначе говоря, на одном и том же множестве определения функции дают одно и то же множество значений при любых условиях. Эквивалентность понимается, конечно, только в семантическом смысле слова. По синтаксической форме и даже по системе команд процессора (!) они могут отличаться очень существенно.
    Я могу удивить Вас еще больше: все ныне существующие компьютеры СЕМАНТИЧЕСКИ ЭКВИВАЛЕНТНЫ (как бомж и программист в Вашем примере). Любую программу, написанную в системе команд и языков одного компьютера, можно переписать для любого другого. И никто никаких "формул преобразования" не требует - просто математики еще в прошлом веке доказали эквивалентность всех машин Тьюринга, которыми, собственно, и являются любые существующие в мире процессоры.



    № 868   20-08-2006 03:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 865« (гость)
    ___________________________


    Кто-нибудь ещё помнит курс матанализа? А именно - ряды, в которых поледующий член можно выразить через предыдущие, например тот же факториал.
    Во всех вузовских учебниках и справочниках такие ряды (в т.ч., кстати, и факториал) обозначаются практически всегда рекурсивно - как Xi+1=f(Xi).

    Ну да: гармоничесий ряд - 1+1/2+1/3+...1/n+..., степенной, ряд Тейлора, ряд Фурье - где же рекурсия?


    № 867   20-08-2006 02:17 Ответить на это сообщение Ответить на это сообщение с цитированием
    Вдогонку:
    В высшей степени интересно посмотреть, как многоуважаемые джинны напишут итеративным, а не рекурсивным, способом формулы для обычных полиномо Чебышева.  :)))


    № 866   20-08-2006 02:09 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 865« (гость)
    ___________________________
    То, что такую нотацию предпочитают люди, для которых работа с абстрактными понятиями - образ жизни, о чём-нибудь, да говорит.

    Еше бы. Ведь точки в выражении (1..n) без рекурсии ФОРМАЛИЗОВАТЬ не получится.
    А математики неформального языка не понимают и не признают.


    № 865   20-08-2006 02:02 Ответить на это сообщение Ответить на это сообщение с цитированием
    К слову о наглядности рекурсивных и итеративных обозначений (где-то тут проскользнул пример с факториалом).
    А также о степени полезности высшего образования (соседняя ветка).

    Кто-нибудь ещё помнит курс матанализа? А именно - ряды, в которых поледующий член можно выразить через предыдущие, например тот же факториал.
    Во всех вузовских учебниках и справочниках такие ряды (в т.ч., кстати, и факториал) обозначаются практически всегда рекурсивно - как Xi+1=f(Xi).

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


    № 864   20-08-2006 01:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 784« (SJ)
    ___________________________

    Вы забываете, что предмет в фигурных скобках - это и есть рекурсия. Только Вы ее не обозначаете явно, а только подразумеваете.

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

    <Number> ::= <Number><Digit>|<Digit>

    формально правильна, но разбор такой грамматики - вещь неприятная. А с итеративным определением подобных проблем не возникает.

    В общем, всё сводится к спору, что итерацию можно, конечно, заменить рекурсией, только вот стоит ли? По-моему, нет: итерация понятнее, легче реализуется и быстрее работает.


    № 863   19-08-2006 20:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 861« (Geniepro)
    ___________________________
    Closures это не только доступ к локальным переменным своего контекста.
    Это также инкапсулирование. Как например private поле класса инкапсулировано в обьекте класса, и методы  этого класса могут менять значение этого поля и считывать его много раз.
    Так и closures это функция которая может "закрывать" собой локальную переменную. Но эта переменная не уничтожается когда функция отрабатывает.

    Я приводил пример в »сообщение 113«


    (let ((counter 0))
      (defun new-id () (incf counter))
      (defun reset-id () (setq counter 0)))



    Как видите можно переменную counter "закрыть"  в локальном контексте и доступ к ней будут иметь только лишь 2 функции new-id и reset-id. При отработке этих функций переменная не будет уничтожаться, она будет сохранять свое значение и new-id  каждый раз будет возвращать инкремент.

    Точно также как private поле класса и методы, работающие с этим полем.

    Отсюда и вопрос, на кой ляд в ООП closures ? Они там как собаке боковой карман.
    Свои адекватные средства есть, а привнесенные подвисают в воздухе без поддержки остальных функциональных средств.
    Если переносить механизмы ФП в ООП язык, то только всем скопом.
    Тогда хотя бы у программистов появляестя выбор - либо ООП парадигма, либо ФП.

    Понятно что и Sun и MS делают это под давлением обстоятельств, спустя рукава, со скрежетом.
    Так например заявленные closures в java 7 будет еще только через 2 года.
    Явно не торопятся.

    Да только плевать уже. Раз практические задачи из области web разработки попали в диапазон лиспа, окамла, python и ruby, то программисты не будут ждать черт те знает сколько лет.
    Когда мне понадобилось работать с web я перешел на java. И работал на нем несколько лет.
    Теперь я ухожу в лисп, потому что у меня появилась такая возможность, и что там Sun собирается по чайной ложечке в 10 лет добавлять в java мне честно говоря до лампочки.
    На наших северах до сих пор стоит JDK 1.4 . И апгрейдить до 5 или уже скоро выходящей 6, я не собираюсь.
    Для меня java застыла на 1.4, также как и дельфи застыл на 7.0

    Назад пути нет.


    <<<... | 882—873 | 872—863 | 862—853 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 464


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

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

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

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

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

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