是否有任何Haskell土地等同于Ruby土地';s Bundler等人,如果不是,那么如何设计如此结构化的项目?
读者注意:请容忍我。我保证有个问题是否有任何Haskell土地等同于Ruby土地';s Bundler等人,如果不是,那么如何设计如此结构化的项目?,ruby,haskell,tdd,bundler,setup-project,Ruby,Haskell,Tdd,Bundler,Setup Project,读者注意:请容忍我。我保证有个问题 我有一个问题要解决,我想“哦,我会用Ruby做的。” 删除problemsolver/problemsolver.gempec中的s.add\u development\u dependency“rspec”上的注释,然后 $ bundle exec rspec --init The --configure option no longer needs any arguments, so true was ignored. create spec/s
我有一个问题要解决,我想“哦,我会用Ruby做的。” 删除
problemsolver/problemsolver.gempec
中的s.add\u development\u dependency“rspec”
上的注释,然后
$ bundle exec rspec --init
The --configure option no longer needs any arguments, so true was ignored.
create spec/spec_helper.rb
create .rspec
新测试进入spec/
,并且必须位于以\u spec.rb
结尾的文件中。例如,spec/version\u spec.rb
describe 'Problemsolver' do
it 'should be at version 0.0.1' do
Problemsolver::VERSION.should == '0.0.1'
end
end
运行规范——忽略类似的代码更改运行程序——非常简单:
$ bundle exec rspec
.
Finished in 0.00021 seconds
1 example, 0 failures
你看不到,但信息的颜色编码很好,可以快速扫描“我搞砸了吗?”?这方面有很多好处:
- 安装速度很快,几乎没有大脑(尽管弄清楚要调用哪些命令并不容易)
- 源代码树的标准化布局缩短了对新代码库的熟悉期,使协作更加简单,并减少了在开始一个项目时的停顿时间
- 对工具的高度依赖会在社区中传播最佳实践,大致以新项目创建的速度进行李>
如果一个人认为“哦,我会在哈斯克尔做这件事”,那么这种情况与这种情况形成了不利的对比 “太好了,”你会想,“我被纠缠得不得了,我敢打赌所有最新的Haskell软件开发最佳实践都在我的磁盘上等待着。” 请允许我总结一下我的感受:
:(
生成的阴谋集团文件甚至没有指定Main
,更不用说设置基本项目的说明了。不过,好吧。如果你四处放屁,试图找到正确的搜索关键字,你会找到合适的关键字,除了:
- 所有Haq源代码都被抛出到根目录中
- Haq的测试代码仅在
中,仅为快速检查,无法通过拆分文件测试继续项目test.hs
- 所有这些都必须为每个新项目手动编写或复制
- 这是白费力气。除非我正在编写一个测试工具,否则我很少会关心我的测试是如何进行的,只是从哪里开始
- 这很难学习。似乎没有单一的资源来建立一个项目,并进行测试,而且确实存在的各种资源是非常多样的,没有任何帮助
- 这很难复制。有这么多活动的片段要安排,我每次都会做得不一样
- 作为一个推论,它是独特的。这意味着它很难合作,也很难拿起休眠的项目
- 按照惯例和工具,应以明确定义的方式将测试代码与应用程序代码分开(在Ruby land中,Rspec测试在
中进行,黄瓜特性在spec/
中进行)features/
- 不应要求最终用户编译和安装测试依赖项
- 应易于复制,希望不超过10分钟,并且
- 应该标准化还是有希望标准化
Edit0:请注意,Ruby语言的社区并不是唯一适用的比较。Paul R.正确地指出了配置优于约定的强大趋势。其他语言通过其他方式解决了启动可扩展项目结构的问题:
- C::这种语言是值得尊敬的,并且有很好的文档记录,因此您很难确定采用哪种文档记录良好的方法。没有这样的工具
- Java::配置优于约定:您在编译器级别被绑定到它中。有许多工具,并且有很好的文档记录
- Scala::强大的工具支持
- Erlang::如果你知道你要找的是什么,那么这是一个值得尊敬的、松散的文档记录。如果你需要的话,可以说是配置优于常规
$ bundle exec rspec . Finished in 0.00021 seconds 1 example, 0 failures
$ mkdir problemsolver $ cd problemsolver/ $ cabal init Package name [default "problemsolver"]? Package version [default "0.1"]? 0.0.1 Please choose a license: 1) GPL 2) GPL-2 3) GPL-3 4) LGPL 5) LGPL-2.1 6) LGPL-3 * 7) BSD3 8) MIT 9) PublicDomain 10) AllRightsReserved 11) OtherLicense 12) Other (specify) Your choice [default "BSD3"]? Author name? Brian L. Troutwine Maintainer email [default "brian@troutwine.us"]? Project homepage/repo URL? Project synopsis? Solves a problem. Project category: 1) Codec 2) Concurrency 3) Control 4) Data 5) Database 6) Development 7) Distribution 8) Game 9) Graphics 10) Language 11) Math 12) Network 13) Sound 14) System 15) Testing 16) Text 17) Web 18) Other (specify) Your choice? ProblemSolver ProblemSolver is not a valid choice. Your choice? 18 Please specify? ProblemSolver What does the package build: 1) Library 2) Executable Your choice? 2 Generating LICENSE... Generating Setup.hs... Generating y.cabal... You may want to edit the .cabal file and add a Description field.
$ ls LICENSE problemsolver.cabal Setup.hs