2009-09-19 10 views
16

Per cominciare, sto praticamente venduto sul 'tutto linguaggio funzionale'. Mi viene in mente che, per anni, ho fatto principalmente programmazione in stile funzionale in Java. Ma sono un po 'persa su come avviare una grande app funzionale. Mi piacerebbe vedere la struttura di origine e di costruzione di un grande progetto (OSS o qualsiasi altra cosa) in modo da poter vedere come la modularità sia gestita al meglio in tale ambiente.Quali grandi progetti linguistici funzionali sono disponibili gratuitamente?

Il contesto della mia domanda è che voglio avviare un grande progetto JVM e attualmente sto pensando di scegliere un mix Java/Groovy o un mix Scala/Groovy. Non voglio andare con il mix di Scala/Groovy a meno che non vada nella direzione funzionale perché non mi piace la programmazione di Scala per OO (un argomento completamente diverso). Questo significa evitare cose come quadri DI, AspectJ, ecc (so di poter emulare/realizzare/approvare a queste cose con programmazione funzionale ... ma non è qui rilevante.) Sono preoccupato che la mancanza di grandi dimensioni pubblicamente visibile i progetti che utilizzano questi linguaggi sono dovuti all'argomento comune che sono davvero scarsi per i grandi progetti, il che sarebbe un vero peccato ...

Quindi, chiedo, quali grandi progetti di FP (diciamo 20K + linee) segui? Sarei molto contento di sapere di quelli che girano in una lingua sulla JVM. Soprattutto se ritieni che gestiscano la modularità in un buon modo.

+0

Alcuni progetti interessanti sono stati elencati per Erlang, Haskell e Lisp (senza Scala o Clojure ... forse questo è un segno). Mi piacciono molto le ali 3D. Ma nessuno dei progetti sembra mostrare molta modularità (eccetto Emacs che, è stato menzionato, è scritto in modo abbastanza imperativo ... come ricordo di aver scritto dei plugin più di un decennio fa). Non ho usato il termine "impresa" perché è generalmente un termine inutile, ma sto cercando un progetto che si basa su un altro codice di tipo non core o "standard library". Qualcosa di simile alle dimensioni e all'utilità cross-cutting per Spring Framework o Hibernate o OSGI ... – Dave

+0

A vedere un "segno" per Clojure: http://flightcaster.com/team –

risposta

10

sto cercando di Grok Erlang in questi giorni, che Scala è influenzato da. Mi piace studiare il codice sorgente di yaws, che è un server http ad alte prestazioni, e Wings 3D, un modellatore suddivisione. Molto istruttivo, il modo migliore per imparare una nuova lingua è leggerlo.

2

So grandi porzioni di Emacs e praticamente tutti Maxima sono scritti in Lisp. Questi non vengono eseguiti nella JVM, ma sono gli esempi migliori a cui posso pensare per applicazioni grandi, ben consolidate e ampiamente utilizzate e apprezzate scritte in un linguaggio funzionale.

+0

Emacs non è scritto in uno stile funzionale. – jrockway

4

Emacs ha un sacco di Lisp in essa, ma è scritto in uno stile molto imperativo. GHC è un grande progetto scritto in Haskell, e ovviamente il compilatore OCaml, ecc., Sono scritti in OCaml.

+0

Attenzione, c'è una differenza tra Lisps. Il linguaggio all'interno di Emacs è Emacs-lisp. Common Lisp è un linguaggio completamente diverso, che è stato persino lanciato come standard ANSI. – Leonel

7

Il darcs distribuiti sistema di controllo versione è haskell puro, cioè fp pura e pigro. Per linee di codice questo potrebbe non sembrare un grande progetto, ma tieni presente che la sintassi haskell è molto densa.

3

Ci sono due grandi sforzi open source in Scala che conosco: Lift e ESME (Apache Incubator).

Anche se sembra che la nuova lingua relativa a Google Noop sia stata scritta in Scala fino ad ora. È probabile che cambi quando Noop diventa abbastanza stabile da compilarsi.

3

Xmonad è un gestore di finestre scritto in Haskell, hanno uno tutorial molto dettagliato per scrivere estensioni.

+0

Il tutorial non copre alcuna programmazione effettiva; solo usando Darcs e Haddock. – jrockway

+0

il mio male qui sono i documenti dello sviluppatore http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Doc-Developing.html – Yogthos

+0

Ultimo aspetto, XMonad era solo 3kLOC. –

3

È scritto in OCaml e pertanto non viene eseguito su JVM, ma Frama-C è un progetto di oltre 200.000 linee che implementa un framework di analisi statico per C, con un'architettura plug-in.

Frama-C utilizza il caricamento dinamico di codice nativo, se disponibile, ma i plug-in possono sempre essere caricati dinamicamente come bytecode o collegate staticamente se si è disposti ricompilare il tutto.

Ulteriori informazioni, incluso il codice sorgente, allo http://frama-c.com/. Considerando la natura della tua domanda, si potrebbe anche apprezzare this article at ICFP 09

2

Citrix ha rilasciato il pacchetto di strumenti API Xen come software open source here l'anno scorso. IIRC, che è centinaia di migliaia di righe di codice OCaml che è stato sviluppato da 18 sviluppatori dal 2006 al 2010.

Secondo this page:

  • Il MLDonkey peer-to-peer client è 171kLOC di OCaml codice.

  • Unison è 24kLOC di codice OCaml.

  • FFTW è 14kLOC del codice OCaml.

  • Hevea è 12kLOC del codice OCaml.

  • Darcs è 25kLOC di codice Haskell.

Sono preoccupato che la mancanza di progetti di grandi dimensioni visibili pubblicamente che utilizzano queste lingue è dovuto al argomento comune che in realtà sono scarse per i progetti di grandi dimensioni, il che sarebbe un vero peccato ...

al contrario, abbiamo trovato OCaml essere molto meglio per i grandi progetti che i linguaggi tradizionali come Java o C# in cui l'incapacità di esprimere gli aspetti produttivi di alto livello del codice causa un forte taglio-e-incolla e problemi di manutenzione. In effetti, sono attualmente sfidato a riscrivere un milione di righe di C++ nello F# proprio perché la manutenzione è diventata proibitiva.

3

Scala/Ascensore: Novell Vibe: http://vibe.novell.com/ Autore: twitter.com/djspiewak~~V~~3rd

Clojure: CLJ/Sys - Machine Learning Network Autore: twitter.com/bradfordcross

Clojure Runa Quadro minerario predittivo per l'abbandono del carrello Autore: Amit Rathore (Clojure in Action)

Problemi correlati