小编Pat*_*Pat的帖子

随着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 performance rakudo perl6 raku

27
推荐指数
4
解决办法
2971
查看次数

我知道Perl 5.学习Perl 6有什么好处,而不是转向Python?

来自Perl 5背景,迁移到Perl 6或Python有什么好处?

编辑:如果你认为这只是因为你认为它只是火焰棒,请阅读下面的答案.他们不是在争论; 他们写得很好,讨论了每种语言的优缺点.为Stack Overflow社区提供一些功劳.

python perl comparison perl6 raku

23
推荐指数
7
解决办法
2904
查看次数

是否值得学习Perl 6?

我有机会使用Rakudo编译器在Perl 6上进行为期两天的课程.

我不想发动宗教战争,但值得我花时间吗?有没有理由相信Perl 6将在未来两年内在现实世界中实用?目前有人有效使用它吗?

更新

我上了课,学到了很多东西.然而,在第1天之后,我的思绪有点不知所措.Perl 6中有很多很酷的想法,看看有什么过滤到其他语言是很好的.

总的来说,这次经历积极地利用了我的时间,尽管我在第二天无法吸收太多.如果这是一个为期三天的课程,那么仅仅因为你可以在很短的时间内处理多少是有限的.

perl perl6 raku

21
推荐指数
4
解决办法
3259
查看次数

有多少种方法可以描述Perl 6中的Fibonacci序列?

我一直在研究在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)

perl fibonacci lazy-evaluation perl6 raku

21
推荐指数
1
解决办法
1259
查看次数

如何完全展平Perl 6列表(列表列表)...)

我想知道如何完全展平列表和包含它们的东西.除此之外,我想出了这个解决方案,它可以滑动具有多个元素的东西并将它们放回去,或者在滑动之后用一个元素取出它.

这与我如何"压扁"perl 6中的列表列表略有不同,这是完全平坦的,因为任务是重组.

但是,也许有更好的方法.

my @a  = 'a', ('b', 'c' );
my @b  = ('d',), 'e', 'f', @a;
my @c  = 'x', $( 'y', 'z' ), 'w';

my @ab = @a, @b, @c;
say "ab: ", @ab;

my @f = @ab;

@f = gather {
    while @f {
        @f[0].elems == 1 ??
            take @f.shift.Slip
                !!
            @f.unshift( @f.shift.Slip )
        }
    }

say "f: ", @f;
Run Code Online (Sandbox Code Playgroud)

这给出了:

ab: [[a (b c)] [(d) e f [a (b c)]] [x …
Run Code Online (Sandbox Code Playgroud)

list flatten perl6 raku

17
推荐指数
2
解决办法
560
查看次数

使用Perl 6从.bib文件中提取

在LaTeX中写论文的时候,我有这个.bib文件供参考管理:

@article{garg2017patch,
  title={Patch testing in patients with suspected cosmetic dermatitis: A retrospective study},
  author={Garg, Taru and Agarwal, Soumya and Chander, Ram and Singh, Aashim and Yadav, Pravesh},
  journal={Journal of Cosmetic Dermatology},
  year={2017},
  publisher={Wiley Online Library}
}

@article{hauso2008neuroendocrine,
  title={Neuroendocrine tumor epidemiology},
  author={Hauso, Oyvind and Gustafsson, Bjorn I and Kidd, Mark and Waldum, Helge L and Drozdov, Ignat and Chan, Anthony KC and Modlin, Irvin M},
  journal={Cancer},
  volume={113},
  number={10},
  pages={2655--2664},
  year={2008},
  publisher={Wiley Online Library}
}

@article{siperstein1997laparoscopic,
  title={Laparoscopic thermal ablation of …
Run Code Online (Sandbox Code Playgroud)

latex bibtex tex perl6 raku

17
推荐指数
1
解决办法
923
查看次数

如何在Perl6中编写自定义访问器方法?

如何在Perl6中编写自定义访问器方法?

如果我有这个课程:

class Wizard {
    has Int $.mana is rw;
}
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

my Wizard $gandalf .= new;
$gandalf.mana = 150;
Run Code Online (Sandbox Code Playgroud)

假设我想在我的Perl6类中为一个setter添加一点检查而不放弃$gandalf.mana = 150;表示法(换句话说,我不想写这个:) $gandalf.setMana(150);.如果它试图设定负面法术力,该程序应该死亡.我该怎么做呢?Perl6文档提到它可以编写自定义访问器,但没有说明如何.

perl6 raku

16
推荐指数
2
解决办法
433
查看次数

Perl 6是否与Python的dir()相当?

我正试图在Perl 6中感到舒服.当我在REPL提示符下时,我在Python中发现的一件事就是我可以做一个dir(对象)并找出一个对象的属性,在Python中包含对象的方法.

这通常有助于提醒我想做什么; "哦,这是正确的,Python中的修剪被称为条带",就像那样.

在Perl 6中,我知道内省方法.WHO,.WHAT,.WHICH,.HOW和.WHY,但这些是在类或对象级别.我如何找出对象内部的内容,以及我可以对它做些什么?

introspection perl6 raku

16
推荐指数
1
解决办法
285
查看次数

perl6语法,不确定示例中的某些语法

我还在学习perl6,我正在阅读这个页面上的语法示例:http://examples.perl6.org/categories/parsers/SimpleStrings.html ; 我已多次阅读有关正则表达式的文档,但仍有一些我不理解的语法; 任何人都可以开导我吗?非常感谢你 !!!

token string { <quote> {} <quotebody($<quote>)> $<quote> }
Run Code Online (Sandbox Code Playgroud)

问题1:令牌中的这个"{}"是做什么的?捕获标记为<()>,嵌套结构为tilda'('〜')'; 但是什么是{}?

token quotebody($quote) { ( <escaped($quote)> | <!before $quote> . )* }
Run Code Online (Sandbox Code Playgroud)

问题2a:在<>中转义($ quote)将是一个正则表达式函数,对吗?它需要$ quote作为参数并返回另一个正则表达式?

问题2b:如果我想表示"引用前没有的字符",我应该使用".$!before $ quote>"而不是"<!before $ quote>".??

token escaped($quote) { '\\' ( $quote | '\\' ) } # I think this is a function;
Run Code Online (Sandbox Code Playgroud)

非常感谢你 !!!

lisprog

regex grammar perl6 raku

16
推荐指数
2
解决办法
316
查看次数

如何使用新的JS后端从Perl 6调用JavaScript内置函数?

我知道在Perl 6使用该后端时可以调用Java:如何从perl6调用Java方法

有没有办法访问例如Perl 6中的JavaScript DOM接口,并在浏览器中运行新的Rakudo JavaScript VM?

也许是这样的:

use v6;
use javascript::dom:from<JavaScript>;
Run Code Online (Sandbox Code Playgroud)

javascript rakudo perl6 raku

16
推荐指数
1
解决办法
375
查看次数