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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 2452—2443 | 2442—2433 | 2432—2423 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 307


    № 2442   01-04-2007 15:07 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2436« (Руслан Богатырев)
    ___________________________
    >>>что важнее для человечества: вода (ИП) или электричество (ФП).
    Я то считаю и ИП и ФП всего-навсего инструментами.
    Мне говорят, что надо научится пользоваться разводным ключем - это самый удобный инструмент.
    А я вообще-то электрик и представления не имею, зачем мне разводной ключ :)


    № 2441   01-04-2007 15:03 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2439« (Geniepro)
    ___________________________

    Очень интересно, надеюсь, Вы нам расскажете, как это делается?

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

    Итак, что у нас есть в ИЯ (Оберон):
    1. Процедуры-функции
    2. Процедурные типы
    3. Записи (кортежи)

    Передача информации в функцию (параметры) определяется кортежами (записями). Возврат результата (через имя функции) подразумевает не только любой базовый тип, но и процедурный (т.е. ссылку на функцию). Известно, что "статические" функции (которые пишутся на самом ИЯ) имеют бирки-ссылки.

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

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

    Вообще говоря, на сети Петри можно много чего наотображать. Фундаментальная вещь. И полная динамика (все на лету, только данные без "кода", причем в рамках ИЯ). В общем -- никакого мошенничества :)


    № 2440   01-04-2007 14:43 Ответить на это сообщение Ответить на это сообщение с цитированием
    Предлагаю для обсуждения простую идею. Берется устройство архитектуры компьютера в трактовке Джона фон Неймана. Точнее, это по всей видимости не его идея, а идея других людей (и в первую очередь Джона Эккерта).

    Итак, в известном документе "First Draft of a Report on the EDVAC" (1945), под которым стоит подпись фон Неймана и который разошелся по миру, определив на годы архитектуру современных компьютеров, выделяются следующие 5 блоков:
    1. CA (central arithmetic part), арифметическое устройство, впоследствии его стали называть арифметико-логическим устройством (АЛУ) или просто операционным.
    2. CC (central control part), устройство управления (УУ)
    3. M (memory), память
    4. I (input), устройство ввода
    5. O (output), устройство вывода

    Последние два блока можно для простоты слить в один (устройство ввода-вывода).

    Попробуйте взять три парадигмы -- ИП, ФП и ООП -- и выяснить, как при отображении с них (с соотв. языков) на архитектуру Эккерта-Неймана задействуются эти ключевые блоки компьютера (что первично, что вторично, можно даже отранжировать более точно). Быть может, это поможет кое-что прояснить.

    Оригинал текста фон Неймана (если очень нужно) можно найти здесь: http://www.europrog.ru/book/edjn1945e.pdf


    № 2439   01-04-2007 14:38 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2435« (Руслан Богатырев)
    ___________________________

    Динамически порождать функции можно и в Обероне (и не только в этом не-ФЯ).

    Очень интересно, надеюсь, Вы нам расскажете, как это делается?


    № 2438   01-04-2007 14:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2420« (info21)
    ___________________________

    Значит, проблема в другом: в отсутствии опыта преподавания в школе (там можно спокойно ни разу не упоминать, что INTEGER -- 32 бита) и т.п.

    Стоит только ученику захотеть узнать, чему равен тот же самый несчастный факториал ста (занимающий как минимум 525 бит в памяти), он тут же упрётся в 32 бита INTEGER'а или в 64 бита LONGINT'а, и придётся Вам рассказывать ему, что вот для таких конкретно задач был придуман специальный модуль BigInts, в котором есть тип данных BigInt, для которого определены специальные процедуры Set, Add, Mul, Sub, Div, Rem, Pow, и т.д. и его несчастный запрос product [1..100] должен выглядеть примерно так:

    MODULE Fact100;

    IMPORT BigInts, StdLog;

    PROCEDURE Do*;
    VAR
      i : INTEGER;
      r : BigInts.BigInt;
      s : ARRAY 100000 OF CHAR;
    BEGIN
      NEW (r); r.Set (1);
      FOR i := 1 TO 100 DO
        r.Set (r.MulInt (i))
      END;
      r.ToString (s);
      StdLog.String (s); StdLog.Ln
    END Do;

    END Fact100.

    Чрезвычайно просто и доступно для любого школьника, неправда ли?...


    № 2437   01-04-2007 14:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2435« (Руслан Богатырев)
    ___________________________

    >>>Динамически порождать функции можно и в Обероне (и не только в этом не-ФЯ).

    Наверное, самый простой способ -- использовать объект-функцию (функтор), т.е. процедуру+запись.
    Остальные пути уж больно обходные...

    Или имеется в виду какой-то другой способ?
     AVC


    № 2436   01-04-2007 14:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2430« (Сергей Перовский)
    ___________________________

    Спор водопроводчиков с электриками о комплектации инструментального чемоданчика :)

    Не совсем. Если не брать сопоставление Оберона с Хаскелем, то споры куда более высокого порядка, что важнее для человечества: вода (ИП) или электричество (ФП). Без электричества вроде как-то раньше обходились, а без воды -- "и не туды, и не сюды".


    № 2435   01-04-2007 14:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2429« (AVC)
    ___________________________

    Сначала я не учел "динамическое" порождение функции.
    Динамически порождать функции можно и в Обероне (и не только в этом не-ФЯ).


    № 2434   01-04-2007 13:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2432« (Jack Of Shadows)
    ___________________________

    Пока что arc недоступен. Пол использует его сам, и вот дает свои друзьям типа :))
    Рано или поздно конечно он выпустит arc на волю.
    Много народу этого ждет не дождется.

    Кстати, а какие преимущества у Arc перед Common Lisp'ом и Scheme?
    Я что-то читал про этот язык, но так и не понял...
    Какой смысл плодить ещё один диалект Лиспа, у которого сразу возникнет проблема с несовместимостью и отсутствием библиотек?


    № 2433   01-04-2007 13:27 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2430« (Сергей Перовский)
    ___________________________

    Спор водопроводчиков с электриками о комплектации инструментального чемоданчика :)

    Ваша правда... :о))


    <<<... | 2452—2443 | 2442—2433 | 2432—2423 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 307


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

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

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

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

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

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