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

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

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

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

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

Ответ 1

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

http://book.realworldhaskell.org/

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Если вы решите пойти по пути Haskell, функция, которую вы ищете, - это FFI: интерфейс внешних функций. Тем не менее, я не думаю, что он даст вам тот же уровень интеграции, что и С++/CLI с F #.

Ответ 5

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

Удачи.

Ответ 6

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

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

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