![]() |
1
48
这个答案继续引起人们的兴趣,大概是作为StackOverflow中Leiningen的参考,所以现在对它进行了重要的编辑,以便在2014年更新它。 雷宁根和蛋糕早在2011年就合并了。Leiningen(版本2)现在是事实上的Clojure自动化工具。 蛋糕和莱宁根很相似项目.clj但试图通过在后台保留持久化的jvm来避免大量的启动开销。在基于REPL的迭代开发的典型过程中,由于持久化进程(旧的函数定义等)中的累积状态,这是一种更具响应性的方法,但也为bug带来了便利。结果这是一个糟糕的交易。 莱宁根的经验和对更快启动时间的持续渴望,导致了许多加快速度的建议和方法: https://github.com/technomancy/leiningen/wiki/Faster |
![]() |
2
24
主要区别在于任务的实现方式。
Leiningen的方法是“在定义了函数之后很难扩展它们,所以我们应该找到一种简单的方法来实现这一点;这样我们可以将函数用于任务,也可以扩展不是任务的东西”,这样就可以将函数的所有可组合性优势应用于任务。 |
|
3
20
正如Alex提到的,最显著的区别是命令行的速度。Cake使用一个持久的JVM,因此只有在第一次在项目中运行任务时才会遇到JVM启动开销。如果您不使用emacs+slime+clojure测试模式,这可能会节省大量时间。例如,在我的一个项目上运行一组相当大的测试0.3分蛋糕中的秒,vs11.2秒在莱恩。 除了性能,cake背后的核心思想是依赖任务模型。考虑到依赖关系图中所有可传递的先决条件,每个任务在给定的生成中只运行一次。这里有一个来自 Martin Fowler's article on rake 在cake语法中,它直接进入project.clj。
要在Leiningen中执行同样的操作,首先必须在项目中创建一个Leiningen目录,其中包含4个文件:code_gen.clj、compile.clj、data_load.clj和my_test.clj。
src/莱宁根/我的编译.clj
src/leiningen/数据加载.clj
src/leiningen/my_test.clj公司
但是数据加载和我的编译都依赖于代码生成,所以你的实际输出是。。。
输出:
如果每个构建只运行一次任务,那么构建会更简单、更高效,因此我们将其作为cake构建中的默认行为。这种哲学已有几十年的历史,并且由一系列的构建工具所共享。您仍然可以使用函数,您仍然可以反复调用它们,并且您始终可以使用clojure的全部功能。
另一个关键区别是如何附加任务。假设我们想添加
Lein使用Robert Hooke附加到任务中。这是一个非常酷的图书馆,以每个人最喜欢的自然哲学圈命名,但它需要一个宏来简化
正如technomancy所指出的,真正不可调和的区别是任务定义。在我看来,蛋糕能更好地处理任务。当我们在lein项目中开始使用协议缓冲区时,对任务依赖模型的需求就变得很明显了。protobuf是我们所有任务的先决条件,但是编译它们非常慢。我们也有很多相互依赖的任务,所以任何构建都是痛苦的。我也不喜欢为我创建的每个任务都需要一个单独的名称空间,因此需要一个额外的src文件。开发商 创建很多任务,lein的方法通过创建太多的摩擦来阻止这一点。使用cake,您可以在项目.clj.
|
![]() |
4
7
截至2011年11月15日 cake and lein merge |
![]() |
ericky · 传递的参数数(0)错误…错误? 7 年前 |
![]() |
Petr Mensik · 在配置文件中正确使用环境库 8 年前 |
![]() |
R71 · 不能用lein运行环 9 年前 |
![]() |
Rich Ashworth · 如何从lein-repl中删除函数? 12 年前 |