2009-09-19 13 views
16

Po pierwsze, jestem praktycznie sprzedawany na "całą funkcjonalną rzecz językową". Wydaje mi się, że od lat zajmowałem się głównie programowaniem funkcjonalnym w Javie. Ale jestem trochę stratny, jak uruchomić dużą funkcjonalną aplikację. Chciałbym zobaczyć strukturę źródłową i konstrukcyjną dużego projektu (OSS lub cokolwiek innego), dzięki czemu mogę zobaczyć, jak modularność jest najlepiej obsługiwana w takim środowisku.Jakie bardzo duże funkcjonalne projekty językowe są swobodnie dostępne?

Kontekst mojego pytania polega na tym, że chcę rozpocząć duży projekt JVM i obecnie rozważam wybór miksu Java/Groovy lub Scala/Groovy mix. Nie chcę iść z miksem Scala/Groovy, chyba że idę w kierunku funkcjonalnym, ponieważ nie lubię Scala dla programowania OO (zupełnie inny temat). Oznacza to unikanie takich rzeczy, jak struktury DI, AspectJ itp. (Wiem, że mogę emulować/osiągnąć/zatwierdzić te rzeczy za pomocą programowania funkcjonalnego ... ale to nie jest tutaj istotne.) Obawiam się, że brak bardzo dużych publicznie widocznych projekty używające tych języków wynikają z powszechnego przekonania, że ​​naprawdę są kiepskie w przypadku dużych projektów, co byłoby prawdziwym wstydem ...

Pytam więc, jakie duże projekty Fp (powiedzmy 20K + linie) podążasz? Byłbym bardzo szczęśliwy słysząc o każdym uruchomionym w języku na maszynie JVM. Szczególnie jeśli czujesz, że dobrze radzą sobie z modułowością.

+0

Kilka interesujących projektów zostało wymienionych dla Erlanga, Haskella i Lispa (bez Scali czy Clojure ... może to znak). Naprawdę lubię Wings 3D. Ale żaden z projektów nie wydaje się wykazywać dużej modułowości (z wyjątkiem Emacsa, który, jak wspomniano, jest dość bezwzględnie napisany ... jak pamiętam z pisania wtyczek ponad dekadę temu). Nie użyłem terminu "przedsiębiorstwo", ponieważ jest to zwykle bezużyteczny termin, ale naprawdę szukam projektu, który opiera się na innym kodzie typu "niezwiązana z rdzeniem" lub "standardowa biblioteka". Coś podobnego do rozmiaru i przekrojowego narzędzia do Spring Framework lub Hibernate lub OSGI ... – Dave

+0

A zobacz "znak" dla Clojure: http://flightcaster.com/team –

Odpowiedz

10

Staram się teraz grzebać w Erlangu, na który wpływa Scala. Lubię studiować kod źródłowy yaws, który jest wysokowydajnym serwerem http, oraz Wings 3D, modelarz podzbioru. Bardzo edukacyjny, najlepszym sposobem na naukę nowego języka jest jego przeczytanie.

2

Znam duże porcje Emacs i zasadniczo wszystkie z Maxima są napisane w Lisp. Nie działają one w JVM, ale są najlepszymi przykładami, jakie mogę wymyślić w przypadku dużych, dobrze ugruntowanych i powszechnie używanych i cenionych aplikacji napisanych w języku funkcjonalnym.

+0

Emacs nie jest napisany w stylu funkcjonalnym. – jrockway

4

Emacs ma w sobie dużo Lispa, ale jest napisany w bardzo imperatywnym stylu. GHC to duży projekt napisany w Haskell i oczywiście kompilator OCaml itp. Są napisane w OCaml.

+0

Pamiętaj, że istnieje różnica między Lisps. Językiem wewnątrz Emacsa jest Emacs-sepp. Common Lisp to zupełnie inny język, który został nawet rzucony jako standard ANSI. – Leonel

7

System kontroli wersji rozproszonych wersji jest czystym haskell, tj. Czysty i leniwy. Według linii kodu może to nie być duży projekt, ale należy pamiętać, że składnia haskell jest bardzo gęsta.

3

Istnieją dwa duże wysiłki open source w Scali, które znam: Lift i ESME (Apache Incubator).

Chociaż wydaje się, że nowy język związany z Google Noop został już napisany w Scali. To może się zmienić, gdy Noop stanie się wystarczająco stabilny, aby się skompilować.

3

Xmonad to menedżer okien napisany w Haskell, mają bardzo szczegółowe tutorial do pisania rozszerzeń.

+0

Samouczek nie obejmuje żadnego rzeczywistego programowania; tylko za pomocą Darcs i Haddock. – jrockway

+0

moje złe tutaj są dokumentacje dla programistów http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Doc-Developing.html – Yogthos

+0

Ostatnio wyglądałem, XMonad był tylko 3kLOC. –

3

Jest napisany w SML i dlatego nie działa na JVM, ale Frama-C jest 200000+ linie projekt wdrożenia statyczny ramową analiza dla C, z wtyczką w architekturze.

Frama-C wykorzystuje dynamiczne ładowanie kodu natywnego jeśli są dostępne, ale plug-in może być zawsze załadowany kodu bajtowego dynamicznie lub statycznie połączonego jeśli jesteś gotów przekompilować całość.

Więcej informacji, w tym kod źródłowy, pod adresem http://frama-c.com/. Biorąc pod uwagę charakter Twojego pytania, można również docenić this article at ICFP 09

2

Firma Citrix wypuściła narzędzie Xen API jako oprogramowanie open source here w zeszłym roku. IIRC, to setki tysięcy linii kodu OCaml, który został opracowany przez 18 twórców od 2006 do 2010.

Według this page:

  • Klient MLDonkey peer-to-peer jest 171kLOC z SML kod.

  • Unison to 24kLOC kodu OCaml.

  • FFTW to 14kLOC kodu OCaml.

  • Hevea to 12kLOC kodu OCaml.

  • Darcs to 25kLOC kodu Haskell.

Martwię się, że brak widocznych publicznie bardzo dużych projektów korzystających z tych języków jest wynikiem wspólnej argument, że oni naprawdę są słabe dla dużych projektów, który byłby wstyd ...

Wręcz przeciwnie, okazało SML być znacznie lepiej dla dużych projektów, które nurtu języków takich jak Java czy C#, gdzie niemożność wyrażania produktywnych aspektów wysokiego poziomu kodu prowadzi do rozległej wytnij i wklej i problemy z utrzymaniem. W rzeczywistości jestem obecnie zmuszony do przepisania miliona linii C++ w F# właśnie dlatego, że konserwacja stała się zbyt kosztowna.

3

Scala/Winda: Novell Vibe: http://vibe.novell.com/ Autor: twitter.com/djspiewak

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

Clojure Runa Predictive Mining Framework do rezygnacji z koszyka Autor: Amit Rathore (Clojure in Action)

Powiązane problemy