Обновить
10
0

Пользователь

Отправить сообщение

что такое функциональный стиль?

это когда вы собираете пайп функций

foo(bar(baz(some(there(data)))))

и пропускаете через него ваши данные.

Функциональный стиль - это неизменяемые переменные и функции без побочных эффектов. Причём, неизменяемые переменные - это синтаксический сахар для вызова функции.

а я вот приводил. асинхронное программирование.

Функциональный язык Erlang.довольно успешно используется для асинхронного программирования.

сперва библиотеки промисов-монад-колбеков

Я не знаю, какое отношение к ФП имеют колбаки. А вот async/await в современные языки пришли из функционального программирования, как одна из монад.

а мне и не требуется это делать.

Вы ссылаетесь на Ваше недоказанное утверждение, что популярность языка определяется его качеством/удобством.

мы имеем самые распространённые языки, на которых пишется подавляющее большинство современного ПО.

Так исторически сложилось.

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

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

Сейчас компьютеры достаточно мощные для использования функциональных языков. Но рост их популярности сдерживается большим количеством легаси кода и необходимостью переобучения программистов. Стандартное решение - добавление ФП в имеющиеся языки (как раньше добавили ООП в Си).

з.ы. Питон - простой язык для инженеров и других непрограммистов. Для серьёзных проектов его не используют.

БОЛЬШИНСТВО задач с которыми сталкивается программист через процедурное описание выражается более лаконично, нежели через функциональное.

Вы пока ни одного такого примера не привели. Тот же пакман через функциональное описание в 1.5 раза лаконичнее.

Есть анонимный оператор в котором можно описать выражение a > b, но нельзя записать даже две строки.

А зачем нужны многострочные анонимные функции?

Ниша, где требуется ФП и рекурсия крайне ограничена.

Зато ниша, где ФП лаконичней и выразительнее, очень широка. Именно поэтому в ООП языки добавляют ФП.фичи.

Главные ФП фичи - неизменяемые переменные и чистые функции.

строки три-четыре займет на перле или пхп

Можете код привести?

Вот код на F#:

open FSharp.Data              

for x in HtmlProvider<"http://en.wikipedia.org/wiki/The_world's_100_most_threatened_species">.GetSample()
         .Tables.``Species list``.Rows |> Seq.filter (fun x -> x.Type.Contains("Amphibian")) 
    do printfn "%s - %s" x.``Common name`` x.Type

давайте лучше, ну, например, крестики нолики опишем

Пакман устроит?

https://fable.io/repl/ (загрузите соответствующий пример)

С подробными комментариями 700 строк. Транслируется в 900 строк JavaScript (без комментариев).

Или, может, лучше бильярд (с приличной графикой)? 1330 строк кода.

В чистые ФП системы при этом я тоже не особо верю.

В веб приложениях эти 10% императивного кода заменяет браузер.

Есть приложения для обработки потоков данных.

Есть приложения типа Ejabberd (написан на erlang).

А для дестопных ГУИ приложений есть реактивный интерфейс. Правда, лично я с десктопными приложениями не знаком. Не могу сказать, насколько это удобно по сравнению с ООП ГУИ интерфейсом.

было б иначе, бизнес всех бы заставил писать на ФП, а не ПП

Нехватка специалистов. Особенно с опытом реализации масштабных проектов.

Нежелание начинать проект на незнакомом языке (сложно оценить сроки и т.д.).

Большинство программистов занимается развитием/поддержкой старых проектов. Проектов, которые сейчас начинаются с чистого листа, мало.

Есть много причин, и они не имеют никакого отношения к функциональным языкам.

Предлагаю сравнить PHP и F#.

The world's 100 most threatened species

На этой странице есть таблица с одноимённым названием. Нужно выбрать из таблицы всех черепаховых (название типа содержит "turtle") и вывести в консоль.

Сколько строк займёт программа на PHP? Использование сторонних (популярных) библиотек для сокращения кода - приветствуется.

стоимость разработки на ФП настолько велика, что их удел - упражнения для ума,

Очередное необоснованное утверждение.

Пример с браузерной игрой не вполне удачен, т.к. wasm всё-таки уже везде завезли достаточно стабильно.

Я говорю о популярности. Ещё до wasm появились трансляторы из других языков (включая функциональные) в JavaScript. То есть, сейчас возможно написать сайт целиком, например, на F#. Но большинство, по-прежнему, разрабатывает клиентскую часть на JavaScript.

может вытекать из синтаксиса языка

Может и из синтаксиса, но чаще - по другим причинам. Поэтому неправильно сравнивать удобство синтаксиса по популярности.

Например, я не знаю ни одного преимущества C# над F#, кроме "его знает больше народу".

Кроме рядов Фибоначчи никаких программ на языках ФП мы не видели (конечно с учётом количественного закона, а то знаю я буквоедов)

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

и почему по вашему

Я уже писал. Для ФП языков мало вакансий, так как мало проектов. Мало проектов, так как мало специалистов. Мало специалистов, так как мало вакансий.

а вот написать стратегию повторов после ошибок - уже на лиспе получится страшная каша

Это неверно ни для функциональных языков в целом, ни для лиспа в частности.

для языков ФП почти не существует инфраструктуры тестирования.

Отладчики существуют. Или Вы что-то другое имеете ввиду?

доступный здесь - в смысле применимости, а не в смысле популярности.

Прямо перед этим речь идёт об автомобилях. Причём, в контексте, что более качественные автомобили менее доступны и, как следствие, менее популярны.

ФП проиграли более доступным языкам ПП

Вот - "менее доступный". А Вы из этого делаете вывод "вообще не годится".

не понял откуда такой вывод.

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

Запросто: ряды Фибоначчи не применяются буквально нигде.

Обоснуйте Ваш тезис, что ФП подходит только для программирования ряда Фибоначчи. Нужность рядом Фибоначчи для данной дискуссии не имеет значения.

Когда-то Perl был более распространён чем Python.

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

Выяснилось, что разработчики делающие хоть что-то полезное НЕ выбрали молоток ФП.

Выбор языка для проекта определяется несколькими факторами. Наиболее важные из них:

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

  2. Наличие подходящего готового кода
    Под готовым кодом подразумеваются не только библиотеки, фреймворки, движки (например, для игр), но и предыдущие версии продукта.

  3. Наличие специалистов

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

тот, которым забивают больше гвоздей.

То есть, Вы не можете взять два разных молотка и определить, какой из них лучше/удобнее для забивания гвоздей? Значит, Вы оцениваете не качество инструмента, а что-то другое.

Им хочется ощущать причастность к чему-то важному, недоступному для других.

Вы ошибаетесь. Ничего такого мне не хочется.

А в остальном ФП подходит только для программирования никому не нужного ряда Фибоначчи, ну и факториала.

Обоснуйте. (Аргумент "весь мир" не состоятелен).

весь мир для задач посложнее использует

Когда-то Лисп был более распространён, чем Си. Когда-то предпочитали лошадь трактору. Выбор инструмента определяется множеством факторов, а не тем, какой лучше.

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

У меня есть два молотка. Один - старый с деревянной ручкой, который достался от дедушки. Второй - новый, современный (с прорезиненной рукоятью и т.д.). Какой из них лучше?

Для меня очевидно, что второй лучше и удобней. Для Вас лучше тот, которым я забиваю гвозди.

Функциональное программирование противоречит строению психики человека

100% опрошенных мной детей в возрасте 13 лет сказали, что Хаскель проще для понимания, чем Питон. Что на Хаскель проще писать программы. (Всего был опрошен один ребёнок :) ).

Питон кажется более простым для тех, кому успели "сломать мозг" циклами и прочей императивщиной. Очевидно, что декларативный SQL для поиска данных удобней (выразительней) императивного Си.

Данный код демонстрирует преимущества декларативного подхода над императивным :).

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

Удобней (наглядней, выразительней) сказать, что нужно сделать, а не описывать, как.

Гораздо важнее умение самостоятельно добиваться решения сложных производственных задач "под ключ"

Если человек даже строку развернуть не может, то как он будет добиваться решения сложных производственных задач?

а я как потребитель не могу назвать ни одной ПОЛЕЗНОЙ программы, которой бы пользовался и которая была бы написана на ФП.

Это не показатель. Выбор языка для проекта зависит от многих факторов.

John Hughes, Why Functional Programming Matters (статья на английском)

тогда ФП тоже мимо. ибо качественного кода на ФП языках практически НЕТУ.

Откуда у Вас такая информация?

А зачем знать как перевернуть строку?

Не надо это знать. Нужно быть способным придумать этот алгоритм прямо во время собеседования.

элементы ФП полезны, но не более

На чём основано такое мнение?

один из самых востребованных языков

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

Да и сама оценка "лучше" требует указания критериев. Для меня критерием является качество получаемого кода.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность