是否可以将perl6嵌入到C(或C ++)程序中?

时间:2018-06-08 22:19:59

标签: embedding perl6

在perl5中,很容易在libperl.so中链接,设置一些变量并使用回调运行一些代码。在perl6中有没有这样做的故事?

3 个答案:

答案 0 :(得分:6)

我认为你可以在https://metacpan.org/pod/Inline::Perl6找到这方面的最新技术,它将Rakudo嵌入到Perl 5中。

答案 1 :(得分:2)

除了@ elizabeth-mattijsen所评论的,不,没有这样的事情。虽然perl解释器是一个单片的东西,可能相对容易变成.so库然后与一些API端点链接,但Perl 6是两件大事:虚拟机,Java或MoarVM,以及解释器, Rakudo。可能存在您不需要嵌入Java或MoarVM的情况,因为两种语言都将在同一VM中运行。例如,想想Perl 6嵌入在Clojure中。或嵌入在007中的Perl6,两者都在MoarVM中运行。这将很容易,您将瞄准具有相同功能的VM。但是C ++,C和Perl6有一个非常不同的抽象虚拟机作为目标;考虑Unicode处理或并发接口。在C中嵌入Perl6基本上是从C运行Perl6程序,而不是从命令行运行它们。

Perl正则表达式可能以相同的方式结束,一些Perl 6功能(如Unicode handlinggrammars)可能最终移植或嵌入其他语言。但是我现在还没有看到在C或C ++中嵌入Perl的明确用例,并且为这种事情付出一些努力将会更好地用于完全不同的事情。

答案 2 :(得分:1)

这不是答案,但是假设我已经有一个旨在使用.dlls或.sos插件的C程序,并且通过dlopen或LoadLibrary加载了它们,找到了一个API入口点使用dlsym或GetProcAddress,然后使用某种类型的插件句柄调用该入口点,以使调用返回主进程。

现在,假设我希望我的插件(在此.dll或.so内部)加载moarvm,然后运行一些perl6脚本,该脚本又使用NativeCall回调到主进程中。我将如何去做?

或者,假设我希望我的插件(在此.dll或.so内部)加载jvm,然后运行一些perl6脚本,等等。我该怎么做?

仅加载perl5来加载perl5似乎是一个愚蠢的解决方案。它可能有效,但是...