2024 Clojure现状调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于这是如何工作的信息。

0
规约

问题陈述:启用仪器测量,并调用一个由规约指定的函数。为了验证lambda,规约使用生成性测试对其进行测试。这导致lambda被多次调用。如果这个lambda发射导弹,现在由规约发射的导弹就会很多。在许多场景中,这是不可接受的,因为可能会导致环境崩溃。

当前解决方案
- 不对lambda进行规约。缺点:规约不能在引用其规约的上下文中生成它。
- 将 fspec-iterations 设置为0。缺点:禁用了所有lambda的验证。
- ???

想法
- 为fspec增加一个标志以禁用其验证的生成性测试。

6 答案

0

评论由:alexmiller

针对这个问题,已经提出了另一种选择,即在仪器测量的同时,根据其规约封装函数参数。

0

评论由:lgs32a

@Alex Miller:是的,我也考虑过这个方案,认为它会更符合关于函数的仪器测量工作方式,即它们在调用时进行检查。

然而,我没有提出这个方案,因为我不知道如何实施。规约必须能够泛型地替换所有传递给任何参数的所有函数,并且还必须知道要使用哪些规约。怎么办?

0
by

评论由:lgs32a

可能的方案之一是在规范中实现“描述性遍历”,作为内部或甚至是公共增强。
规范遍历功能将类似于prewalk/postwalk,但它接受一个规范和一个值,并使用用户提供的函数调用(子)值及其相应的(子)规范。然后,仪器包装器可以通用地替换被fspec指定的值,使用仪器化的fn。每个由其他规范组成的规范都必须实现遍历其子规范和作为新的接口方法的新规范。

0
by

评论由:alexmiller

是的,我们需要这样的东西(参见CLJ-2208中的spec遍历票据)。

0
by

评论由:lgs32a

@Alex Miller:CLJ-2208无法独立完成。我们需要能够使用描述其形状的规范泛型遍历/替换任何给定的数据结构。我应该创建一个单独的票据并概述一些启动此过程的方法,还是现在将其放置于此?

0
by
引用:https://clojure.atlassian.net/browse/CLJ-2217(由lgs32a报告)
...