2009-09-19 33 views
16

Để bắt đầu, tôi hầu như được bán trên 'toàn bộ ngôn ngữ chức năng'. Nó xảy ra với tôi rằng, trong nhiều năm, tôi đã làm chủ yếu là lập trình kiểu chức năng trong Java. Nhưng tôi là một chút mất mát như thế nào để bắt đầu một ứng dụng chức năng lớn. Tôi muốn xem nguồn và cấu trúc xây dựng của một dự án lớn (OSS hoặc bất kỳ thứ gì) để tôi có thể thấy cách mô-đun được xử lý tốt nhất trong môi trường như vậy.Dự án ngôn ngữ chức năng rất lớn nào có sẵn miễn phí?

Ngữ cảnh của câu hỏi của tôi là tôi muốn bắt đầu một dự án JVM lớn và tôi hiện đang nghĩ đến việc chọn hỗn hợp Java/Groovy hoặc hỗn hợp Scala/Groovy. Tôi không muốn đi với hỗn hợp Scala/Groovy trừ khi tôi đi theo hướng chức năng vì tôi không thích Scala cho lập trình OO (một chủ đề hoàn toàn khác). Điều này có nghĩa là tránh các công cụ như DI framework, AspectJ, v.v. (Tôi biết mình có thể mô phỏng/thực hiện/phê duyệt những thứ này với lập trình hàm ... nhưng điều đó không liên quan ở đây.) các dự án sử dụng các ngôn ngữ này là do lập luận chung rằng chúng thực sự nghèo nàn cho các dự án lớn, điều này thật sự là một sự xấu hổ ...

Vì vậy, tôi hỏi những dự án lớn nào (cho phép dòng 20K +)? Tôi rất vui khi được nghe về bất kỳ ngôn ngữ nào chạy bằng ngôn ngữ trên JVM. Đặc biệt là nếu bạn cảm thấy họ xử lý mô đun theo một cách tốt.

+0

Một số dự án thú vị đã được liệt kê cho Erlang, Haskell và Lisp (không có Scala hoặc Clojure ... có thể đó là dấu hiệu). Tôi thực sự thích Wings 3D. Nhưng không ai trong số các dự án dường như thể hiện tính mô-đun nhiều (ngoại trừ Emacs, nó đã được đề cập, khá là bắt buộc bằng văn bản ... khi tôi nhớ lại bằng cách viết các plugin hơn một thập kỷ trước). Tôi đã không sử dụng thuật ngữ 'doanh nghiệp' vì nó thường là một thuật ngữ vô dụng nhưng tôi thực sự đang tìm kiếm một dự án xây dựng trên loại mã không phải lõi hoặc 'thư viện chuẩn'. Một cái gì đó giống như kích thước và tiện ích cắt ngang cho khung công tác Spring hoặc Hibernate hoặc OSGI ... – Dave

+0

A xem "dấu" cho Clojure: http://flightcaster.com/team –

Trả lời

10

Tôi đang cố gắng lúng túng Erlang những ngày này, mà Scala bị ảnh hưởng bởi. Tôi thích nghiên cứu mã nguồn của yaws, một máy chủ http có hiệu suất cao và Wings 3D, một người lập mô hình phân khu. Rất giáo dục, cách tốt nhất để học một ngôn ngữ mới là đọc nó.

2

Tôi biết các phần lớn là Emacs và về cơ bản tất cả các Maxima được viết bằng Lisp. Chúng không chạy trong JVM, nhưng chúng là những ví dụ hàng đầu mà tôi có thể nghĩ đến cho các ứng dụng lớn, được thiết lập tốt và được sử dụng rộng rãi và được đánh giá cao được viết bằng một ngôn ngữ chức năng.

+0

Emacs không được viết theo kiểu chức năng. – jrockway

4

Emacs có rất nhiều Lisp trong đó, nhưng nó được viết theo một phong cách rất bắt buộc. GHC là một dự án lớn được viết bằng Haskell, và dĩ nhiên trình biên dịch OCaml, vv, được viết bằng OCaml.

+0

Tâm trí bạn, có sự khác biệt giữa Lisps. Ngôn ngữ bên trong Emacs là Emacs-lisp. Lisp phổ biến là một ngôn ngữ hoàn toàn khác nhau, thậm chí được đúc như một tiêu chuẩn ANSI. – Leonel

7

Hệ thống kiểm soát phiên bản phân phối darcs là haskell thuần túy, tức là fp thuần túy và lười. Bởi dòng mã này có thể không có vẻ là một dự án lớn, nhưng hãy nhớ rằng cú pháp haskell là rất dày đặc.

3

Có hai nỗ lực nguồn mở lớn ở Scala mà tôi biết: LiftESME (Apache Incubator).

Mặc dù có vẻ như ngôn ngữ mới có liên quan đến Google Noop được viết bằng Scala cho đến nay. Đó là khả năng thay đổi khi Noop trở nên ổn định, đủ để biên dịch chính nó.

3

Xmonad là trình quản lý cửa sổ được viết bằng Haskell, chúng có chi tiết tutorial để viết tiện ích.

+0

Hướng dẫn không bao gồm bất kỳ chương trình thực tế nào; chỉ sử dụng Darcs và Haddock. – jrockway

+0

lỗi của tôi ở đây là tài liệu dành cho nhà phát triển http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Doc-Developing.html – Yogthos

+0

Lần cuối tôi xem, XMonad chỉ là 3kLOC. –

3

Nó được viết bằng OCaml và do đó không chạy trên JVM, nhưng Frama-C là dự án 200000+ thực hiện khung phân tích tĩnh cho C, với kiến ​​trúc trình cắm thêm.

FRAMA-C sử dụng nạp năng động của bản địa mã nơi có sẵn, nhưng plug-in cũng có thể luôn luôn được nạp động như bytecode hoặc liên kết tĩnh nếu bạn sẵn sàng biên dịch lại toàn bộ sự việc.

Thông tin khác, bao gồm mã nguồn, tại http://frama-c.com/. Xem xét tính chất của câu hỏi của bạn, bạn cũng có thể đánh giá cao this article at ICFP 09

2

Citrix phát hành công cụ Xen API dưới dạng phần mềm nguồn mở here năm ngoái. IIRC, đó là hàng trăm ngàn dòng mã OCaml được phát triển bởi 18 nhà phát triển từ năm 2006 đến năm 2010.

Theo this page:

  • Các MLDonkey peer-to-peer khách hàng là 171kLOC của OCaml mã.

  • Unison là 24kLOC mã OCaml.

  • FFTW là 14kLOC mã OCaml.

  • Hevea là 12kLOC mã OCaml.

  • Darcs là 25kLOC mã Haskell.

Tôi lo lắng rằng việc thiếu các dự án hiển thị công khai rất lớn sử dụng những ngôn ngữ là do sự tranh luận phổ biến mà họ thực sự là những người nghèo cho các dự án lớn, đó sẽ là một sự xấu hổ thật ...

ngược lại, chúng tôi thấy OCaml được nhiều tốt hơn cho các dự án lớn mà ngôn ngữ chính thống như Java hay C# mà không có khả năng thể hiện các khía cạnh cấp cao hiệu quả của các mã dẫn đến sâu rộng cắt-và-dán và vấn đề bảo trì. Trong thực tế, tôi hiện đang thách thức với viết lại một triệu dòng C + + trong F# chính xác bởi vì bảo trì đã trở thành cực kỳ tốn kém.

3

Scala/Lift: Novell Vibe: http://vibe.novell.com/ Tác giả: twitter.com/djspiewak

Clojure: CLJ/Sys - Machine Learning Mạng Tác giả: twitter.com/bradfordcross

Clojure Runa Khung khai thác dự đoán cho việc bỏ rơi giỏ hàng Tác giả: Amit Rathore (Clojure in Action)

Các vấn đề liên quan