Domanda

I linguaggi funzionali sono utili perché evitano i 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 faccio, c'è un vero vantaggio 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 per te? Vedresti mai aumentare il numero di thread in Task Manager?

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

È stato utile?

Soluzione

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

http://book.realworldhaskell.org/

Altri suggerimenti

F # non contiene polvere di folletti magici che passerà funzioni a CPU o macchine diverse. Quello che fanno F # / Haskell e altri linguaggi di programmazione funzionale è semplificare la scrittura di funzioni che possono essere elaborate indipendentemente dal thread o dalla CPU su cui sono state create.

Non mi sembra giusto pubblicare qui un link a un podcast a cui partecipo, sembra un po 'fuori posto, ma nell'episodio di Herding Code in cui abbiamo parlato con Matt Podwysocki abbiamo posto la stessa domanda e ci ha dato delle risposte interessanti. Ci sono anche molti buoni collegamenti relativi alla programmazione funzionale in quell'episodio. Ho trovato un link titoli " Perché è importante la programmazione funzionale " Ciò potrebbe fornire alcune risposte per te.

Questo potrebbe anche essere interessante: " Programmazione funzionale del mondo reale "

Gli esempi sono in F # e C #, ma la teoria è abbastanza generica. Da quello che ho letto (pre-release) è sicuramente interessante, ma finora penso che mi stia venendo voglia di rimanere sempre più con C #, usando librerie come Parallel Extensions.

Non hai menzionato, ma presumo, che tu stia usando C ++. Un modo potenzialmente semplice per entrare in funzione è tramite C ++ / CLI a F #. C ++ contiene "polvere di folletti magici" (chiamato IJW: funziona e basta) per consentirti di chiamare dentro e fuori dal codice gestito. Con questo, chiamare il codice F # è quasi semplice come lo è da C #.

L'ho usato in un programma (FreeSWITCH), che è 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 plugin F # ed eseguirli. Per rendere le cose ancora più facili per la distribuzione, F # può collegare staticamente tutte le sue dipendenze, quindi non è necessario distribuire i file di runtime F #. Un'altra cosa che rende attraente il codice CLR è che puoi passare il codice gestito (delegati) al codice C e il runtime fa automaticamente un thunk per te.

Se decidi di seguire la strada di 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 #.

Attualmente sto imparando Haskell da solo, quando inizi a 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 potrei scrivere espressioni molto molto complesse 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 la maggior parte delle altre lingue lo consenta, io voto affinché tu lo impari !!

Buona fortuna.

Dato che menzioni Win32 e DLL, suppongo 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 su Windows usando FFI per parlare con le librerie MS DDE, e, sorprendentemente, è stata un'esperienza estremamente piacevole (specialmente dato che sono un ragazzo Unix). L'FFI di Haskell è potente (anche supportando, ad esempio, i callback nelle funzioni di Haskell da C o altre librerie), e avere il controllo del tipo di Haskell durante la scrittura del codice di livello C è come un sogno diventato realtà.

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

Quindi sì, è possibile iniziare a scrivere piccoli frammenti 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 all'altro tuo codice), ed è vale la pena spendere un bel po 'di tempo imparando questo e usandolo dove puoi. Potresti finire come me, progettando un progetto abbastanza importante strettamente integrato con il codice di Windows (nel mio caso, un sofisticato componente aggiuntivo di Excel) in Haskell.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top