在perl5中,通过回调可以很容易地在libperl.so中链接、设置一些变量并运行一些代码。在perl6中有这样做的故事吗?
发布于 2018-06-09 06:28:23
我认为您可以在https://metacpan.org/pod/Inline::Perl6找到这方面的最新技术,它在Perl5中嵌入了Rakudo。
发布于 2018-06-09 15:34:14
除了@伊丽莎白-马蒂森的评论之外,没有,没有这样的事情。虽然perl解释器是一个整体,可以相对容易地转换为.so
库,然后连接到一些API端点,而Perl 6是两个重要的东西:一个虚拟机,无论是Java还是MoarVM,外加解释器Rakudo。可能会出现这样一种情况,即您不需要嵌入Java或MoarVM,因为这两种语言将在同一个VM中运行。例如,想想嵌入到Clojure中的Perl6。或者嵌入在007中的Perl6,两者都在MoarVM中运行。这很容易,而且您的目标是具有相同功能的VM。但是C++、C和Perl6有一个非常不同的抽象虚拟机作为目标;想想Unicode处理,或者并发接口。在C中嵌入Perl6基本上就是从C运行Perl6程序,而不是从命令行运行它们。
有可能以同样的方式结束Perl,一些Perl6功能,如Unicode handling或grammars,可能最终移植或嵌入到其他语言中。但是我现在还没有看到将Perl嵌入到C或C++中的明确用例,因此,投入一些精力在这类事情上会更好地应用于完全不同的东西。
发布于 2018-08-07 02:16:54
这不是一个答案,但假设我已经有一个已经存在的C程序,它被设计为使用.dlls或.sos插件,它们是通过dlopen或LoadLibrary加载的,使用dlsym或GetProcAddress找到一个API入口点,然后使用某种类型的句柄调用该入口点,让插件回调回主进程。
现在,假设我希望我的插件(在这个.dll或.so中)加载moarvm,然后运行一些perl6脚本,该脚本反过来使用NativeCall回调到主进程中。我该怎么做呢?
或者,假设我想让我的插件(在这个.dll或.so中)加载jvm,然后运行一些perl6脚本,等等,我该怎么做呢?
仅仅为了加载perl6而加载perl5似乎是一个愚蠢的解决方案。这可能行得通但是..。
https://stackoverflow.com/questions/50769069
复制相似问题