首页 > 解决方案 > 理解语用语

问题描述

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

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

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

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

标签: warningsrakusuppress-warningsrakudo

解决方案


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

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

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

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


推荐阅读