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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 542—533 | 532—523 | 522—513 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 498


    № 532   28-07-2006 15:31 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 530« (Артем)
    ___________________________
    И в Java и в dotNet это выливается в почему-то в Software Factories, а не во встроенные макросы.

    Что значит "почему то" ? Разве я не давал ответ на это вопрос ?

    Перечитайте: »сообщение 488«
    Мартин Фаулер детально разьясняет почему развитие пошло 2-мя разными путями в языках с жестким синтаксисом (внешние DSL) и языках с минимальным и гибким синтаксисом (Внутренние DSL)

    Вам нравятся внешние DSL (Визуальные среды, плагины, кодогенераторы), мне нравятся внутренние DSL (макросы в лиспе)

    Ходить по кругу мне надоело чесслово.

    Тем более с человеком который упорно отказывается пробовать то о чем он спорит.


    № 531   28-07-2006 14:37 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ну, неужели, мир перевернется, если я смогу не писать где-то блоки try –except? А вы уверены, что где-нибудь не возникнет побочный эффект, что где-то наоборот надо будет, чтобы exception вышел на более верхний уровень? Что вам по-другому надо будет обрабатывать ошибку? И как долго с макросами вы будете искать то место, где возникла ошибка?
    И что делать, если возможность избавиться от пары строк в программном коде затуманивает сознание и превращает этот прораммный код в некие таинственные письмена, смысл которых может быть непонятен даже автору через некоторое время?


    № 530   28-07-2006 14:12 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 529« (Jack Of Shadows)
    ___________________________
    Я например не могу сравнивать лисповые макросы с CodeDom потому что не пользовался последним. А вы сходу выдаете такие утверждения, как будто 10 лет практиковали и то и другое :))
    Ну, вот и чудно, я вам тоже могу дать совет попользоваться другими технологиями 10 лет, а потом уж безаппеляционно заявлять, что Идеал, наконец-то, найден.

    Кстати, маленькое лиричесекое отступление. Насчет идеала :) Слова из песни:

    Все ищут ответа, где главный идеал
    Пока ответа нету – копите капитал :)))


    Более того, в dotcom и в java сейчас уделяется пристальное внимание DSL, то есть инструментам создания СПЕЦИАЛИЗИРОВАННЫХ ЯЗЫКОВ конечными пользователями.
    И в Java и в dotNet это выливается в почему-то в Software Factories, а не во встроенные макросы. Или вы их всех считаете, выражаясь вашим языком, идиотами? :)



    № 529   28-07-2006 13:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 528« (Артем)
    ___________________________

    Позвольте, Вагиф, но ведь подобная красота возможна будет не в Лиспе, а в C#.3.0 В лиспе гораздо более, как это по-мягче сказать, некрасивый синтаксис.


    Некрасивый синтаксис - это ваше личное мнение. Для меня лисповый синтаксис красивее любого дельфишного.
    Так что давайте не будем обсуждать вкусы, а сконцентрируемся на обьективных реалиях.
    А обьектинвые реалии вы уже указали. БУДУТ. Не ЕСТЬ как в лиспе. А БУДУТ.
    Да и будут ли вообще - еще большой вопрос.
    Linq - долгострой, не известно когда еще появится.
    Да и в отличии от лисповых макросов - узко-специализированная вешь.
    Про CodeDom - тоже.
    Артем, ну вы то откуда можете судить что там более или менее удобно чем лисповые макросы ?
    Ведь вы ни тем ни другим не пользовались :))
    Я например не могу сравнивать лисповые макросы с CodeDom потому что не пользовался последним.
    Когда попробую - смогу составить представление.
    А вы сходу выдаете такие утверждения, как будто 10 лет практиковали и то и другое :))

    Но, опять-таки, Вагиф, такая модификация языка - редкость.
    Редкость ? Это мой макрос, которым я пользуюсь в своей ежедневной работе.
    Если посчитать количество макросов во всех лисповых библиотеках, которыми я пользуюсь, то речь идет о нескольких сотнях макросов !!
    Редкость ?


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


    Гениально! Никто из корифеев, ни Вирт, ни вообще кто либо из создателей любого языка, никогда не ставил под сомнение продуманность лиспа, а также уровень его создателя Маккарти.
    Более того, в dotcom и в java сейчас уделяется пристальное внимание DSL, то есть инструментам создания СПЕЦИАЛИЗИРОВАННЫХ ЯЗЫКОВ конечными пользователями.
    Применяя вашу логику - если язык хорошо продуман, то никакие DSL начерта не нужны. И все специалисты, работающие в этом направлении - идиоты по сравнению с вами. Ведь они не понимают того что понимаете вы.
    Дотаточно всего лишь ХОРОШО ПРОДУМАННОГО ЯЗЫКА. :)))
    Артем, я даже обсуждать это не хочу.

    Хочу лишь сказать, что всегда существуют альтернативы, и, к сожалению (а может и к счастью) идеального решения нет.

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

    Кстати, я еще раз повторяю вам свое предложение.
    Простейшую задачку я привел.
    Открытие и закрытие соединения к БД. Одна из самых широко задействованных задач в дельфи.
    Решение в лиспе, которое я использую на практике - тоже привел.
    В конце концов, хоть раз на своем опыте убедитесь что же таки легче, сделать это на дельфи при помощи препроцессора, или все таки при помощи тех 4 строчек на лиспе.
    Чтобы наконец за всеми вашими многочисленными "более удобно чем в лиспе" или "не вижу разницы" наконец то стоял практический опыт.


    № 528   28-07-2006 13:06 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 527« (Jack Of Shadows)
    ___________________________

    withDatabaseConnection myConnection
    begin
      Query.SQL.Text := 'select * ...';
      Query.Open;
      for ...
      begin
        ....
        ....
      end
    end


    Позвольте, Вагиф, но ведь подобная красота возможна будет не в Лиспе, а в C#.3.0 В лиспе гораздо более, как это по-мягче сказать, некрасивый синтаксис. И, если уж говорить о макросах, то, например, в Nemerle макросы тоже поприятнее будут. Я сейчас как раз читаю про Лисповые макросы и Немерлешные. Но, опять-таки, Вагиф, такая модификация языка - редкость. Согласитесь, если язык хорошо продуман (и причем не дилетантами, а специалистами), то вводить в него подобного типа макросы нет необходимости. Не хочу повторяться про целесообразность самомодификации языка, - мнения могут быть разные. Хочу лишь сказать, что всегда существуют альтернативы, и, к сожалению (а может и к счастью) идеального решения нет.


    № 527   28-07-2006 12:01 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 526« (Артем)
    ___________________________
    Для пользователя именно макросов я не вижу принципиальной разницы, встроены ли макросы в язык, или поставляются в виде плагина.
    К сожалению большинство программистов не утруждают себя практикой, остановившись на "не вижу".
    Трудно почувствовать разницу между апельсином и яблоком, ни разу не попробовав апельсин :))

    Просйтеший пример добавления новой конструкции with-db-connection в язык я уже привел.
    Количество необходимой для этого работы тоже.
    Попробуйте в качестве упражнения добавить нетчо похожее в дельфи, пусть даже и при помощи препроцессора.
    Потом расскажете нам о разнице :))


    № 526   28-07-2006 11:55 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 522« (Jack Of Shadows)
    ___________________________
    То есть если вы захотите дать своим пользователям возможность самим использовать ваши макросы, то вам придется поставлять препроцессор вместе с библиотекой, а также документацию, как его использовать.В лиспе макросы не используются для того чтобы сгенерировать библиотеку из стандартного лиспа и затем поставлять ее.
    В лиспе макросы идут как часть исходного кода библиотеки, то есть конечные пользователи используют эти макросы


    Для пользователя именно макросов я не вижу принципиальной разницы, встроены ли макросы в язык, или поставляются в виде плагина. Мало того, в случае плагина пользовательможет выбрать для себя удобную модель препроцессора.


    № 525   28-07-2006 11:48 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 520« (Max Belugin)
    ___________________________
    Увы, свойство “мепленья” на Abstract Syntax Tree в данном случае не уникально и, например, dotNet предоставляет гораздо более удобный механизм CodeDOM. Из того факта, что в Лиспе все струтуры (и данные, и, собственно, программа) представлены как списки, и поэтому легко анализируется AST, влечет за собой невероятно скудный синтаксис (тот самый Lost in Stupid Parenthesis). И, в конце концов, вы не думали, почему не получили распространения языки программирования с синтаксисом xml (ведь можно прямо писать в терминах AST) – да потому, что вместо обилия круглых скобок в них было бы обилие угловых.


    № 524   Удалено модератором


    № 523   28-07-2006 11:29 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 517« (Сергей Перовский)
    ___________________________
    Когда Вы говорите - "можно использовать внутри лисп-программы любой язык", надо не забывать добавить "если напишете его компилятор".

    Ну написать свой язык это конечно шикарная возможность, но крайний случай.
    Основное назначение макросов, не писать новый язык, а добавлять новые конструкции в уже существующий, что есть задача гораздо более легкая и практичная.
    Приведу пример.
    Любой, работавший с Базами данных, знает, что нужно совершать некую последовательность действий, независимо от того что вы делаете.
    1. Открыть соединение.
    2. Выполнить какую то работу.
    3. Закрыть соединение.

    Обычно это записывается вот так:


    try
      myConnection.Open;
      Query.SQL.Text := 'select * ...';
      Query.Open;
      for ...
      begin
        ....
        ....
      end
    finally
      myConnection.Close;
    end;



    Однако вот это вот try ... finally end это сродни сишному destroy.
    То есть ручно управление рессурсами. Вещь как вы знаете ненадежная, зависимая от программиста.
    А программист может и забыть.
    В java для управления памятью ввели сборщик мусора. А как быть с управлением другими рессурсами ? Отданы на откуп программисту. Пусть не забывает ставить try...finally, правильно ? :))
    А теперь представьте себе что у вас есть возможность парой строчей добавить в дельфи новую конструкцию, которая будет использоваться вот так:


    withDatabaseConnection myConnection
    begin
      Query.SQL.Text := 'select * ...';
      Query.Open;
      for ...
      begin
        ....
        ....
      end
    end



    Как видите нет нужды открывать и закрывать соединение. Оно будет ГАРАНТИРОВАННО открыто и закрыто для вас, по окончании блока.

    В лиспе я добавляю такую конструкцию с лекгостью:


    (defmacro with-db-connection ((var &rest open-args) &body body)
      `(let ((,var (sql:connect ,@open-args :if-exists :new)))
        (unwind-protect (progn ,@body)
          (sql:disconnect :database ,var))))



    Вот и все. Язык тот же - лисп, только новый оператор добавился - with-db-connection

    Это всего лишь один конкретный пример, использования макросов для автоматического управления рессурсами (соединения к серверам БД).
    Возможности макросов простираются от простейших случаев как этот, до создания полноценных встроенных языков (пролог, sql, xml)

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



    <<<... | 542—533 | 532—523 | 522—513 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 498


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

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

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

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

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

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