理解语用

Understanding pragmas

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

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

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

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

目前,pragmas hard-coded 处理 use 语句。他们通常要么在与当前词法范围相关联的散列中设置一些标志,要么更改语法中动态变量的设置。

由于 use 是编译时构造,您只能使用编译时构造来获取它们(当前)(因此如果它不是 BEGIN 的一部分,则需要

=10=]).

我过去一直赞成将 use 与 pragma 解耦,因为我认为它们主要是 Raku 的 Perl 根的遗留物。

所有这些都将在 RakuAST 分支中更改。我不确定 Jonathan Worthington 对 RakuAST 上下文中的 pragma 有什么想法。一方面,我认为我们应该能够将编译指示“导出”到 use 语句的范围。