在我测试的语言中,- (x div y )不等于-x div y; 我已经//在Python中,/在Ruby中,div在Perl 6中进行了测试; C有类似的行为.
这种行为通常是根据规范,因为div通常被定义为舍入向下分工的结果,但它不从的观点算术点做出很大的意义,因为它使div行为以不同的方式取决于标志,它引起混乱,如这篇文章如何在Python中完成.
这个设计决策背后是否有一些特定的理由,或者只是div从头开始定义?显然Guido van Rossum在博客文章中使用了一致性论证,解释了它是如何在Python中完成的,但如果你选择整理,你也可以有一致性.
Perl 6似乎爆发了相等的运算符.什么是=:=?leg和之间有什么区别cmp?还是eqv和===?
有没有人有一个很好的总结?
有(相对)众所周知的Perl公理,"只有perl可以解析Perl." 我想知道,Perl 6会保持这种情况吗?
扩展讨论......考虑到PyPy最近的更新,我想到了这个问题.Perl的独特解析能否阻止它进行类似的工作?在Perl代码(PPI?)的受限制的静态视图中有多大价值?Perl 6可以有一个JIT编译器吗?*
*我不确定这些概念是否相关.是吗?
Parrot是最初为Perl 6设计的虚拟机.
Parrot VM提供哪些技术功能,如Java虚拟机(JVM)/热点VM和公共语言运行时(CLR)等竞争虚拟机缺乏?
Perl 6目前的状态是什么,它是否已投入生产?我们现在站在哪里?有许多程序员对Perl 6的当前进展感到好奇.
每次我下载Rakudo Perl 6的新副本时,我都运行以下表达式,只是为了了解它当前的性能:
say [+] 1 .. 100000;
Run Code Online (Sandbox Code Playgroud)
并且速度一直在增加,但每次计算都有明显的延迟(几秒).作为比较,Perl 5(或其他解释语言)中的类似内容几乎立即返回:
use List::Util 'sum';
print sum(1 .. 100000), "\n";
Run Code Online (Sandbox Code Playgroud)
或者在Ruby中(也几乎是即时的):
(1 .. 100000).inject(0) {|sum,x| sum+x}
Run Code Online (Sandbox Code Playgroud)
将表达式重写为Perl6的loop速度大约是缩小范围的两倍,但对于简单的计算,它仍然是一个非常明显的延迟(超过一秒):
my $sum;
loop (my $x = 1; $x <= 100000; $x++) {$sum += $x}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,Perl6实现的哪些方面导致了这些性能问题?并且这应该随着时间的推移而改善,还是这个开销是Perl6使用的"一切都是对象"模型的不幸副作用?
最后,loop构造比[+]减速算子更快吗?我认为循环将导致更多的总操作而不是减少.
编辑:
我会接受这两个mortiz年代和hobbs'如果我能的回答.一切都是作为一个方法调用处理更直接地回答为什么[+]慢,所以一个人得到它.
在阅读有关Perl 6的内容时,我看到一个被大肆宣扬的功能,您不再需要这样做:
return "0 but true";
Run Code Online (Sandbox Code Playgroud)
...但可以改为:
return 0 but True;
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,Perl 6中的真相如何运作?在Perl 5中,它很简单:0,""和undef都是假的,其他一切都是真的.
在布尔上下文中,Perl 6中有哪些规则?
来自Perl 5背景,迁移到Perl 6或Python有什么好处?
编辑:如果你认为这只是因为你认为它只是火焰棒,请阅读下面的答案.他们不是在争论; 他们写得很好,讨论了每种语言的优缺点.为Stack Overflow社区提供一些功劳.
我一直在研究在Perl 6中构造惰性列表的各种方法,我想收集描述Fibonacci序列的所有简洁方法.
我将从马萨克的期刊中的三个开始:
my @fibs := (0, 1, -> $a, $b { $a + $b } ... *);
my @fibs := (0, 1, { $^a + $^b } ... *);
my @fibs := (0, 1, *+* ... *);
Run Code Online (Sandbox Code Playgroud)
我认为这样的东西也会起作用,但我认为我的语法有误:
my @fibs := (0, 1, (@fibs Z+ @fibs[1..*]));
Run Code Online (Sandbox Code Playgroud)
有什么东西急切(切片?)并导致Rakudo进入无限循环.它是Haskell定义的翻译:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)
更新:
看起来像zipWith示例的问题是@fibs[1..*]切片.if tail定义为sub tail (@x) {my $i = 1; {@x[$i++]}...*}然后它正常工作.我很想知道为什么切片对任何熟悉Rakudo内部的人来说都不是懒惰的.
另一个不错的是:
my …Run Code Online (Sandbox Code Playgroud)