【问题标题】:What very large functional language projects are freely available? [closed]有哪些非常大的函数式语言项目可以免费获得? [关闭]
【发布时间】:2010-11-29 18:47:55
【问题描述】:

首先,我几乎被“整个函数式语言的东西”所吸引。我突然想到,多年来,我主要使用 Java 进行函数式编程。但是对于如何启动大型功能性应用程序,我有点茫然。我想查看大型项目(OSS 或其他)的源代码和构建结构,以便了解在这样的环境中如何最好地处理模块化。

我的问题是我想启动一个大型 JVM 项目,我目前正在考虑选择 Java/Groovy 组合或 Scala/Groovy 组合。我不想使用 Scala/Groovy 组合,除非我朝着功能方向发展,因为我不喜欢 Scala 用于 OO 编程(一个完全不同的主题)。这意味着要避免使用 DI 框架、AspectJ 等(我知道我可以通过函数式编程来模拟/完成/批准这些东西……但这与这里无关。)我担心缺乏非常大的公开可见使用这些语言的项目是因为普遍认为它们对于大型项目来说确实很差,这将是一个真正的耻辱......

所以我问,您关注哪些大型 fp 项目(比如说 20K+ 行)?我很高兴听到任何在 JVM 上运行的语言。特别是如果您觉得他们以一种很好的方式处理模块化。

【问题讨论】:

  • 已经为 Erlang、Haskell 和 Lisp 列出了一些有趣的项目(没有 Scala 或 Clojure ......也许这是一个迹象)。我真的很喜欢Wings 3D。但是似乎没有一个项目表现出太多的模块化(除了 Emacs,它已经提到,它是非常必要的......正如我在十多年前编写插件时所记得的那样)。我没有使用“企业”这个词,因为它通常是一个无用的词,但我真的在寻找一个建立在其他非核心或“标准库”类型代码上的项目。在大小和横切实用程序上类似于 Spring Framework 或 Hibernate 或 OSGI...
  • 看到 Clojure 的“标志”:flightcaster.com/team

标签: open-source scala functional-programming clojure


【解决方案1】:

这些天我正在尝试深入了解 Erlang,Scala 受到了它的影响。我喜欢研究yaws的源代码,这是一个高性能的http服务器,Wings 3D是一个细分建模器。很有教育意义,学习一门新语言的最好方法就是阅读它。

【讨论】:

    【解决方案2】:

    darcs分布式版本控制系统是纯haskell,即pure and lazy fp。从代码行来看,这似乎不是一个大项目,但请记住,haskell 语法非常密集。

    【讨论】:

      【解决方案3】:

      Emacs 中有很多 Lisp,但它是以非常命令式的风格编写的。 GHC是一个用Haskell写的大项目,当然OCaml编译器等都是用OCaml写的。

      【讨论】:

      • 请注意,Lisps 之间是有区别的。 Emacs 内部的语言是 Emacs-lisp。 Common Lisp 是一种完全不同的语言,甚至被转换为 ANSI 标准。
      【解决方案4】:

      据我所知,Scala 中有两大开源项目:LiftESME (Apache Incubator)。

      尽管目前看来与 Google 相关的新语言 Noop 是用 Scala 编写的。当 Noop 变得足够稳定可以自行编译时,这种情况可能会改变。

      【讨论】:

        【解决方案5】:

        Xmonad是用Haskell编写的窗口管理器,他们有一个非常详细的tutorial用于编写扩展。

        【讨论】:

        【解决方案6】:

        斯卡拉/电梯: Novell Vibe:http://vibe.novell.com/ 作者:twitter.com/djspiewak

        Clojure: Clj/Sys - 机器学习网络 作者:twitter.com/bradfordcross

        Clojure 用于购物车放弃的 Runa 预测挖掘框架 作者:Amit Rathore (Clojure in Action)

        【讨论】:

          【解决方案7】:

          它是用 OCaml 编写的,因此不能在 JVM 上运行, 但是 Frama-C 是一个 200000+ 行的项目实施 C 的静态分析框架,具有插件架构。

          Frama-C 使用原生动态加载 可用的代码,但也可以始终加载插件 如果您愿意,可以动态作为字节码或静态链接 重新编译整个东西。

          更多信息,包括源代码,请访问http://frama-c.com/。 考虑到您问题的性质,您可能还会欣赏 this article at ICFP 09

          【讨论】:

            【解决方案8】:

            我知道大部分Emacs 和基本上所有Maxima 都是用Lisp 编写的。这些不在 JVM 中运行,但对于用函数式语言编写的大型、完善、广泛使用和受欢迎的应用程序,它们是我能想到的最佳示例。

            【讨论】:

            • Emacs 不是以函数式风格编写的。
            【解决方案9】:

            Citrix 去年以开源软件here 的形式发布了 Xen API 工具栈。 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++ 的挑战,正是因为维护变得非常昂贵。

            【讨论】:

              【解决方案10】:

              Koders,Open source Code Search engine 可能会有所帮助,因为它允许您搜索编程语言。

              【讨论】:

                【解决方案11】:

                在 Lisp 中编写了一些非常大且古老的项目: http://www.pchristensen.com/blog/lisp-companies/

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2010-11-10
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-09
                  • 2017-09-18
                  • 1970-01-01
                  • 2010-09-20
                  • 2013-09-13
                  相关资源
                  最近更新 更多