Как я могу использовать функциональное программирование в реальном мире? [закрытый]
функциональные языки хороши, потому что они избегают ошибок, устраняя состояние, но также и потому, что они могут быть легко распараллелены автоматически для вас, без необходимости беспокоиться о количестве потоков.
однако, как разработчик Win32, могу ли я использовать Haskell для некоторых DLL моего приложения? И если я это сделаю, есть ли реальное преимущество, которое будет автоматически использовано для меня? Если да, то что дает мне это преимущество, компилятор?
выполняет ли F # распараллеливание функций вы запись через несколько ядер и процессоров автоматически для вас? Вы когда-нибудь видели увеличение количества потоков в диспетчере задач?
в основном мой вопрос заключается в том, как я могу начать использовать Haskell на практике, и я действительно увижу некоторые преимущества, если я это сделаю?
6 ответов:
похоже, что книга Real World Haskell-это именно то, что вы ищете. Вы можете прочитать его бесплатно онлайн:
F# не содержит никакой волшебной пыли пикси, которая будет передавать функции на разные процессоры или машины. То, что делают F#/Haskell и другие функциональные языки программирования, облегчает вам написание функций, которые могут быть обработаны независимо от потока или процессора, на котором они были созданы.
Я не чувствую себя правильно, разместив ссылку здесь на подкаст, в котором я участвую, кажется немного выключенным, но в эпизоде с пастушьим кодом, где мы говорили с Мэттом Подвысоцки, мы задали тот же вопрос и он дал несколько интересных ответов. Есть также много хороших ссылок связанных с функциональным программированием в том эпизоде. Я нашел одну ссылку названия"Почему Функциональное Программирование Имеет Значение это может дать вам некоторые ответы.
Это может быть интересно: " Функциональное Программирование В Реальном Мире"
примеры находятся в F# и C#, но теория довольно общая. Из того, что я прочитал (pre-release), это определенно интересно, но до сих пор я думаю, что это заставляет меня все больше и больше придерживаться C#, используя библиотеки, такие как параллельные расширения.
вы не упомянули, но я предполагаю, что вы используете c++. Один из потенциально простых способов попасть в функционал-через C++ / CLI в F#. C++ содержит "magic pixie dust" (называемый IJW: он просто работает), чтобы вы могли вызывать и выходить из управляемого кода. При этом вызов кода F# почти так же прост, как и из C#.
Я использовал это в одной программе (FreeSWITCH), которая полностью написана на C/C++. С помощью одного управляемого C++ / CLI (используйте переключатель /clr) он волшебным образом переходит в управляемый код, и оттуда я могу загрузить свои плагины F# и выполнить их. Чтобы упростить развертывание, F# может статически связывать все свои зависимости, поэтому вам не нужно развертывать файлы времени выполнения F#. Еще одна вещь, которая делает код CLR привлекательным, - это то, что вы можете передать управляемый код (делегаты) в код C, и среда выполнения автоматически делает для вас удар.
Если вы решите пойти по пути Haskell, функция, которую вы будете искать, - это интерфейс FFI: Foreign Function. Однако я не думаю, что это даст вам тот же уровень интеграции, что и C++/CLI с F#.
в настоящее время я сам изучаю Haskell, когда вы начинаете изучать его, это не кажется очень интригующим, потому что опыт обучения-это не что иное, как изучение языка, такого как C#, это целый новый мир, но я заметил, что могу писать очень сложные выражения всего в нескольких строках кода, когда я оглянулся на код, он был намного более кратким, он был маленьким и плотным. Мне это очень нравится! Вы действительно можете написать реальные программы, которые будут меньше, проще в обслуживании, и гораздо сложнее, чем большинство других языков позволяют, Я голосую за вас, чтобы узнать его!!
удачи.
поскольку вы упоминаете Win32 и DLL, я предполагаю, что вы работаете с неуправляемым кодом. В этом случае GHC будет работать очень хорошо для вас. В конце прошлого года я написал сервер DDE под Windows, используя FFI поговорить с библиотеками MS DDE, и, что удивительно, это был чрезвычайно приятный опыт (особенно учитывая, что я парень Unix). FFI Haskell является мощным (даже поддерживает, например, обратные вызовы в функции Haskell из C или других библиотек) и имеет проверку типа Haskell, когда написание кода C-уровня похоже на воплощение мечты.
этот последний пункт является одним из основных преимуществ Haskell: система типов удивительна. Тем не менее, это похоже на любой мощный инструмент; для его эффективного использования требуется время и усилия.
Так что да, можно начать писать небольшие биты кода в Haskell, которые ссылаются на остальную часть вашего кода (хотя вам может быть проще начать с небольших программ Haskell, которые ссылаются на ваш другой код), и это стоит потратить достаточно много времени, чтобы узнать об этом и использовать его везде, где вы можете. Вы можете в конечном итоге, как и я, планировать довольно крупный проект, тесно интегрированный с кодом Windows (в моем случае, сложной надстройкой Excel) в Haskell.