提问人:codesections 提问时间:6/19/2021 更新时间:6/19/2021 访问量:123
了解编译指示
Understanding pragmas
问:
我有一些关于编译指示的相关问题。让我开始这一系列问题的是试图确定是否有可能禁用一些警告,而无需一直到(我仍然想担心,至少有点!我仍然对这个具体问题的答案感兴趣。no worries
但思考这个问题让我意识到,我并不真正理解编译指示是如何工作的。很明显,至少有一些杂注采用参数(例如,)。但它们似乎不是函数。它们在整体 MOP 中的什么位置?它们有点像特质吗?还是包裹?有什么方法可以反省它们吗?查看当前有效的编译指示?use isms<Perl5>
编译指示是内置在语言中,还是用户可以添加?在编写库时,我希望有一些错误/警告,用户可以选择使用编译指示禁用这些错误/警告——这是否可能,或者它们是否仅限于在编译器中使用?如果我可以创建我的编译指示,那么除了编译指示的外观更简洁之外,使用编译指示设置内容与使用动态变量设置内容之间是否有实际区别?就此而言,我们如何决定应该使用编译指示与变量来设置哪些语言特征(例如,为什么不使用编译指示)?$*TOLERANCE
基本上,我对您可以提供或指向我的有关编译指示的任何信息感兴趣——尽管我的具体问题仍然是我是否可以有选择地关闭某些警告。
答:
目前,编译指示在语句的处理中是硬编码的。他们通常要么在与当下的词法范围相关联的哈希中设置一些标志,要么更改语法中动态变量的设置。use
由于是编译时构造,因此您只能使用编译时构造来获取它们(当前)(因此,如果它不是编译时构造的一部分,则需要)。use
BEGIN
use
过去,我一直赞成与 pragma 脱钩,因为我认为它们主要是 Raku 的 Perl 根源的遗留物。use
所有这些都将在 RakuAST 分支中更改。我不确定乔纳森·沃辛顿(Jonathan Worthington)对RakuAST上下文中的编译指示有什么想法。首先,我认为我们应该能够将编译指示“导出”到语句的作用域。use
评论