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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 1532—1523 | 1522—1513 | 1512—1503 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 399


    № 1522   10-11-2006 13:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1521« (Jack Of Shadows)
    ___________________________
    Ах черт! Это же не простенький а очень даже крутой вариант!
    Ведь это же лисп! Не нужно ничего писать самому, на то есть макросы.
    Запихнуть всю эту машинерию в макрос и обозвать его скажем def-cells-var
    Вот и все! Дешево и сердито. :))

    Вот вам и простенький метод цепляния к простым типам.
    За кулисами (def-cells-var *my-var* 10) преобразуется в создание обьекта CLOS с один слотом и навешанными на него symbol-macros для мимикрии работы с переменной простого типа.
    Для пользователя все выглядит точно также как и раньше.
    Единственная разница - вместо defvar используется def-cells-var для обьявления "простых" переменных. :))
    LISP rules !!



    № 1521   10-11-2006 13:23 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1519« (Jack Of Shadows)
    ___________________________
    А вот еще простенький вариант был предлжен кем то, через macro symbol :


    (define-symbol-macro *xxx* (c-variable-accessor '*xxx*))

    (defun (setf c-variable-accessor) (new-value symbol)
        (c-variable-write symbol new-value))

    (defun c-variable-accessor (symbol)
        (c-variable-read symbol))



    Тоже вариант, хотя мне не нравится, с обьектами все таки гораздо проще. Но как видите возможностей разнообразных в лиспе много :))



    № 1520   10-11-2006 12:59 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1519« (Jack Of Shadows)
    ___________________________
    Тьфу, сорвалось:

    Однако я думаю понятно, что даже если пойти самым трудным путем и переписать setf, то это возможно и не представляет непреодолимого препятствия.


    № 1519   10-11-2006 12:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1518« (Lisp Hobbyist)
    ___________________________
    Не совсем. :-) Разговор ведь был о том, как можно подцепить присваивание переменным, а MOP здесь не помощник.
    Там у нас с вами вышло недоразумение. Я отвечал на вопрос как работает cells (через MOP), а не как цепляться к не CLOS переменным. Поскольку cells не работает с простыми типами, то отвечать на вопрос "как cells работает с простыми типами" бессмысленно :)) Он с нимим и не работает (возможно пока).
    Я всего лишь сделал предположение что можно его заставить работать и с простыми типами. Мое предположение основывалось на том что в лиспе в отличие от привычных здесь delphi, java, сишарп, можно поменять все что угодно, ВКЛЮЧАЯ и макросы defvar, defparameter, и seft.

    Как выясняется так оно и есть.
    Однако вполне возможно что был избран легкий путь переопределения defvar, defparameter и введения нового макроса вместо setf, скажем c-setf
    Это гораздо легче, чем связываться с setf.
    Я поробую еще позадавать вопросы на cells mailing list. Может че и прояснится.

    Однако я думаю понятно, что даже если пойти самым трудным путем и переписать setf, то это возможно и не представляет.

    Кстати Кенни обьяснил почему его не интересует поддержка простых типов.
    Простые типы в основном используются в качестве локальных переменных, с коротким сроком жизни.
    Привязываться к ним нет никакого смысла. Связывать нужно бывает только данные которые долго живут.
    А такие данные как правило имеют сложную структуру, то есть представлены обьектами.


    № 1518   10-11-2006 12:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1517« (Jack Of Shadows)
    ___________________________


    >>> Более того, он даже называет конкретный чудо-механизм, который якобы это обеспечивает:

    Спасибо что оставили мне хотя бы один процент шанса. :))
    Вероятно он в вас и выстрелил.


    Не совсем. :-) Разговор ведь был о том, как можно подцепить присваивание переменным, а MOP здесь не помощник. Так что его упоминание в »сообщение 1483« было все равно не в тему.


    Кенни ответил. И сказал что во первых сейчас встраивает с cells поддержку defstruct, что уже через MOP не сделаешь.


    Спасибо за информацию. Впрочем, это как раз не так и удивительно, поскольку доступ к полям структур все равно проходит только через соотв. accessors. Вопрос лишь в том, можно ли их "подцепить" стандартным способом.


    А во вторых некоторые из пользователей cells добавили туда поддержку обычных (не CLOS) переменных, обьявляемых через defvar и defparameter. Хотя ему лично они не нужны (мне тоже). Но вот кому то понадобилось, и сделали же.


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


    № 1517   10-11-2006 11:52 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1515« (Lisp Hobbyist)
    ___________________________
    Более того, он даже называет конкретный чудо-механизм, который якобы это обеспечивает:


    Спасибо что оставили мне хотя бы один процент шанса. :))
    Вероятно он в вас и выстрелил.
    Кенни ответил. И сказал что во первых сейчас встраивает с cells поддержку defstruct, что уже через MOP не сделаешь.
    А во вторых некоторые из пользователей cells добавили туда поддержку обычных (не CLOS) переменных, обьявляемых через defvar и defparameter. Хотя ему лично они не нужны (мне тоже). Но вот кому то понадобилось, и сделали же.


    № 1516   10-11-2006 05:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1510« (Jack Of Shadows)
    ___________________________

    >>>Особенно хорошо на этапе компиляции ловится зацикливание вычисляемых ссылок, типа Excel'ного OFFSET...

    OFFSET это работа с относительной адресацией ячеек, это к си а не к лиспу :))
    лисп с адресами памяти не работает :)) По моему в нем даже указателей в сишном понимании этого слова, нет.


    Зато в Лиспе есть такая замечательная штука, как (slot-value foo bar), где имя слота тоже является вычисляемым во время исполнения. На статический анализ зацикливания это ИМХО может повлиять не хуже OFFSET'а, и даже без всякого eval.


    № 1515   10-11-2006 05:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1509« (Jack Of Shadows)
    ___________________________


    Вы правы я именно defsetf имел в виду. Хороший вопрос.
    Я попробую задать его Тилтону. Посмотрим что он думает по этому поводу.


    С вероятностью 0.99 он ответит, что и не ставил себе целью обеспечить работу cells с произвольными переменными. Перехват setf нужен только для этого --- для CLOS-объектов достаточно средств MOP.


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


    Я-то согласен, что cell-объектов на практике хватит. Но вот автор этого сообщения (»сообщение 1454«) рассуждает о применении cells к необъектным данным как о чем-то уже существующем:

    cells при желании можно использовать с любым типом данных а не только с обьектами.

    Например

    var
      x, y : integer

    x := ?f: y+5;

    После чего меняете значение y и наблюдаете как автоматом меняется значение x.
    Вот такой вот своеобразный OnChange навешенный на простенький integer.


    Более того, он даже называет конкретный чудо-механизм, который якобы это обеспечивает:

    >>> Вопрос. КАК cells узнает об изменении значения y?

    Через MOP (Meta Object Protocol)
    Вам стало легче ? :)) Предупреждаю сразу, MOP я вам разжевывать не буду. Читайте книжки.


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


    № 1514   10-11-2006 02:56 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1511« (Jack Of Shadows)
    ___________________________
    А вот тут windows оболочка к хаскель дебагеру:
    http://www-users.cs.york.ac.uk/%7Endm/projects/hat.php


    № 1513   10-11-2006 02:55 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1512« (Max Belugin)
    ___________________________
    Не ну если постараться то можно и поломать конечно, я не спорю. :))


    <<<... | 1532—1523 | 1522—1513 | 1512—1503 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 399


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

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

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

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

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

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