Come posso utilizzare la programmazione funzionale nel mondo reale? [chiuso]


103

I linguaggi funzionali sono buoni perché evitano bug eliminando lo stato, ma anche perché possono essere facilmente parallelizzati automaticamente per te, senza che tu debba preoccuparti del conteggio dei thread.

Come sviluppatore Win32, però, posso usare Haskell per alcune dll della mia applicazione? E se lo facessi, c'è un vantaggio reale che verrebbe preso automaticamente per me? Se è così, cosa mi dà questo vantaggio, il compilatore?

F # parallelizza automaticamente le funzioni che scrivi su più core e CPU? Vedresti mai aumentare il numero di thread nel task manager?

Fondamentalmente la mia domanda è: come posso iniziare a utilizzare Haskell in modo pratico e vedrò davvero dei vantaggi se lo faccio?


2
Personalmente, vorrei esaminare erlang, ma sono io.
Jason Bunting,

2
Per chiarire un po ', ho già esperienza con alcuni diversi linguaggi di programmazione funzionale e so come funzionano e quali sono le loro differenze. Ma questa domanda è specificamente: come la porto a un utilizzo nel mondo reale.
Brian R. Bondy,

1
possibile duplicato di perché linguaggi funzionali?

Risposte:


41

Sembra che il libro Real World Haskell sia proprio quello che stai cercando. Puoi leggerlo gratuitamente online:

http://book.realworldhaskell.org/


Sto aspettando che venga stampato. Sembra che sarà uno dei libri migliori in circolazione. Scommetto che servirà le persone interessate ad Haskell meglio di quanto Practical Ocaml faccia per Ocaml
Friedrich

25

F # non contiene alcuna polvere magica di fata che trasmetterà le funzioni a CPU o macchine diverse. Ciò che F # / Haskell e altri linguaggi di programmazione funzionale fanno è semplificare la scrittura di funzioni che possono essere elaborate indipendentemente dal thread o dalla CPU su cui sono state create.

Non mi sento a posto postare qui un link a un podcast a cui partecipo, sembra un po 'strano, ma nell'episodio Herding Code in cui abbiamo parlato con Matt Podwysocki abbiamo posto la stessa domanda e lui ha dato alcune risposte interessanti. Ci sono anche molti buoni collegamenti relativi alla programmazione funzionale in quell'episodio. Ho trovato un collegamento intitolato " Perché la programmazione funzionale è importante " che potrebbe fornire alcune risposte.




14

Potrebbe anche essere interessante: " Real World Functional Programming "

Gli esempi sono in F # e C #, ma la teoria è abbastanza generica. Da quello che ho letto (pre-rilascio) è decisamente interessante, ma finora penso che mi stia facendo venir voglia di restare sempre più legato a C #, utilizzando librerie come Parallel Extensions.


Ti senti ancora come se "vuoi restare sempre più fedele al C #"? F # offre alcune funzionalità interessanti. La spinta più grande che ho ottenuto è stata una minore digitazione (il che significa meno attrito nel processo di espressione delle soluzioni nel codice).
Daniel

1
@Daniel in qualche modo, anche di più; p Gli strumenti su cui lavoro potrebbero essere atipici, però.
Marc Gravell

8

Non hai menzionato, ma presumo, che tu stia usando C ++. Un modo potenzialmente semplice per entrare in funzionale è tramite C ++ / CLI a F #. C ++ contiene "magic pixie dust" (chiamata IJW: It Just Works) per consentirti di chiamare dentro e fuori il codice gestito. Con questo, chiamare il codice F # è quasi semplice quanto lo è da C #.

L'ho usato in un programma (FreeSWITCH), scritto interamente in C / C ++. Con un singolo C ++ / CLI gestito (usa l'opzione / clr), passa magicamente al codice gestito e da lì posso caricare i miei plug-in F # ed eseguirli. Per rendere le cose ancora più semplici per la distribuzione, F # può collegare staticamente tutte le sue dipendenze, quindi non è necessario distribuire i file di runtime di F #. Un'altra cosa che rende attraente il codice CLR è che puoi passare il codice gestito (delegati) al codice C e il runtime crea automaticamente un thunk per te.

Se decidi di seguire la via Haskell, la funzionalità che stai cercando è FFI: Foreign Function Interface. Tuttavia, non credo che ti darà lo stesso livello di integrazione di C ++ / CLI con F #.


6

Al momento sto imparando Haskell da solo, quando inizi ad impararlo, non sembra molto intrigante perché l'esperienza di apprendimento non è NIENTE come imparare una lingua come C #, è un mondo completamente nuovo, ma ho notato che potevo scrivere molto, molto complesso espressioni in poche righe di codice, quando ho guardato indietro al codice era molto più conciso, era piccolo e stretto. Lo adoro assolutamente! Puoi davvero scrivere programmi del mondo reale che saranno più piccoli, più facili da mantenere e molto più complessi di quanto consentano la maggior parte degli altri linguaggi, voto che tu lo impari !!

In bocca al lupo.


4

Dato che menzioni Win32 e le DLL, presumo che tu stia lavorando con codice non gestito. In tal caso, GHC funzionerà molto bene per te. Alla fine dell'anno scorso ho scritto un server DDE sotto Windows usando FFI per parlare con le librerie MS DDE e, sorprendentemente, è stata un'esperienza estremamente piacevole (soprattutto dato che sono un tipo Unix). L'FFI di Haskell è potente (supporta anche, ad esempio, i callback nelle funzioni Haskell da C o altre librerie) e avere il controllo del tipo di Haskell durante la scrittura di codice di livello C è come un sogno che si avvera.

Quest'ultimo punto è uno dei principali vantaggi di Haskell: il sistema di caratteri è sorprendente. Detto questo, è come qualsiasi strumento potente; ha bisogno di tempo e impegno per farne buon uso.

Quindi sì, è possibile iniziare a scrivere piccoli bit di codice in Haskell che si collegano al resto del codice (anche se potresti trovare più facile iniziare con piccoli programmi Haskell che si collegano al tuo altro codice), e vale la pena spendere una discreta quantità di tempo per apprenderlo e usarlo ovunque possibile. Potresti finire come me, pianificando un progetto abbastanza importante strettamente integrato con il codice di Windows (nel mio caso, un sofisticato componente aggiuntivo di Excel) in Haskell.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.