Як можна використовувати функціональне програмування в реальному світі? [зачинено]


103

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

Як розробник Win32, чи можу я використовувати Haskell для деяких моїх програм? І якщо я це роблю, чи є реальна перевага, яка була б прийнята автоматично для мене? Якщо так, що дає мені цю перевагу, компілятор?

Чи паралельно F # функції, які ви записуєте через декілька ядер, і процесор автоматично для вас? Ви коли-небудь бачили кількість потоків у збільшенні диспетчера завдань?

В основному моє запитання полягає в тому, як я можу почати використовувати Haskell практичним способом, і чи дійсно я побачу якісь переваги, якщо це зробити?


2
Особисто я заглянув би в ерланг - але це я.
Джейсон Бантінг

2
Щоб трохи уточнити, у мене вже є досвід роботи з декількома різними мовами функціонального програмування, і я знаю, як вони працюють і в чому полягають їх відмінності. Але це питання конкретно: як я можу взяти його до реального використання у світі.
Брайан Р. Бонді,

1
можливий дублікат Чому функціональні мови?

Відповіді:


41

Схоже, книга Haskell Real World - це саме те, що ви шукаєте. Ви можете прочитати його безкоштовно в Інтернеті:

http://book.realworldhaskell.org/


Я чекаю, щоб отримати його в друку. Здається, це буде одна з кращих книг навколо. Б'юсь об заклад, що сервер буде зацікавлений людьми, зацікавленими в Haskell, краще, ніж Практичний Ocaml для Ocaml
Фрідріх

25

F # не містить жодної магічної пиксі пилі, яка передаватиме функції різним процесорам або машинам. Що робить F # / Haskell та інші функціональні мови програмування, це полегшує вам запис функцій, які можна обробити незалежно від потоку або процесора, на якому вони були створені.

Я не вважаю правильним розміщувати тут посилання на подкаст, в якому я беру участь, здається, трохи відключений, але в епізоді Гердінгового кодексу, де ми спілкувалися з Меттом Підвисоцьким, ми задали те саме питання, і він дав кілька цікавих відповідей. У цьому епізоді також є багато хороших посилань, що стосуються функціонального програмування. Я знайшов один заголовок посилань " Чому питання функціонального програмування ", яке може дати вам відповіді.




14

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

Приклади є у F # і C #, але теорія є досить загальною. З того, що я прочитав (попередній реліз), це, безумовно, цікаво, але поки що я думаю, що це змушує мене все більше і більше дотримуватися C #, використовуючи бібліотеки на зразок паралельних розширень.


Ви все ще відчуваєте, що "хочете більше і більше дотримуватися C #"? F # пропонує деякі цікаві функції. Найбільший імпульс, який я отримав, - це менший набір тексту (що означає менше тертя в процесі вираження рішень у коді).
Даніель

1
@ Даніель в чомусь навіть тим більше; p Інструменти, над якими я працюю, можуть бути нетиповими.
Марк Гравелл

8

Ви не згадали, але я припускаю, що ви використовуєте 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 #.


6

В даний час я сам навчаюсь Haskell, коли ви починаєте його вивчати, це не здається дуже інтригуючим, тому що досвід навчання НІЧЕ не схожий на вивчення такої мови, як C #, це зовсім новий світ, але я помітив, що можу писати дуже дуже складно вирази всього в декількох рядках коду, коли я озирнувся на код, він був набагато більш стислим, він був маленьким і жорстким. Я абсолютно люблю це! Ви дійсно можете писати програми в реальному світі, які будуть меншими, простішими в обслуговуванні та набагато складнішими, ніж це дозволяє більшість інших мов, я голосую за те, щоб ви це вивчили !!

Удачі.


4

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

Остання точка - одна з головних переваг Haskell: система типів дивовижна. Це сказало, що це як будь-який потужний інструмент; для її належного використання потрібен час і зусилля.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.