标签: moarvm

如何将perl6文件编译为exe

我正在使用基于Windows上的MoarVM构建的perl6版本.我创建了一些perl6文件,并希望将其编译为exe.我尝试了以下方法:

perl6 --target=MAST r.pl>r
Run Code Online (Sandbox Code Playgroud)

现在我想将r编译为可执行文件

我找到了这个链接,讨论如何使用Parrot,但我正在使用MoarVM目标:http://perlgeek.de/blog-en/perl-6/my-first-executable.writeback

我的问题如何将MoarvVM目标文件编译为Windows可执行文件?

perl6 moarvm raku

12
推荐指数
1
解决办法
1297
查看次数

Perl6 IO :: Socket :: Async截断数据

我正在使用IO :: Socket :: Async在P6中重写我的P5套接字服务器,但收到的数据在结尾处被截断1个字符,并且在下一个连接上收到1个字符.来自Perl6 Facebook组的人(Jonathan Worthington)指出,这可能是由于字符串的性质和字节在P6中的处理方式截然不同.引:

在Perl 6中,字符串和字节的处理方式截然不同.值得注意的是,字符串在字形级别上起作用.接收Unicode数据时,不仅可能将多字节序列分组,还可以分割多码点序列.例如,一个数据包的末尾可能包含字母"a",而下一个数据包可能是组合的重音符号.因此,它不能安全地传递"a",直到看到下一个数据包如何开始.

我的P6正在MoarVM上运行

https://pastebin.com/Vr8wqyVu

use Data::Dump;
use experimental :pack;

my $socket = IO::Socket::Async.listen('0.0.0.0', 7000);

react {
    whenever $socket -> $conn {
        my $line = '';
        whenever $conn {

            say "Received --> "~$_;
            $conn.print: &translate($_) if $_.chars ge 100;  
            $conn.close;              

        }
    }
    CATCH {
        default {
            say .^name, ': ', .Str;
            say "handled in $?LINE";
        }
    }
}

sub translate($raw) {

    my $rawdata = $raw;
    $raw ~~ s/^\s+|\s+$//; # remove heading/trailing whitespace

    my $minus_checksum …
Run Code Online (Sandbox Code Playgroud)

perl6 io-socket moarvm

12
推荐指数
1
解决办法
181
查看次数

Perl 6设置操作如何比较元素?

在呐喊下奔跑(2016.10)

考虑构造一个集合并测试成员资格的代码:

my $num_set = set( < 1 2 3 4 > );
say "set: ", $num_set.perl;
say "4 is in set: ", 4 ? $num_set;
say "IntStr 4 is in set: ", IntStr.new(4, "Four") ? $num_set;
say "IntStr(4,...) is 4: ", IntStr.new(4, "Four") == 4;
say "5 is in set: ", 5 ? $num_set;
Run Code Online (Sandbox Code Playgroud)

直接4不在集合中,但IntStr版本是:

set: set(IntStr.new(4, "4"),IntStr.new(1, "1"),IntStr.new(2, "2"),IntStr.new(3, "3"))
4 is in set: False
IntStr 4 is in set: True
IntStr(4,...) is 4: …
Run Code Online (Sandbox Code Playgroud)

set perl6 moarvm raku

9
推荐指数
2
解决办法
312
查看次数

Raku 总是解析吗?

raku -version 这是基于实施 Perl 6.d 的 MoarVM 2020.01.1 版构建的 Rakudo 2020.01 版。

目前看起来我无法启动任何运行时间低于 130 毫秒(主要是启动时间)的 Raku Perl6 程序。
- Raku 总是在程序启动时重新解析完整的源代码吗?
- Raku 缓存任何字节码吗?
- 所以即使是在线运行也总是需要 >= 130 毫秒?

time raku --stagestats hello_world.pl
Stage start      :   0.000
Stage parse      :   0.133
Stage syntaxcheck:   0.000
Stage ast        :   0.000
Stage optimize   :   0.002
Stage mast       :   0.006
Stage mbc        :   0.001
Stage moar       :   0.000
hello world
hello world
TEST
hello world

real    0m0,183s
user    0m0,231s
sys 0m0,016s
Run Code Online (Sandbox Code Playgroud)

performance moarvm raku

8
推荐指数
1
解决办法
296
查看次数

如何转储 MoarVM 字节码

我想知道如何调试 Moarvm 字节码。是否有文档描述例如如何将 raku 转换为 moarvm 以及如何转储生成的字节码。如果我尝试运行:

rakudo-m --target=mbc c.p6 
===SORRY!===
Cannot dump this object; no dump method
Run Code Online (Sandbox Code Playgroud)

我在某处读到了“--dump”开关,但这似乎不可用。我从 github 自定义编译 rakudo/nqp/moarvm。

moarvm raku

8
推荐指数
1
解决办法
83
查看次数

perl6如何为MoarVM提供更多内存?

我必须对大约200万行数据进行数据分析,每行大约250字节.总共大约500兆字节的数据.我在带有4G内存的Virtualbox Linux上运行最新的Rakudo.

大约8个小时后,由于内存不足,我得到了MoarVM的恐慌.如何为MoarVM提供更多内存?不幸的是,由于部分数据分析需要整个2米的行,所以我不能将2百万分成块并写入文件.

非常感谢你 !!!

lisprog

memory perl6 moarvm

6
推荐指数
2
解决办法
157
查看次数

有没有办法只使用预编译模块

我想知道是否可能只有预编译模块或某种 MoarVM 字节码。这个想法是在某个级别保护源代码 - 至少我不想在纯文本中

moarvm raku

6
推荐指数
1
解决办法
116
查看次数

如何从本机调用返回 Hash/Raku 对象?

我正在编写一个使用 的库NativeCall,如果能够Hash从导出函数返回 Raku 对我来说会非常方便。我怎样才能做到这一点?

例如,在 Ruby 中,如果我想Hash从 C 返回 a,我会这样做:

#include "ruby.h"

VALUE make_hash() {
    VALUE hash = rb_hash_new();
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

我有兴趣看看这是否可以完成,我在想也许我需要使用 MoarVM 标头或其他东西。但我不确定。

我想做的是编写一个 C 函数,它接受一个 String 来做一些事情,然后返回一个 Raku 哈希。

moarvm raku

6
推荐指数
2
解决办法
225
查看次数

MOAR进程在运行Perl6套接字服务器时膨胀

我有一个使用IO :: Socket :: Async和Redis :: Async进行消息发布的套接字服务器.只要服务器收到消息,脚本就会转换消息并生成确认消息以发送回发送方,以便发送方发送后续消息.由于翻译消息非常昂贵,因此脚本将在"start"方法下运行该部分.但是,我注意到Moar进程正在运行我的RAM.有什么想法我应该在哪里解决这个问题?谢谢!

https://pastebin.com/ySsQsMFH

use v6;
use Data::Dump;
use experimental :pack;
use JSON::Tiny;
use Redis::Async;

constant $SOCKET_PORT = 7000;
constant $SOCKET_ADDR = '0.0.0.0';
constant $REDIS_PORT = 6379;
constant $REDIS_ADDR = '127.0.0.1';
constant $REDIS_AUTH = 'xxxxxxxx';


constant $IDLING_PERIOD_MIN = 180 - 2; # 3 minutes - 2 secs
constant $CACHE_EXPIRE_IN = 86400; # 24h hours

# create socket
my $socket = IO::Socket::Async.listen($SOCKET_ADDR, $SOCKET_PORT);

# connnect to Redis ...
my $redis;
try {
    my $error-code = "110";
    $redis …
Run Code Online (Sandbox Code Playgroud)

asynchronous perl6 io-socket moarvm

5
推荐指数
1
解决办法
101
查看次数

MoarVM 中的字符串和链

当使用 MoarVM 后端在 Rakudo 上运行 Raku 代码时,是否有任何方法可以从正在运行的程序内部打印有关给定 Str 如何存储在内存中的信息?特别是,我很好奇是否有一种方法,看看有多少钢绞线目前弥补STR(无论是通过乐自省,NQP,或者一些访问MoarVM水平(不这样的话,即使在运行时存在吗?)。

如果在运行时无法访问此信息,是否有办法通过 Rakudo 的命令行标志之一(例如--target, 或 )的输出来获取它--tracing?还是通过调试器?

最后,MoarVM 是否管理给定 Str 中的 Strands 数量?我经常听到(或说)Raku 的超能力之一是可以在 O(1) 时间内索引到 Unicode 字符串,但我一直在考虑病理情况,感觉就像是 O(n) . 例如,

(^$n).map({~rand}).join
Run Code Online (Sandbox Code Playgroud)

似乎它会创建一个长度与$n$nStrands组成的长度成正比的 Str – 如果我正确理解数据结构,这意味着进入这个 Str 需要检查每个 Strand 的长度,时间复杂度为 O( n)。但我知道可以压平 Strand-ed Str;在这种情况下,MoarVM 会做类似的事情吗?还是我误解了更基本的东西?

string rakudo moarvm raku nqp

5
推荐指数
1
解决办法
88
查看次数

Rakudo/MoarVM 中如何实现动态范围变量?

也就是说,诸如$*scalar@*array和 之类的变量%*hash。我问这个问题主要是因为我想了解它们对语法/正则表达式引擎的整体性能有多大负担。

为了使我的问题更加精确,我想知道会发生什么:

查找时,

my $var-1 = $*scalar
my $var-2 = @*array[3]
my $var-3 = %*hash<key>
Run Code Online (Sandbox Code Playgroud)

并在插入时,

$*scalar = "new value 1"
@*array[3] = "new value 2"
%*hash{"existing key"} = "new value 3"
%*hash{"new key"}      = "new value 3"
Run Code Online (Sandbox Code Playgroud)

与符号表、调用堆栈或任何涉及的数据结构(例如用于处理动态作用域的特殊堆栈,或者可能是堆栈的哈希表)的关系。

我的主要兴趣是数组和哈希,以及每次我们推送/弹出/修改/插入数组元素或插入/修改/删除哈希的键/值对时它们是否完全重复。

编辑: 我对动态范围的假设是错误的。我认为,当修改动态范围的散列时,更改将在进行更改的词法范围的末尾被撤消,类似于 Perl 中使用关键字及其local关联的“临时堆栈”发生的情况,因此我的“数据结构是否重复?” 问题。但这并不是动态范围的含义。

我的假设是以下 Raku 代码等效于以下 Perl 代码。相反,为了复制 Perl 代码的行为,我们必须执行第二段 Raku 代码的操作。

乐1:

my %*hash = (key => "value");

sub test() { …
Run Code Online (Sandbox Code Playgroud)

rakudo moarvm raku

5
推荐指数
1
解决办法
172
查看次数

什么是 nqp、nqp-m、rakudo-debug、rakudo-debug-m、rakudo-gdb-m、rakudo-m、rakudo-valgrind-m?

当我从源安装rakudo时:

$ git clone git@github.com:rakudo/rakudo.git
$ cd rakudo
$ perl Configure.pl --gen-moar --gen-nqp --backends=moar
$ make
$ make install
Run Code Online (Sandbox Code Playgroud)

它生成以下文件./install/bin

$ ls -1 install/bin
moar
nqp
nqp-m
perl6
perl6-debug
perl6-debug-m
perl6-gdb-m
perl6-lldb-m
perl6-m
perl6-valgrind-m
raku
raku-debug
rakudo
rakudo-debug
rakudo-debug-m
rakudo-gdb-m
rakudo-lldb-m
rakudo-m
rakudo-valgrind-m
Run Code Online (Sandbox Code Playgroud)

我知道rakurakudoperl6是用于运行一个命令.raku脚本,但什么是其他命令,我如何使用它们?

moarvm raku nqp

4
推荐指数
1
解决办法
106
查看次数

标签 统计

moarvm ×12

raku ×9

perl6 ×5

io-socket ×2

nqp ×2

rakudo ×2

asynchronous ×1

memory ×1

performance ×1

set ×1

string ×1