只能'perl6'parsingPerl 6吗?
有一个(相对)众所周知的Perl公理,“只有perl可以parsingPerl”。 我想知道,对于Perl 6,这仍然是真的吗?
扩大讨论…鉴于最近PyPy的更新,我想到了这个问题。 Perl的独特的可parsing性排除了类似的努力吗? 在Perl代码(PPI?)的受限制的静态视图中是否有很多值? Perl 6可以有一个JIT编译器吗?*
*我不确定这些概念是否相关。 他们?
没有perl6,并且有许多Perl 6编译器。 Perl 6有一个语法,虽然它是用Perl 6编写的 ,所以只要你能理解,它就会告诉你所有你需要知道的东西。
我刚才问拉里这个问题,因为我在圣保罗Perl工作坊午饭时坐在他的对面。 他说现在是“只有Perl 6可以parsingPerl 6”,在Perl上都有大写字母,这意味着与原始语句不同。
你不需要一个特定的程序来完成这个任务,不过因为Perl 6的目标是一个标准和许多实现。 尽pipeLarry在今天的演讲中使用了他的Rakudo,但没有“perl6”,尽pipe他使用了几个不同的实现方式。
最后我看了,Perl 6inheritance了Perl 5的/字符,这可能意味着当期望的时候是“正则expression式的开始”,或者当期望操作符的时候,意思是“分割”。 鉴于此,原型和Perl 6至less在静态标记化方面与Perl 5相同。 标记一个Perl 6程序的唯一方法是在Perl 6编译器中运行一个运行的Perl 6解释器。 海龟一路下来,再一次。
公理“只有perl可以parsingPerl”,其中“perl”是解释器二进制文件,“Perl”是语言,主要源于parsing规则在parsing文件时可能改变的事实。 在Perl 5中,这来自原型子程序声明,来自各种编译指示和来源filter。
在我看来,这只会成为Perl 6中的一个问题。在Perl 5中,parsing器规则可以改变的地方是有限的,而在Perl 6中,它们是宽泛的和多样的。 除了Perl 5的所有function外,Perl 6允许您定义自己的操作符,而且由于这个定义是在Perl代码中完成的,所以需要一个Perl解释器来理解它。
据我所知,还没有实现支持它,但Perl 6规范还包括真正的语言级macros,它可以通过文本或操作AST来重构Perl 6代码。 这两个都需要Perl解释器的存在来执行它们的魔法。
所以最后,我有一种感觉,Perl 6会使得公理比Perl 5更强大(对于语法荧光笔的作者来说更是一场噩梦:))当然,这全部是为了增加表情语言的力量,所以我可以让步。
上面的推论是,与Perl 5不同的是,Perl 6有一个forms规范,所以公理可能不得不改变为“只有解释器实现Perl 6规范才能parsingPerl 6”,但这有些迂腐。
根据更新:
我不认为上述内容排除了Perl 6的JIT编译器的概念,因为根据定义,这样的编译器也必须包含Perl 6解释器。 就静态编译而言,这是可能的,但是会严重限制语言的运行时function,因为任何涉及eval的构造都不起作用。
PPI在Perl 5版本中很有用,因为perl解释器不提供许多丰富易用的AST接口。 在Perl 6中,内省的级别更高,所以解释器本身可以提供所有必要的工具。
Perl 6是一个规范,遵循该规范的任何程序都是Perl 6,就像大多数其他语言一样。 作品中有很多Perl 6的实现。
Perl6可以有一个JIT编译器吗?
您意味着Perl5不能基于“只有perl
才能parsingPerl5”而被打乱,但事实并非如此。 即使Perl5程序每次运行时都可以进行不同的编译,但并不能防止它被打乱。
所以,如果Perl5是最松散定义的语言之一,那么为什么Perl6不能这么做。