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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

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


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

    >>>В данном случае это проявляется в том, что хотя мы можем на лету реализовать любую функциональность (вот вам и λ), но в общем случае не можем оформить это просто как вызов функции. Ведь динамическая структура должна где-то подцепляться, а closure в Обероне нет.

    Напрашивается ввести в язык что-то вроде делегатов, вопрос -- стоит ли... :)
     AVC


    № 2451   01-04-2007 17:05 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2447« (Jack Of Shadows)
    ___________________________

    Ответ на »сообщение 2444« (Руслан Богатырев)
    ___________________________
    Задача школьника научиться выражать простые мысли простым набором механизмов, а не надеяться что на каждый вопрос есть готовый ответ в виде библиотечной функции.

    О том и речь. Выражать мысли простым набором механизмов, а не надеяться, что на каждую проблему уже есть "фича", встроенная в язык. :-)


    И вот когда вы пытаетесь это сдеать при помощи ИЯ, то тут же утыкаетесь в необходимость специализированных библиотек.

    А в чем проблема библиотек-то? Неужели решение по засовыванию всего, что только можно, в язык - это лучше, чем минимальный язык с вынесением всего остального в библиотеки?
    (кстати, к сведению - есть и такой подход к обучению, при котором студенты начинают с использования большой базы готовых библиотек, задействуя их как "черные ящики", а затем постепенно "вскрывают" эти ящики, разбираясь, как они реализуются. Такой подход продвигает Бертран Мейер. Я не поддерживаю таких идей, но, тем не менее, интересно).


    Про знаменитое "как икс может быть равен самому себе плюс один ?" я уж и не говорю. Ученики со всего размаху сажаются на идиосинкразии реализации в конкретном железе.

    При чем тут железо? В процессе освоения пошаговой алгоритмизации изучается оператор изменения значения переменной. Оператор присваивания. Что здесь "железного" и недостаточно абстрактного? Трактуете переменную как ячейку памяти? Так на дворе давно не Фортран, и переменные полностью абстрагированы от реализации, являясь всего лишь "атомом" состояния программы. Ах, не нравится понятие "состояние программы"? А что в нем такого неабстрактного и непонятного на интуитивном уровне? Программа, как любая система, существует во времени, состоит из многих элементов, которые во времени меняют свое состояние. И причем тут реализация?
    По поводу "как икс может быть равен самому себе плюс один" - так во всех нормальных императивных языках оператор присваивания не имеет ничего общего с операцией сравнения и выглядит по-другому.

    Более того - недавно пришлось замещать пару по теоретическим основам информатики для студентов с факультета начального образования. Они с компьютером вообще никак, в школе в деревнях информатики тоже не было. Не спеша разобрались с понятием алгоритма, структурами алгоритмов на блок-схемах. Так вот, в тот момент, когда я употребил запись "x = x + 1", я сразу же вспомнил про то, что это может выглядеть непонятным. Только пускаюсь объяснять, как они мне: "А что тут непонятного? С одной стороны старый x, с другой новый".


    № 2450   01-04-2007 16:58 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2447« (Jack Of Shadows)
    ___________________________

    >>>Задача школьника научиться выражать простые мысли простым набором механизмов, а не надеяться что на каждый вопрос есть готовый ответ в виде библиотечной функции.

    Видимо, задача школьника состоит в том, чтобы брать готовую конструкцию из самого языка, а не из библиотеки? :)
    Основных вариантов два: либо вы включаете в язык все-все-все (и тогда задача школьника -- суметь-таки завершить чтение описания языка к концу учебного года), либо вы включаете дополнительные возможности в библиотеки (модули), оставляя язык простым и компактным.
     AVC


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

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


    № 2448   01-04-2007 16:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2447« (Jack Of Shadows)
    ___________________________

    Нет нельзя. Это можно сказать прикладнику. Это его задача лазить по тысячам библиотек и выискивать сотни тысяч готовых функций.

    Если исходить из Вашего утверждения и того, что программисты делятся на системных и прикладных, вытекает, что школа должна готовить системных программистов?

    Так какая цель ставится перед таким школьником? Получить быстро результат? Узнать, как этого добиться в конкретном языке? Посмотреть анатомию решения задачи вплоть до "железа"?


    № 2447   01-04-2007 16:32 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2444« (Руслан Богатырев)
    ___________________________
    Можно сказать школьнику, что для таких конкретно задач есть модуль SuperPuperMath, а в нем процедура Fact, которая считает хошь какой факториал :)


    Нет нельзя. Это можно сказать прикладнику. Это его задача лазить по тысячам библиотек и выискивать сотни тысяч готовых функций.
    Задача школьника научиться выражать простые мысли простым набором механизмов, а не надеяться что на каждый вопрос есть готовый ответ в виде библиотечной функции.

    И вот когда вы пытаетесь это сдеать при помощи ИЯ, то тут же утыкаетесь в необходимость специализированных библиотек. В то время как ФЯ дает минимальный набор ортогональных средств практически никак не привязанных к ограничениям железа.
    Про знаменитое "как икс может быть равен самому себе плюс один ?" я уж и не говорю. Ученики со всего размаху сажаются на идиосинкразии реализации в конкретном железе.


    № 2446   01-04-2007 15:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 2445« (AVC)
    ___________________________

    Я так понял, что используется некая динамическая структура данных.
    Верно. А к ней -- несложный интерпретатор. Записи + ссылки дают основу для построения подобной динамики. А что есть списки в ФП? Те же динамические структуры.

    Наверное, необязательно ориентироваться именно на сети Петри. :)
    Конечно, необязательно. Просто я к ним неравнодушен :)

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


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

    Я так понял, что используется некая динамическая структура данных.
    Наверное, необязательно ориентироваться именно на сети Петри. :)
    Остается один, чисто синтаксический, вопрос: как оформляется вызов такой функции?
     AVC


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

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

    Можно сказать школьнику, что для таких конкретно задач есть модуль SuperPuperMath, а в нем процедура Fact, которая считает хошь какой факториал :)

    Или уже нельзя в ИЯ делать "кеширование" полезных вещей в виде "свертки" в функции более специализированного плана?


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

    А я вообще-то электрик и представления не имею, зачем мне разводной ключ :)

    Лампочки бывают разных конструкций. Иногда без разводного ключа ну никак :)

    В эту схему можно добавить для полноты картины еще и управдома (ООП). Как тут не вспомнить Нону Мордюкову в "Бриллиантовой руке". :)


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


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

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

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

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

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

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