gpt4 book ai didi

raku - Perl 6 本身是否支持契约式设计?

转载 作者:行者123 更新时间:2023-12-04 15:07:32 25 4
gpt4 key购买 nike

它在 Wikipedia 上被列为具有原生 DbC 支持的语言。除了 Eiffel 和 Spec#,但我在文档或测试套件中找不到任何提及。

最佳答案

2019 更新

伊莫,没有。

因为我不认为 6.d “本地实现了大多数 DbC 功能”对于“大多数”的合理定义,我有 removed it from the Wikipedia Design by Contract page .

(如果您认为它应该放回 native 部分,尽管有这个 SO 和我上面和下面的注释,请确保它按字母顺序显示。)

我认为:

  • P6 拥有可重复使用以“实现大部分 DbC”的原 Material 。
  • 一个自然的开始将是一个用户空间模块。 (然后自然而然地适合 Wikipedia 页面,但在 Languages with third-party support 部分)。)

  • 下面是我的想法的草图。

    1. 在例程组合/继承/委托(delegate)的上下文中 ORing 前置条件和 ANDing 后置条件/不变量:
  • 实现一种动态调用(或者只是静态引用)PRE 的方法语句/ block ,以及单独的 POST “相关祖先”例程的语句/ block 。
  • 确定“相关祖先”。对于不涉及多次分派(dispatch)的类层次结构(或对象委托(delegate)链),“相关祖先”可能很容易根据 callsame 确定。机制。但是在一般情况下感觉非常不同,因为基于非常不同的多次调度范式,可能有许多“竞争”候选人。他们都是“相关的祖先”吗,因此将他们所有的PRE结合起来是合适的和 POST条件?我目前认为不会。
  • 修改例行选择/调度。参见例如 OO::Actors 什么可能是如何最高效地做到这一点的模板。目标是,根据 DbC 规则,PRE获胜例程的语句/ block 及其“相关祖先”在逻辑上被或在一起,POST语句/ block 是逻辑与。
  • 支持类(class)PREPOST block 。已经可以写 PREPOST类中的 block ,但它们与类的构造相关联,而不是对类中方法的后续调用。对于后者,以下 S04 speculation好像是票:

  • It is conjectured that PRE and POST submethods in a class could be made to run as if they were phasers in any public method of the class. This feature is awaiting further exploration by means of a ClassHOW extension.



    原始答案

    查看 Block Phasers ,尤其是 PREPOST移相器。我没有用过它们,距离我阅读 Eiffel 书已经有 25 年了,但它们对我来说很重要。
    PREPOST移相器在 S04-phasers/pre-post.t 中进行了测试.我看到至少一个错误 TODO。

    如果你能查看文档,对它们进行试验(可能使用 an online P6 evaluator),然后报告回来,这样我们就可以看到你对它们的看法,听听你是否遇到了 TODO'd 错误或任何其他问题,并且决定做什么:
  • 维基百科页面说它列出了“本地实现大多数 DbC 功能的语言”。大概“最”限定词是主观的。 P6 是否原生实现了所有(或“大多数”)DbC 功能?如果没有,它可能需要从 Wikipedia 页面中删除。
  • 除非我们确定 P6 确实 DbC 声明是虚假的,否则我们可能需要将“DbC”和“按契约(Contract)设计”添加到文档和文档索引中。 (大概您搜索了其中一个或两个,但没有找到匹配项,这就是导致您认为找不到它们的原因,对吗?)
  • 我们还需要 PRE 的示例和 POST无论它们是否被正式认为是 DbC 功能。但是我们已经知道,从某种意义上说,P6 已经为 wazoo 提供了动力,尽管有很多人做出了贡献,但其中大部分仍然没有被记录为官方 p6doc 的一部分。有很多事情要做!如果你能用 PRE 提出几个非常好的简单示例和 POST ,也许是从您在烘烤测试中看到的发展而来的,那将是壮观的。 :)
  • 关于raku - Perl 6 本身是否支持契约式设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260664/

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