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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 812—803 | 802—793 | 792—783 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 471


    № 802   17-08-2006 17:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 796« (Артем)
    ___________________________

    Интересно, а вообще кто-нибудь на этом ресурсе использует ФЯ именно в промышленном программировании (а не в целях удовлетворения любопытства)?
    Если расширить до "решает на ФЯ реальные задачи", то да, долго решал -- символич. алгебра и т.д., -- и завязал.
    "Излишняя сложность есть уязвимость" (Калашников).
    На всяких поворотах судьбы аукается -- JOS еще для себя это откроет, законы природы не отменяются.
    ФЯ -- излишняя сложность по ср. с Обероном.

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


    № 801   17-08-2006 15:25 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 800« (hugi)
    ___________________________
    ООП и ФП принципиально несовместимы, по крайней мере на том уровне, на котором ООП и даёт реальный выигрыш. По нескольким причинам. Одна из них заключается, как уже не раз говорилось, в том, что в ФП категорически запрещено менять состояние объекта
    ООП и ФП конечно же не совместимы. Но почему это так - тут вы в очередной раз запутались :))
    ФП не запрещает менять состояние обьектов. В лисп и Ocaml - полноценных ФЯ, вы может менять состояние обьектов столько сколько захотите.
    Несовместимость заключается в том, что основной механизм ФП - функции, не имеют независимого статуса в ООП. И как следствие не могут служить композицией для создания абстракций (пердача функций как параметров, возврат функций как результата) Опять таки не по физическим причинам, а потому что нет смысла.
    В ООП функции занимают подчиненное положение. Привязанны к данным в виде методов.
    Отсюда композиция возможна только при помощи механизмов ООП (в основном наследование и интерфейсы)
    Попытка использовать функции как first class citizens ломает обьектную модель.

    То есть либо стройная модель наследования, либо стройная функциональная модель.

    Т.е. ОО система более децентрализована. В ней может не быть так называемого "верхнего уровня",

    Ага и функции main в ОО языках нет :)) А функции в ФЯ ну никак не могут быть использованы децентрализованно. :)) hugi, Я понимаю, цели там и средства ООП, это вам учитель сказал (хотя учись вы по тем лекциям сслыку на которые я привел, вы бы имели другое мнение). Но это то откуда ? :))



    № 800   17-08-2006 14:37 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 793« (SJ)
    ___________________________
    В Haskell есть понятия класса и экземпляра класса, есть полиморфизм и наследование. Получается что функциональный язык может быть вполне объектно-ориентированным, не хуже, чем C++ или Java. И ООП вовсе не принадлежит только миру императивного программирвоания.
    Ещё раз повторяю для тех, кто ещё не понял. ООП и ФП принципиально несовместимы, по крайней мере на том уровне, на котором ООП и даёт реальный выигрыш. По нескольким причинам. Одна из них заключается, как уже не раз говорилось, в том, что в ФП категорически запрещено менять состояние объекта (а если можно, то это уже не ФП). Другая, в том, что в ООП идентичность играет важную роль: нам требуется работать именно с этим объектом и ни с каким другим, в ФЯ же из-за того, что каждая операция возвращает новый экземпляр, это свойство практически теряет свой смысл. Есть ещё и третья причина, но сначала приведу цитату из того же Буча:
    Объектно-ориентированное программирование, object-oriented programming (OOP). Методология реализации, при которой программа организуется, как совокупность сотрудничающих объектов, каждый из которых является экземпляром какого-либо класса, а классы образуют иерархию наследования. При этом классы обычно статичны, а объекты очень динамичны, что поощряется динамическим связыванием и полиморфизмом.
    Т.е. ОО система более децентрализована. В ней может не быть так называемого "верхнего уровня", она организуется, как граф, в то время как организация программы в функциональном стиле представляет собой дерево, и всё в итоге "сводится" к функции верхнего уровня.
     hugi


    № 799   17-08-2006 13:31 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 788« (SJ)
    ___________________________
    Проблема еще и в том что в русском и даже в английском языках не хватает слов, чтобы вместить туда все многообразие человеческих мыслей. Слова "тип" и "класс" тоже оказались слишком "узкими".
    Судите сами. Вот два утверждения.
    "Треугольник" принадлежит к типу "Многоугольники".
    "Треугольник" принадлежит к классу "Многоугольники".
    Если мы считаем, что по смыслу эти высказывания равнозначны, то надо признать, что в слова "тип" и "класс" мы вкладываем одинаковый смысл. А если нет, тогда в чем мы видим разницу?

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


    № 798   17-08-2006 13:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 786« (SJ)
    ___________________________
    Смешно, когда спорят с очевидным. Давайте возьмем целочисленный тип данных, например, Integer (или Int). Экземпляр этого типа данных - это любая целочисленная переменная. НЕ ОБЪЕКТ, а ПРОСТАЯ ПЕРЕМЕННАЯ ВЕЛИЧИНА. О каком типе объекта мы можем говорить здесь, где вообще нет никакого объекта? А о типе данных можно говорить! Или Вы не слышали, что есть такой тип данных Integer? И после этого Вы будете сомневаться, что тип данных и тип объекта это разные понятия?
    Да что же Вы так вцепились в ту фразу!?
    Во-первых, повторяю ещё раз, дискуссия шла об ООП, и понятие типа и класса я употреблял в контексте ООП, что и подтвердил потом цитатой из Э. Гаммы.
    Во-вторых, Вы приводите аксиомы, а не доказательства. Мне, например, вовсе не очевидно, что "простая переменная величина" -- это не объект. Мне даже кажется, что на некотором уровне абстракции, который принят в ООП, это как раз и есть объект.
    В-третьих, мне меньше всего хотелось бы принять участие в ещё более бессмысленной дискуссии, чем о целях и средствах ООП.
    В-четвёртых, в языке C# int это всего лишь синоним записи (читай -- класса) Int32, а следовательно его экземпляр -- это такой же объект. Так что пример с Integer абсолютно ничего не доказывает.
    В-пятых, в Ваших рассуждениях предмет доказательства выступает и в качестве исходной посылки. Мне ли говорить, что это не есть гут.
     hugi


    № 797   17-08-2006 11:53 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 796« (Артем)
    ___________________________
    Вроде бы Trurl говорил что работал на Ocaml.
    Однако для каких целей и сколько времени, не пояснил.


    № 796   17-08-2006 09:49 Ответить на это сообщение Ответить на это сообщение с цитированием
    Интересно, а вообще кто-нибудь на этом ресурсе использует ФЯ именно в промышленном программировании (а не в целях удовлетворения любопытства)? Насколько я тутама слышал, только Jack of Shadows использует LispWorks в течении полугода (ну и еще, наверное, 2 года AutoCAD Lisp).


    № 795   17-08-2006 08:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>Скажите, SJ, а вы используете Хаскель в рабочих проектах (то бишь,
    >>>получаете за это деньги), или пока только изучаете его?

    Пока изучаю. Но его "идеология" так меня "зацепила", что попробую использовать в рабочем проекте при первой же возможности. Пока меня смущает только отсутствие средств для быстрого проектирования GUI - в Hugs их нет, а с другими средами для Haskell я еще не знаком. Поэтому основные проекты у нас пока идут на BlackBox и Delphi.
    Кстати, если интересно, в сентябре будет очередная конференция по развитию ФЯ - ICFP-2006:
    http://regmaster2.com/conf/icfp2006.html
    Может будет что-нибудь полезное для более активного продвижения ФЯ в сферу промышленного программирования.



    № 794   17-08-2006 06:18 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 793« (SJ)
    ___________________________
    Скажите, SJ, а вы используете Хаскель в рабочих проектах (то бишь, получаете за это деньги), или пока только изучаете его?


    № 793   17-08-2006 05:41 Ответить на это сообщение Ответить на это сообщение с цитированием
    >>>Ну, вы эквилибрист, однако.  :)

    Согласен, увлекся :)
    Зачем искать то, что лежит на поверхности.
    В Haskell есть понятия класса и экземпляра класса, есть полиморфизм и наследование. Получается что функциональный язык может быть вполне объектно-ориентированным, не хуже, чем C++ или Java. И ООП вовсе не принадлежит только миру императивного программирвоания.


    <<<... | 812—803 | 802—793 | 792—783 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 471


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

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

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

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

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

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