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

StackOverflow https://stackoverflow.com/questions/142948

Вопрос

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

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

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

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

Это было полезно?

Решение

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

http://book.realworldhaskell.org/

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

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

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

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

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

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

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

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

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

Удачи.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top