gpt4 book ai didi

ruby - 有没有与Ruby-land的Bundler等人等效的Haskell-land。 al,如果没有,那么如何设计一个结构如此的项目?

转载 作者:行者123 更新时间:2023-12-01 22:53:52 25 4
gpt4 key购买 nike

读者注意:忍受我。我保证会有一个问题。

我有一个要解决的问题,对自己说:“哦,我会用Ruby来做。”

$ bundle gem problemsolver
create problemsolver/Gemfile
create problemsolver/Rakefile
create problemsolver/.gitignore
create problemsolver/problemsolver.gemspec
create problemsolver/lib/problemsolver.rb
create problemsolver/lib/problemsolver/version.rb
Initializating git repo in /tmp/harang/problemsolver

删除 s.add_development_dependency "rspec"中对 problemsolver/problemsolver.gemspec的注释,然后
$ bundle exec rspec --init
The --configure option no longer needs any arguments, so true was ignored.
create spec/spec_helper.rb
create .rspec

新测试进入 spec/,并且必须位于以 _spec.rb结尾的文件中。例如 spec/version_spec.rb
describe 'Problemsolver' do
it 'should be at version 0.0.1' do
Problemsolver::VERSION.should == '0.0.1'
end
end

运行规范-像 guard这样的初始化代码更改运行程序-很简单:
$ bundle exec rspec
.

Finished in 0.00021 seconds
1 example, 0 failures

您看不到它,但是该消息已很好地用颜色编码,可以快速显示“我搞砸了吗?”扫描?关于此的很好的事情:
  • 设置速度很快,几乎没有头脑(尽管弄清楚要调用哪些命令并不容易)。
  • 源代码树的标准化布局使用新的代码库缩短了熟悉周期,从而使协作更加简单,并缩短了您遗留下来的项目时的停工时间。
  • 严重依赖于工具,可以在社区中以最佳速度创建新项目,从而传播最佳实践。

  • 添加覆盖率工具,代码观察者,lint, behavior test tools和其他工具不再困难。

    这与人们认为“哦,我将在Haskell进行”的情况形成了鲜明对比。
    $ 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.

    “好极了,”您认为,“我感到非常困扰,我敢打赌,软件开发中所有最新的Haskell最佳实践都在我的磁盘上等待。”
    $ ls
    LICENSE problemsolver.cabal Setup.hs

    请允许我总结一下自己的感受: :(
    生成的cabal文件甚至都没有指定 Main,更不用说设置基本项目的说明了。仍然可以如果您四处寻找试图找到正确的搜索关键字,则可以使用 How to write a Haskell program,这是可以的,除了:
  • 所有Haq源代码都被扔到根目录中。
  • Haq的测试代码仅在Test.hs中,仅是QuickCheck,并且不具有通过拆分文件测试继续进行项目的功能。
  • 所有这些都必须为每个新项目手动编写或复制。

  • 查看真实世界的Haskell的 Chapter 11,您会发现它甚至没有完全提及项目设计的问题。前面提到的任何一个都没有解决Don Stewart用 here友善回答的资源,我会注意到,Stewart先生没有解释如何使用所引用的任何工具。

    请注意, Haskell testing workflow中接受的答案引用了一个项目,该项目已经进行了充分的移动,因此不是一个好的答案,但是会说

    As cabal test doesn't yet exist -- we have a student working on it for this year's summer of code! -- the best mechanism we have is to use cabal's user hook mechanism.



    嘿,好吧,阴谋文件! appropriate section确实有示例,但是它们确实做得很好,但不要给人以每个人都靠自己并祝你好运的印象。

    当然,总有 test-framework看起来不错,但示例代码没有提供Wiki中所见之外的任何功能,并且无法扩展,因为一旦我的程序变得越来越复杂,我就可以开发将测试划分为可管理模块的方法。我什至不确定 HTF发生了什么,并同意 Mr. Volkov的评估。

    Mr. Jelvis对链接的HTF问题的评论使我特别感兴趣:Haskell工具链遭受小决定的专横之苦,这非常糟糕。我实际上无法完成手头的任务-在Haskell中解决我的问题-因为我迫不及待地想要使环境变得正确。为什么这样不好:
  • 浪费了精力。除非我正在编写测试工具,否则我将很少,仅在何处关心我的测试是如何构成的。
  • 很难学习。似乎没有用于建立测试的项目的唯一资源,并且确实存在的各种资源非常多样化,因此无济于事。
  • 很难复制。有这么多可移动的片段可以安排,我每次都必须做不同的事情。
  • 作为必然,它是特质的。这意味着它很难进行协作并难以进行休眠的项目。

  • 这只是普通的臭味。

    不过,也许我错了。在Haskell空间中是否存在一些广告宣传不佳的工具或开发紧密的工具来执行类似于Bundler + Rspec的操作?如果不是,是否有一个宣传不佳的现代Haskell测试规范范例,其中包括所有Stewart先生引用的好东西就在其中?该项目创建或演示了:
  • 应该按照约定和工具以明确定义的方式将测试代码与应用程序代码分开(在Ruby-land中,Rspec测试在spec/中进行, cucumber 功能在features/中进行),
  • 不应要求最终用户编译和安装测试依赖项
  • 应该易于重现,最好在不超过10分钟的时间内重现。
  • 应该标准化或希望标准化。

  • 我认为在Haskell-land根本没有像这样的事情有误吗?

    Edit0:请注意,Ruby语言社区不是唯一适用的比较。 Paul R.在确定配置优于常规的趋势方面是正确的。其他语言以其他方式解决了使可扩展项目结构脱颖而出的问题:
  • C::该语言非常古老,而且文档齐全,以至于您很难确定采用哪种文档齐全的方法。没有这样的工具。
  • Java::通过约定进行配置:您已在编译器级别受其约束。有很多工具,而且文档齐全。
  • Scala::强大的工具支持。
  • Erlang::如果知道要寻找的内容,则非常出色,并有详细记录。如果您使用的是rebar或针对OTP,则可以说是按照惯例进行配置。

  • 如果像C那样,有足够的文档来编译这样的东西,那么Paul R.使用自定义模板的解决方案将非常有用。这仍然遇到我尝试在帖子中明确指出的问题,但是它是可行的。我知道,Haskell最好的产品是“如何编写Haskell程序”,但还不如用手电筒和一瓶水将孤独的Cub Scout丢在树林里。

    同样,是的,静态类型很棒,确实可以解决许多本来需要显式测试的问题。如果它们是最终的解决方案,或者甚至是大多数解决方案,那么对 snap-framework不会进行如此彻底的测试。 (可以说“复制快照核心。”是对我的问题的回答。)

    最佳答案

    当前,没有一种建立测试套件的单一方法。希望人们可以使用cabal test标准化,它是现成的。实际上,Haskell平台还提供了HUnitQuickCheck,因此设置测试不需要下载任何其他依赖项。

    您是正确的,一个旧的可接受的答案没有提供有关cabal test的信息。我编辑了它,现在可以了!您也可能是正确的,Haskell Wiki上的链接页面(也是在cabal test可用之前编写的)没有提供有关当前测试最佳实践的信息。这是一个Wiki,我鼓励人们对其进行编辑!但是请注意,该页面确实提供了指向another page的链接,该链接描述了人们如何构建更复杂的Haskell项目。

    tldr;使用cabal test。我喜欢test-framework,可以根据需要将其与cabal test集成。抱歉,cabal test是新的,并非我们拥有的所有资源(通常是社区可编辑的)都已更新以指向它并描述如何使用它。更新大量资源并创建教程是社区的工作。在过去几年中,我们可能应该做得更好,以推广引入Haskell生态系统的许多新的出色工具。

    关于ruby - 有没有与Ruby-land的Bundler等人等效的Haskell-land。 al,如果没有,那么如何设计一个结构如此的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9662806/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com