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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 1252—1243 | 1242—1233 | 1232—1223 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 427


    № 1242   18-09-2006 13:04 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1241« (bb)
    ___________________________
    Видимо и .NET, опирающийся на мирное сосуществование разных языков с разным "общественным строем", и Eclipse - полная нелепица.


    Разве я не привел пример сосуществования в моем собственном проекте ФП (лисп) ЛП (Prolog) и ОО (клиент на Дельфи) ?


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


    Не одной, а любой! Неважно чего вы там придерживаетесь. Пусть будет ОО, я не против :))
    Вопрос был - как вы это собираетесь гарантировать, контролировать, обеспечивать ?
    Вопрос не в том чтобы обязательно ОДНА парадигма везде.
    Пусть будут разные, но пусть будут. Как вы это собираетесь обеспечивать ?


    № 1241   18-09-2006 12:39 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1240« (Jack Of Shadows)
    ___________________________

    Я их насчитываю всего 3 - ООП, ФП и ЛП (логическое программирование)
    Какую парадигму поддерживает язык Си? Никакой?

    Что это за модульное программирование ? Это что, парадигма такая, которая противопоставляется ООП или ФП ?
    Какую парадигму поддерживает Ada образца 1980 г.?

    Модульность есть в ОО языках, модульность есть в ФЯ.
    А процедурность там случаем не наблюдается?

    Человеческий фактор мешает. Именно о человеческом факторе идет речь, когда говорится о ДИСЦИПЛИНЕ.
    Вы вообще-то читали книгу Дейкстры?

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

    Ну если каждый чих в программировании обозвать парадигмой, то можно и пару сотен насчитать :)))Что Вы лично подразумеваете под словом "парадигма"? 


    № 1240   18-09-2006 11:29 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1237« (bb)
    ___________________________
    Что значит строгое? Где кончается ООП и начинается процедурное или модульное программирование? 
    Ну если каждый чих в программировании обозвать парадигмой, то можно и пару сотен насчитать :)))
    Что это за модульное программирование ? Это что, парадигма такая, которая противопоставляется ООП или ФП ?
    Я десятки языков перевидал, но ни одного не встречал в котором не было бы того или иного механизма модульности.
    Модульность есть в ОО языках, модульность есть в ФЯ.
    Да черт возьми любой исходник хаскеля начинается со слов Module BlaBla
    Ах какое смешение парадигм! А еще говорят чистый ФЯ :))

    Конечно нет никакого вавилонского смешения парадигм. Просто потому что мы с вами понимаем под этим словом разные вещи.
    Я их насчитываю всего 3 - ООП, ФП и ЛП (логическое программирование)
    И вот их смешать довольно таки трудно. Хотя взаимодействуют они очень даже неплохо, если граница между ними лежит по границе модулей.
    У меня вот на сервере правил используется логические языки OPS5 и Prolog, встроенные в лисп.
    Казалось бы смешение, ан нет. Модули совершенно разные. Правила описаны отдельно. Код взаимодействия с БД, и с клиентом через web сервер - функциональный, лисповый, отдельно.

    Что касается процедурного программирования, то это программирование от баллды, вообще без какой бы то ни было системы. Соответственно процедурное программирование это не парадигма а ее отсутствие :))
    О чем вобщем то я и говорил в »сообщение 1210«

    Однако все что мы сейчас с вами обсуждаем не имеет никакого отношения к вопросу который я поднял.
    Хотите в одном коде смешивать ОО и ФП - дело ваше. Убедитесь на собственном опыте что это бессмысленно.
    Речь сейчас о другом.
    Какая бы парадигма не была выбрана, это делается не ради самоистязания, или самолюбования.
    Это делается для достижения определенных целей, определенных характеристик кода - абстракции и инкапсуляции.
    Их можно достигнуть при помощи ОО, можно при помощи ФП.
    Однако МОЖНО - не дает гарантию того что вы что у вас получится.
    Человеческий фактор мешает. Именно о человеческом факторе идет речь, когда говорится о ДИСЦИПЛИНЕ.
    Потому что компьютерам дисциплина не нужна.
    А дисциплина - это прежде всего насаждение, принуждение, контроль.
    Редкие, единичные случаи силы духа и самодисциплины среди людей лишь подчеркивают это правило.
    Пока вы пишите для себя - никого не волнует придерживаетесь ли вы дисциплины программирования, и какой именно.

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

    Ну а для себя дома, да хоть на Лого пишите :))


    № 1239   18-09-2006 02:57 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1230« (Владимир Лось)
    ___________________________

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

    Спорная мысль. Рыночное положение имеет мало общего с самими технологиями. Если на смену наворотам приходит нечто на порядки более простое, то на этом сложно заработать, особенно если это простое не является кардинально новым по отношению к общепринятому. К тому же, чем проще инструмент мышления, тем нередко требуется куда больше напрягать извилины: он предъявляет более высокие требования к квалификации. Куда проще нажать кнопочку и получить результат.


    № 1238   18-09-2006 02:44 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1222« (Geniepro)
    ___________________________

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


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

    Возможно, Дейкстра и не рассматривал ФП с точки зрения дисциплины программирования...

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

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


    № 1237   18-09-2006 02:16 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1219« (Jack Of Shadows)
    ___________________________

    Поскольку речь идет о дисциплине программирования, то какая конкретно выбрана парадигма не имеет значения.
    Имеет значение строгое следование выбранной парадигме что и есть ДИСЦИПЛИНА.
    Использовать разные парадигмы в разных частях системы можно без проблем. Главное чтобы они не пересекались в одном коде.


    IMHO, это чистой воды идеализм, близкий к утопизму. Если следовать Вашей логике, дисциплиной программирования Вы называете строгое следование одной отдельно взятой парадигме.

    Что значит строгое? Где кончается ООП и начинается процедурное или модульное программирование? Как это определить? Даже если предположить наличие абсолютно чистых языков для конкретных парадигм (хотя тот же Пролог даже в классическом изложении Кольмеро и Ковальски не является чистым языком логического программирования), то возникает вопрос, что делать на стыке разных частей системы, выполненных в разных парадигмах? Т.е. есть допускается дисциплина программирования в малом и хаос в большом?


    № 1236   17-09-2006 15:53 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1235« (Владимир Лось)
    ___________________________
    Вы знаете, может я был неправ насчет вашего пренбрежительного отношения ко всему сообществу программистов. Приношу свои извинения. Судя по подробному описанию одного из подтипов дураков, вас кто-то на работе серьезно достал. :) Сочувствую вам. :) Видно мне легче, - неадекватные личности, которые есть на моей работе, так сильно мне не докучают :)


    № 1235   17-09-2006 14:14 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1232« (Артем)
    ___________________________
    Чем больше программа, тем больше в ней ошибок. И если на более высокоуровневом языке программа занимает меньшееек оличество строк, то и ошибок в ней будет меньше. Что же касается 1.7 миллионов строк на Erlang, то это гигантский объем (ядро Linux - 2.5 млн.), что учитывая характер программы (идентификация, контроль и дистрибуция трафика в интернете) позволяет сделать предположение, что большая часть ее - это перечень прецедентов, т.е. своеобразная БД.
    Сравнение по показателю строк (1.7МСК), ещё мало о чём говорит по сравнению с количеством строк Линукса. Здесь вообще сравнение не правомерно (апельсины и погонные метры ткани). Можно сравнивать, например, код ядра Линукс и ПО F-22 (2.5МСК самой системы+1.7МСК систем поддержки. Всё на Аде). Это – да. Ещё надо учесть, что то, чего достигают в системах, подобных Линксу «вручную» на Си, в языках, подобных Эрлангу, является «побочным», «естественным» следствием их свойств.

    >>>На Си++ по прежнему будет писаться подавляющее большинство проектов. Интересно, а на основании чего вы пришли к такому выводу?
    Собственного опыта. Из того, что я называю проектами.
    Могу сделать маленькую уступку – на Яве с Си-шарпом. :о) Это сильно изменило расклад?

    А почему бы этим таинственным яйцеголовым не создать математически дисциплинированный и бескомпромиссный язык, дабы отсечь, как вы говорите, "рабоче-крестьянских пареньков", т.е. избавиться от низкооплачеваемых конкурентов и пребывая в счастливом осознании собственной исключительности создавать "божественные" программы?
    Ну-дык, во-первых, - уже. Собсна и тем-то тому и посвящена... А, во-вторых, - вы путаете программирование, как отрасль науки и знания и «программирование», как ремесло, средства зарабатывания куска хлеба. Такое смешение понятий естественно, при теперешнем состоянии дел. По сути, большинство тех,  кто называет сейчас себя «программистами» это те же, немного «замазавшиеся», доктора философии Опиры ( http://lib.ru/STRUGACKIE/weshi.txt ).
    Отчасти такое положение сложилось из-за глубокого заблуждения, что лёгкость написания программ, класса «Здравстуй, мир!» неким образом (с небольшими издержками) прямого экстраполируется на системы «более сложного» класса... Плюс к этому («по Опиру») к 2000 году сформировался огромный пласт «программистов», занятых разработкой «информационных систем» и веб-приложений. В этих отделах приложения программирования успели наработаться и сформироваться типовые наборы подходов и решений (с поддержкой в языковых средствах и в готовых компонентах и системах на рынке). Потребность в таких системах была огромна (отчасти это «подогревалось» искусственно), в эту нишу пришло море людей. И у этого моря подспудно стало складываться мнение («а ля Опир»), основанное на их «горизонте обозрения», что «всё уже придумано до нас».

    Я смотрю, что это ваш любимый конек - делить программистское сообщество на панов и холопов.
    Фигня какая... Мой критерий деления – отношение человека к возможности собственного развития через познание нового, его способности попытаться понять, что и почему ему предлагают, его уважение к мнению оппонента. Названия на этой шкале можете придумать сами.

    Я, конечно, не отрицаю, что дураки и в программировании есть (мало того, могу сказать, что образованный и нахватавшийся современной терминологии дурак - это особо опасный дурак). Хочу только вас спросить, а вы знаете что эти два лагеря четко не очерчены, что это не черный и белый цвета, и даже не градиентный переход от одного к другому?
    Вы ещё про один тип дураков забыли (может быть даже два).
    Дураки ещё есть деятельные, инициативные, с природной живостью соображалки (умом, в сочетании со словом «дурак» это назвать язык не поворачивается)...
    Хотите я его примерно вам опишу? Для примера – лет уже эдак 35-50. Имеет кое-какие знания, полученные через «переплыв» по проектам. Может выдать неимоверный показатель «количество кода/единица времени». Про «объекты» читал две-три книжки. Да и то - «по случаю». Чтит Си, ставит себе в неимоверную заслугу собственное же нежелание переходить на тот же Си++ - «у меня и на си то же самое получается». При этом «получается» неимоверно «макаронный» код с кучей флагов и одними сплошными глобальными переменными. Исправно объявляет объекты в файлах заголовков и тут же определяет их... До сих пор копирует один и тот же Makefile из каталога одного проекта в другой. Всё никак не может отыскать время для изучения штатного отладчика системы и пользуется при отладке многочисленными printf-ами во всём коде. Все его решения – кусочны и сиюминутны. Создаёт он не системы, а «пишет код», «решает задачи». Про парадигмы и модели и не слышал, а если слышал, то просто пожал плечами и вместо того, что бы рассмотреть и применять, например,  MVC-модель, продолжает исправно хранить модельные данные в полях визуальных элементов. Может обладать некоторыми знаниями, например, в сетевых технологиях, но только в рамках тех тем, с которыми сталкивался в каом-либо из проектов. Потоками в своих программах до сих не пользуется или пользуется, максимум ещё одним(!) дополнительным, :о) для совершения ряда примитивных действий, никак (недайбоже!) не пересекающихся с логикой действий в основном потоке программы...
    Про RUP (и подобные вещи) до конца жизни не узнает... зато «на зубок» знает ЕСКД.

    Это я описал типичного «представителя» в моей сегодняшней тематике занятий. Можете сделать поправку на область БД или сетевых приложений.

    Самое удивительное, что возможность существования таким экземплярам, как раз и обеспечили достижения Вирта, Дейкстры, Кана, Хейлсберга, пап Юникса и прочих «высоколобых»... :о) А вот «следы деятельности» таких активных товарищей – предмет разбирательства тех, кому за ними «подчищать», переделывать и «дальше сопровождать»...
    Такие деятельные, уверенные в себе хамы, обычно очень быстро достигают «первого результата», показа «уже работающего кода». «Пилотные проекты» с «генеральским эффектом» - обычно их конёк... Часто такие субъекты даже тим- и проджект-лидерами становятся. В принципе, если успеют «проскочить» - идут дальше по служебной лестнице. Любят при каждом удобном случае «ввернуть воспоминание», о том, что вот они в своё время ого-го системы писали. Остальные присутствующие при этом обычно рассматривают собственные ботинки или усиленно начинают искать что-то в стопке бумаг рядом на столе... Потому, что некоторым из них «посчастливилось» сопровождать после говорящего эти «системы» или заново их переписывать...


    № 1234   17-09-2006 13:30 Ответить на это сообщение Ответить на это сообщение с цитированием
    В слове "компромисс" две "с". Это для высоколобых :)

    Надежность 99.9999999%

    Цифры всегда убедительны. По кабалистике существует магия чисел. Но только как это определили? И как насчет надежности алгоритма?
    Сообщение не подписано


    № 1233   17-09-2006 12:27 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 1232« (Артем)
    ___________________________

    Что же касается 1.7 миллионов строк на Erlang, то это гигантский объем (ядро Linux - 2.5 млн.), что учитывая характер программы (идентификация, контроль и дистрибуция трафика в интернете) позволяет сделать предположение, что большая часть ее - это перечень прецедентов, т.е. своеобразная БД.


    Артме, вы проболжаете путать Erricson с Bluetail :)))

    Это 2 отдельных факта.
    Факт 1: Операционная система для ATM AXD301 написанная в Erricon на Erlang большой группой разработчиков за более чем 5 лет. Количество строй = 1.7 миллиона. Надежность 99.9999999% reliability (9 nines) (31 ms. year!)

    Факт2: Маленькая группа разработчиков, ушедшая из Ericsson и написавшая на Erlang систему идентификации, контроля и дистрибуции трафика в интернете, которая всего лишь через 2 года была продана за 152 миллиона долларов. Учтите что во втором случае никакой информации о количестве строк я не предоставлял :))

    А почему бы этим таинственным яйцеголовым не создать математически дисциплинированный и бескомпромиссный язык,
    Дык созданы уже давным давно - лисп, haskell, erlang
    И не для отсечения лохов. Когда создавался лисп и лохов то в программировании не было.
    Созданы эти языки для решения вполне конкретных задач.

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


    <<<... | 1252—1243 | 1242—1233 | 1232—1223 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 427


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

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

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

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

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

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