首先,我几乎以“整个功能语言”的形式出售。在我看来,多年来,我一直在做Java中的函数式编程。但我对如何启动一个大型功能应用程序有点失落。我想看一个大型项目(OSS或其他)的源代码和构建结构,以便我可以看到在这样的环境中如何最好地处理模块化。
我的问题的背景是我想要启动一个大型JVM项目,我正在考虑选择Java / Groovy混合或Scala / Groovy混合。我不想使用Scala / Groovy混音,除非我进入功能方向,因为我不喜欢Scala进行面向对象编程(一个完全不同的主题)。这意味着要避免像DI框架,AspectJ等那样的东西。(我知道我可以通过函数式编程来模拟/完成/批准这些东西......但这里没有相关性。)我担心缺乏非常大的公开可见使用这些语言的项目是由于他们对大型项目真的很差的共同论点,这将是一个真正的耻辱......
所以我问,你跟随哪些大型fp项目(比如说20K +线路)?我很高兴听到任何用JVM语言运行的东西。特别是如果你觉得它们能够很好地处理模块化。
答案 0 :(得分:10)
这些天我正在试图让Erlang陷入困境,Scala受其影响。我喜欢研究yaws的源代码,它是一个高性能的http服务器,Wings 3D是一个细分建模器。非常有教育意义,学习新语言的最佳方式就是阅读它。
答案 1 :(得分:7)
darcs分布式版本控制系统是纯粹的haskell,即纯粹和懒惰的fp。通过代码行,这似乎不是一个大型项目,但请记住,haskell语法非常密集。
答案 2 :(得分:4)
Emacs里面有很多Lisp,但它的编写方式非常紧迫。 GHC是一个用Haskell编写的大型项目,当然OCaml编译器等都是用OCaml编写的。
答案 3 :(得分:3)
我知道Scala中有两个很大的开源工作:Lift和ESME(Apache Incubator)。
尽管到目前为止,与Scala相关的新语言Noop似乎已写入。当Noop变得足够稳定以进行自我编译时,这种情况可能会发生变化。
答案 4 :(得分:3)
答案 5 :(得分:3)
它是用OCaml编写的,因此不能在JVM上运行, 但Frama-C是一个200000+项目实施 C的静态分析框架,带有插件架构。
Frama-C使用原生动态加载 代码可用,但也可以始终加载插件 如果你愿意,动态地作为字节码或静态链接 重新编译整个事情。
http://frama-c.com/的更多信息,包括源代码。 考虑到您的问题的性质,您可能也会感激 this article at ICFP 09
答案 6 :(得分:3)
Scala / Lift: Novell Vibe:http://vibe.novell.com/ 作者:twitter.com/djspiewak
Clojure: Clj / Sys - 机器学习网络 作者:twitter.com/bradfordcross
的Clojure 推车放弃的Runa预测挖掘框架 作者:Amit Rathore(Clojure in Action)
答案 7 :(得分:2)
答案 8 :(得分:2)
Citrix去年发布了Xen API工具堆栈作为开源软件here。 IIRC,即2006年至2010年由18位开发人员开发的数十万行OCaml代码。
根据this page:
MLDonkey点对点客户端是171kLOC的OCaml代码。
Unison是24kLOC的OCaml代码。
FFTW是14kLOC的OCaml代码。
Hevea是12kLOC的OCaml代码。
Darcs是25kLOC的Haskell代码。
我担心缺乏使用这些语言的大型公开可见项目是因为他们认为大型项目真的很差,这真是一种耻辱......
相反,我们发现OCaml对于主流Java或C#等主流语言的大型项目来说更加更好,因为无法表达代码的高效高级方面导致广泛的削减和 - 粘贴和维护问题。事实上,我目前面临着在F#中重写一百万行C ++的挑战,因为维护费用已经非常昂贵。
答案 9 :(得分:0)
Koders,Open source Code Search engine可能会有所帮助,因为它允许您使用编程语言进行搜索。
答案 10 :(得分:0)
有一些用Lisp编写的非常大的旧项目: http://www.pchristensen.com/blog/lisp-companies/