问题标签 [elaboration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
type-inference - 找出 Agda 程序中未解决的元数据
找出导致未解决的元数据的最佳方法是什么?有没有办法通过扩展所有可解决的周围通配符将所有未解决的元数据(并且只有未解决的元数据)变成孔?
如果不出意外,将未解决的元数据更改为漏洞是否会使有关未解决的元数据的消息消失?因为那时我想我可以尝试将每个通配符和每个隐式参数都更改为漏洞,直到消息消失,然后找出导致问题的原因...
ada - 何时使用 Pragma Pure/Preelaborate
是否有一套通用规则/指南可以帮助理解何时更喜欢pragma Pure
,pragma Preelaborate
或其他东西?标准 (Ada 2012)中提出的规则和定义有点繁琐,如果能阅读一些更清晰且面向普通案例的内容,我将不胜感激。
如果我想在不完全理解它的“原因”的情况下做到彻底,我可以简单地尝试:
- 用
pragma Pure;
- 如果编译不出来,试试
pragma Preelaborate;
- 如果失败了,那么我做了一些棘手的事情,要么需要逐个
pragma Elaborate
单元,要么重新考虑包布局。with
with
虽然这可能有效(可以吗?),因为建议尽可能将包标记为 Pure(同样使用 Preelaborate),但它似乎有点脑残,我更愿意更好地理解这个过程。
components - 组件 VHDL 代码详细说明错误
我为 AES 加密和解密编写了一个 vhdl 代码,并且加密代码已经工作,但是解密一个在合成它时给了我错误我的代码是
错误消息是实例的精化失败:r_ound0
verilog - Systemverilog精化阶段信息打印?
有谁知道一种方法可以让 Systemverilog 在精化阶段打印出我想要的东西?
我知道您可以使用 new $error() 系统调用在细化阶段打印错误,但我只想在那里打印信息(不是错误)一次。是否可以使用 $info() 调用,还是有其他方法?
此外,最好在错误之前打印信息。
idris - 如何在 idris 阐述中使用荒谬/无效
我正在 idris 中编写一个简单的函数:
现在我想用 elaboration 来写它:
我似乎找不到任何使用荒谬/无效的方法,并且似乎找不到任何文档或示例。尝试使用 apply/fill 会不断抛出有关变量qquoteTy和unqTy的错误,这些变量用于 elab 的源代码(用 haskell 编写),我无法从那里找出任何东西。
ada - 避免在 macOS 上使用 GNATCOLL 进行静态与动态详细检查的警告
我正在尝试通过添加来使用 GNATCOLL(在 macOS 上)
到我的 .gpr 文件,但我收到此警告:
我编译了 GNATCOLL,然后使用配置选项 --enable-shared 重新编译它。从文件来看,安装的是共享库版本。
如何指示 gnatmake 使用 GNATCOLL 的共享库版本?或者,我怎样才能静态地构建我的程序,所以至少它是兼容的?
initialization - 使用复杂计算最终确定的 Ada 延迟常数;把代码放在哪里?
我需要一个相当复杂的计算结果来定义一个私有类型,如下所示:
我需要类型 T 以一种非常复杂的方式依赖泛型参数 top_m,由 realComplicatedFunction(.) 体现。该函数在包 Mystic 的主体中定义,但它不使用包声明的任何其他内容。
令我惊讶的是,这个设置工作得很好。也许我很幸运,因为据我对 ARM 的解密可以看出,这种函数调用仅仅是“合法的”,但不能保证不会抛出 Program_Error。我将其解释为“完全禁止这类东西过于严格,但也不能指望编译器在所有情况下都确定其可行性,因此我们只允许您进行试验”。然后有很大的可能性是我完全误读了参考手册。无论如何,关于 Ada 的书籍对这类事情给出了相当严厉的警告,通常是围绕 pragma Elaborate 等人的讨论,所以我几乎没有尝试这个解决方案。
我还尝试将该函数放在 Mystic 的私有子包中,但我无法根据父级和父级规范隐含地解决子级之间的循环,具体取决于子级。无论如何,这个函数不是 Mystic 的扩展,而是初始化它的必要代码。
那么我的问题是:这种功能的合适位置在哪里?
ETA:应 Simon Wright 的要求,这是我遇到的 ARM 部分:http: //www.ada-auth.org/standards/12rm/html/RM-3-11.html entries 9, 10/1和 14:
对于尝试使用主体的构造,将执行检查 (Elaboration_Check),如下所示:
- 对于对具有显式主体的(未受保护的)子程序的调用,将检查主体是否已详细说明。此检查和调用的任何实际参数的评估以任意顺序完成。
...
如果这些检查中的任何一个失败,则会引发异常 Program_Error。
据我了解,构造 mytable : constant Table := etc. 尝试使用 realComplicatedFunction 的主体,因此它必须检查它是否被详细说明。我假设-这是我推理中的一个弱点,但这是我的理解-reallyComplicatedFunction 主体的详细说明仅发生在 Mystic 包主体的详细说明期间,因此我的功能不会在当时详细说明从包规范的私有部分调用。尽管如此,在使用包(的实例)时,我没有收到承诺的 Program_Error 。
ETA2:根据trashgod 的评论,我尝试将包Mystic 变成非通用包;将 top_m 设为可见常量并删除通用部分。编译器现在捕捉到了我从一开始就担心的循环性,程序以 Program_Error: access before elaboration 退出。就好像在第一次实例化之前,或者更确切地说,在实例化期间详细说明所述包的规范之前,对通用包的主体进行了详细说明。由于我希望 Ada 能够满足这种需求(隐藏在所述包的主体中实例化包所需的复杂计算),如果它按照标准工作,我不会感到惊讶,但我不记得在任何地方读过类似的东西,并想知道确切的规则。
libraries - Ada 库初始化/精化和 GPR 指令:找不到精化符号
我正在尝试为 iOS 制作一个 Ada 库。但是,需要手动执行 Ada 细化。
我知道编译器可以生成一个初始化符号,以后可以导入和使用。但是,对于以下 GPR 定义,它不会生成(该nm
命令未列出它)。命名应该<libname>init
与<libname>
GPR 指令中定义的值相对应Library_Name
GPR 是按以下方式定义的(这是 windows/style -see DLL references-,但在 Mac 上为 iOS 生产时也存在问题):
我想念它:如何产生那个符号?
json - 使用 jq 或 bash 中的任何其他工具比较两个 json 文件
我想比较两个 json 文件,看看是否可以从另一个中提取一个。
P1 (p1.json)
P2 (p2.json)
可以看出,P2不完全等于P1,但可以从P1中提取(它提供的同一个人的数据较少,但数据是正确的)。
预期行为:
注意
- 无法从具有一些附加元素的同一数组中提取数组