Как я могу использовать функциональное программирование в реальном мире?

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

Однако, как разработчик Win32, могу ли я использовать Haskell для некоторых dll моего приложения? И если я это сделаю, есть ли какое-то реальное преимущество, которое я автоматически воспользуюсь? Если да, то что дает мне это преимущество, компилятор?

Распараллеливает ли F# функции, которые вы пишете для нескольких ядер и процессоров, автоматически для вас? Вы когда-нибудь увидите, что количество потоков в диспетчере задач увеличится?

В основном мой вопрос: как я могу начать использовать Haskell на практике, и действительно ли я увижу какие-то преимущества, если это сделаю?

Лично я бы посмотрел на erlang - но это я.

Jason Bunting 27.09.2008 08:13

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

Brian R. Bondy 27.09.2008 08:15

возможный дубликат Почему функциональные языки?

Roger Pate 27.05.2010 06:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
103
3
19 102
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

В настоящее время я сам изучаю Haskell, когда вы начинаете его изучать, это не кажется очень интригующим, потому что опыт обучения НИЧЕГО не похож на изучение языка, такого как C#, это совершенно новый мир, но я заметил, что могу писать очень, очень сложно выражений всего в нескольких строках кода, когда я снова посмотрел на код, он был гораздо более кратким, маленьким и плотным. Мне это очень нравится! Вы действительно можете писать реальные программы, которые будут меньше, проще в обслуживании и намного сложнее, чем позволяет большинство других языков, я голосую за вас, чтобы вы их выучили !!

Удачи.

F# не содержит волшебной пыли пикси, которая передала бы функции разным процессорам или машинам. Что делают F# / Haskell и другие языки функционального программирования, так это упрощают вам написание функций, которые могут обрабатываться независимо от потока или процессора, на котором они были созданы.

Мне кажется неправильным размещать здесь ссылку на подкаст, в котором я участвую, это кажется немного неуместным, но в эпизоде ​​«Кодекс пастушества», где мы разговаривали с Мэттом Подвизоцким, мы задали тот же вопрос, и он дал несколько интересных ответов. В этом эпизоде ​​также есть много хороших ссылок, касающихся функционального программирования. Я нашел одну ссылку с заголовками "Почему так важно функциональное программирование", которая может дать вам некоторые ответы.

Тогда выложу для вас: herdingcode.com/?p=45 :)

Brian R. Bondy 27.09.2008 08:22
stackoverflow.com/questions/682710/…
Paul Nathan 19.11.2009 03:36
Ответ принят как подходящий

Похоже, книга Real World Haskell - это именно то, что вы ищете. Вы можете прочитать это бесплатно онлайн:

http://book.realworldhaskell.org/

Я жду, когда его напечатают. Кажется, это будет одна из лучших книг в мире. Бьюсь об заклад, он будет обслуживать людей, заинтересованных в Haskell, лучше, чем Practical Ocaml для Ocaml.

Friedrich 13.10.2008 14:08

Это тоже может быть интересно: «Функциональное программирование в реальном мире»

Примеры есть на F# и C#, но теория довольно общая. Из того, что я прочитал (предварительный выпуск), это определенно интересно, но пока я думаю, что это заставляет меня все больше и больше придерживаться C#, используя библиотеки, такие как Parallel Extensions.

Вы все еще чувствуете, что «хотите все больше и больше придерживаться C#»? F# предлагает несколько интересных функций. Самый большой импульс, который я получил, - это меньше набирать текст (что означает меньшее трение в процессе выражения решений в коде).

Daniel 14.02.2012 02:17

@Daniel в некотором роде, тем более; p Инструменты, над которыми я работаю, могут быть нетипичными.

Marc Gravell 14.02.2012 02:20

Вы не упомянули, но я предполагаю, что вы используете C++. Один потенциально простой способ войти в функционал - это перейти от C++ / CLI к F#. C++ содержит «волшебную пыльцу пикси» (называемую IJW: It Just Works), позволяющую вызывать и отключать управляемый код. При этом вызывать код F# почти так же просто, как и из C#.

Я использовал это в одной программе (FreeSWITCH), которая полностью написана на C / C++. С помощью единого управляемого C++ / CLI (используйте переключатель / clr) он волшебным образом переходит в управляемый код, и оттуда я могу загрузить свои плагины F# и выполнить их. Чтобы упростить развертывание, F# может статически связывать все свои зависимости, поэтому вам не нужно развертывать файлы времени выполнения F#. Еще одна вещь, которая делает код CLR привлекательным, заключается в том, что вы можете передавать управляемый код (делегаты) в код C, а среда выполнения автоматически делает за вас преобразование.

Если вы решите пойти по пути Haskell, вам понадобится функция FFI: Foreign Function Interface. Однако я не думаю, что это даст вам такой же уровень интеграции, как C++ / CLI с F#.

Поскольку вы упомянули Win32 и библиотеки DLL, я предполагаю, что вы работаете с неуправляемым кодом. В этом случае вам подойдет GHC. В конце прошлого года я написал сервер DDE под Windows, используя FFI для общения с библиотеками MS DDE, и, что удивительно, это был чрезвычайно приятный опыт (особенно с учетом того, что я парень Unix). FFI Haskell является мощным (даже поддерживает, например, обратные вызовы функций Haskell из C или других библиотек), а проверка типов в Haskell при написании кода уровня C - это как сбывшаяся мечта.

Последний пункт - одно из главных преимуществ Haskell: система типов потрясающая. Тем не менее, это как любой мощный инструмент; ему нужно время и усилия, чтобы эффективно его использовать.

Итак, да, можно начать с написания небольших фрагментов кода на Haskell, которые связаны с остальной частью вашего кода (хотя вам может быть проще начать с небольших программ Haskell, которые ссылаются на ваш другой код), и это стоит потратить достаточно времени, чтобы узнать об этом и использовать его везде, где только возможно. Вы можете в конечном итоге, как и я, спланировать довольно крупный проект, тесно интегрированный с кодом Windows (в моем случае, сложной надстройкой Excel) на Haskell.

Другие вопросы по теме