理解编译指示

问题描述

我有几个关于 pragmas 的相关问题。让我开始这一系列问题的原因是试图确定是否可以禁用一些警告而不用一直到 no worries(我仍然想担心,至少一点!)。我仍然对那个特定问题的答案感兴趣。

但是考虑到这个问题让我意识到我并不真正理解 pragma 是如何工作的。很明显,至少一些 pragma 带有参数(例如,use isms<Perl5>)。但它们似乎不是函数。它们在整体 MOP 中处于什么位置?它们有点像 Traits 吗?还是包裹?有没有办法反省他们?查看当前有效的编译指示?

编译指示是内置于语言中的,还是用户可以添加的内容?在编写库时,我希望有一些错误/警告,用户可以选择使用 pragma 禁用这些错误/警告——这可能吗,或者它们是否仅限于在编译器中使用?如果我可以创建我的 pragma,除了 pragma 更简洁的外观之外,使用 pragma 设置某些内容与使用动态变量设置内容之间是否存在实际差异?就此而言,我们如何决定应该使用 pragma 还是变量设置哪些语言特征(例如,为什么 $*TOLERANCE 不是 pragma)?

基本上,我会对您可以提供或指向我的任何有关 pragma 的信息感兴趣 - 尽管我的具体问题仍然是我是否可以有选择地关闭某些警告。

解决方法

目前,在处理 use 语句时,编译指示是 hard-coded。他们通常要么在与当前词法范围相关的哈希中设置一些标志,要么更改语法中动态变量的设置。

由于 use 是编译时构造,因此您只能使用编译时构造来获取它们(当前)(因此,如果 BEGIN 不是 {{1} }}).

过去我一直赞成将 use 与 pragma 分离,因为我认为它们主要是 Raku 的 Perl 根源的保留。

所有这些都将在 RakuAST 分支中进行更改。我不确定乔纳森·沃辛顿 (Jonathan Worthington) 对 RakuAST 上下文中的编译指示有何看法。一方面,我认为我们应该能够将编译指示“导出”到 use 语句的范围。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...