Здравствуйте, eao197, Вы писали:
E>Не удержался...
Евгений, мне понятно Ваше раздражение. Когда что-то рекламируют как панацею, это всегда оказывается Гербалайф. Что поделаешь, как в любом приличном флейме, здесь было сказано много лишнего; не доросла, к сожалению, Философия до конструктивных обсуждений (да, поставьте мне за это 10 минусов) . Но тем не менее, ИМХО, ФП стоит на пороге (о чем говорит появление функциональных элементов в C#, Python и т.д.), и игнорировать его нельзя, ибо программисту надо идти в ногу со временем [пафос офф].
E>E>Функциональное программирование прекрасно, оно — радость созерцания. Как только кто-то поймет функциональное программирование, он немедленно перейдет к нему. Массы, которые застряли в устаревшем императивном и объектно-ориентированном программировании, делают это из слепого предубеждения. Они просто не понимают.
E>Каким-то религиозным духом попахивает
Да, хороший программист должен быть поэтом и немножко фанатиком. Мне в этом плане нравится эпиграф из SICP (с вашего позволения, приведу целиком):
This book is dedicated, in respect and admiration, to the spirit that lives in the computer.
``I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don't become missionaries. Don't feel as if you're Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don't feel as if the key to successful computing is only in your hands. What's in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.''
А с другой стороны, это не религия, а осознанный выбор. Люди вроде Филипа Уодлера знают достаточно языков не понаслышке, чтобы адекватно оценивать их достоинства.
E>В свое время и ООП пыталось пробивать себе дорогу.
Вот-вот, и пробивало не один десяток лет. И успело устареть к моменту пика своей популярности (немного сильное утверждение, но доля истины в нем есть).
E>Хочется добавить, что C, C++ и Java успешно работают во всех этих областях
Здесь отвечу сумбурно, т.к. нормально сформулировать не удается да и времени нет, а сказать давно хотелось.
Да, C и C++ успешно применяются в этих областях, но есть ряд но.
Все знают избитую мудрость о том, что преждевременная оптимизация — это корень зла.
А что такое выбор С++, как не преждевременная оптимизация? Ручное управление памятью, обратная совместимость с C (кроссплатформенный ассемблер) — зачем это в экспертной системе, например? Далее, все алгоритмически нетривиальные задачи имеют дело с "кудрявыми" (hairy) структурами данных — деревьями и графами, так или иначе. Их грамотная реализация на C++ (вроде boost::graph) — удел немногих избранных, нетривиальной задачей является и проектирование интерфейса (тут на всю катушку включается горячо любимое Вами метапрограммирование, шаблоны выражений и прочая красота, за которую мы так любим С++), и сама реализация (как-никак, ручное управление памятью, мучительная борьба за thread-safety, которой нет в Стандарте, UB на каждом шагу, и т.д.). И при этом выразительности, сравнимой с Хаскелем, все равно не получить. Елки-палки, в ОКамле я могу дерево записать в виде константы, а в С++ — только с помощью злой механики вроде шаблонов выражений и умных указателей, при этом подумывая о порядке инициализации и точках следования. Тем более безумием, с моей точки зрения, заниматься изобретением новых структур данных и алгоритмов на С++. Т.к. сегодня придется отвлекаться на несущественные детали вроде управления памятью больше, чем следует.
Да, у меня немного опыта, чтобы что-то утверждать. Я, можно сказать, просто купился на "маркетинг" функциональных языков. Я просто посмотрел на задачи, которые команды из 2-5 человек решают на ежегодных соревнованиях ICFP Contest и в какие сроки (конечно, моделирование поведения колонии муравьев на поле из шестиугольных клеток имеет мало общего с промышленным программированием, нудным сопровождением, написанием кода в соответствии с стандартами и гайдлайнами, чтобы любой индус мог понять, продолжите сами..., но это же интересно, черт побери, впечатляет! Я тоже хочу быть способным написать компилятор языка, управляющего муравьем, за 2 часа, или ray-tracer за полдня, это вам не XML-сериализация SOAP-envelope'ов, фукакаягадость
У меня есть амбиции, хочу решать интересные задачи (как у McSeem2 — поймите меня правильно, я себя ни в коем лучае с Максимом не сравниваю, не дорос еще.) "У меня тоже голос, я тоже хочу петь" ).
Я одно время был очень сильно увлечен возможностями и новыми течениями в С++ (ну Вы знаете, списки типов, CT вычисления и т.д), но потом оказывается, что в реальной работе я их не применяю. А когда применяю, проекту это вредит. Они для элиты, которая пишет библиотеки типа буста. И на что тратит время эта элита? Они знают Стандарт, все 700 страниц, наизусть, знают все глюки и несоответствия стандарту популярных компиляторов, и могут часами обсуждать, имеет ли некоторый фрагмент кода Undefined behaviour — стоит ли тратить на это драгоценное время? (последний абзац не стоит понимать буквально, я уважаю элиту С++-сообщества, честно
).
Я думаю, не стоит объяснять, в чем разница между:
— логическим выводом, встроенным в язык, и реализацией оного на С++
— параллельностью и распределенностью, встроенной в язык — "вот, посчитай мне вот это выражение, а на скольки процессорах и как будет проводиться синхронизация, мне неинтересно" — и того же на С++, с учетом всех граблей ручной синхронизации, видимости памяти, инверсии приоритетов, ... (заметим, здесь тоже нуже человек с умственными способностями академика, но все свои способности он убьет на борьбу с машиной, а не с задачей)
— настоящими ленивыми вычислениями и их имитацией на С++
— продолжите список, посолить по вкусу.
Далее, о сложности и читабельности. Читабельность кода, несомненно, важна, но если не доводить до паранойи. Спорить, что лучше, фигурная скобка или begin, могут, ИМХО, люди с ограниченным мировоззрением. Истина (для меня) состоит в том, что
сложность программы должна отражать сложность решаемой задачи, по возможности не добавляя к ней сложности самого языка программирования. Надоедают рассусоливания о том, стоит ли заключать тело однострочного if'а в фигурные скобки или не стоит, не вредит ли это понятности кода (да что там понимать! да, я знаю о стоимости сопровождения кода, в конце концов, с этого я начинал — доделывал и багфиксил монстра с 5-летней историей). Возьмем научную работу с применением современного мат. аппарата, ну, вы знаете, начинается со слов "Очевидно, что" — и пошли формулы на 10 страниц. Вопрос: математики, физики, химики, они нарочно, что ли, усложнить себе жизнь пытаются? Нет, просто для сложной задачи это самая
краткая, однозначная и точная запись -> следовательно, самая понятная,
адекватная задаче. Вспомним, как в школе заучивали правила дифференцирования/интегрирования, на естественном языке это длинное и непонятное месиво, на языке формул — все ясно, если привыкнуть. Точно так же решение алгоритмически сложной проблемы на С — длинное и непонятное, за деревьями леса не видно. Программы на ФЯ — это те же самые мат. формулы, только
исполняемые. Отсюда популярность в академическом мире. Но я думаю, от них и неакадемический мир может получить определенные преимущества. Давайте откроем наши mind'ы новому (а по сути, хорошо забытому старому).
Я отлично понимаю, что ФЯ — это не силвер буллит. Я отдаю себе отчет в том, что для Явы и С++ задач еще на 20 лет хватит. А также о том, что мне еще долго писать на С++ и C# "за еду", оставив ОКамл/Хаскель в качестве хобби и для решения задачи в аспирантуре. Но Яве и особенно, С++ (при всем уважении) нужно подвинуться.
Уфф, о чем это я? Мне же через три дня сдавать редактор конфигурационных файлов в формате XML, с драг-н-дропом и проперти-гридом, а там еще конь не валялся, что я тут делаю? Раскланиваюсь, не судите слишком строго...
... << RSDN@Home 1.2.0 alpha rev. 619>>