perl6 – 如何通过Nativecall回调传递Perl 6对象?
发布时间:2020-12-15 22:02:58 所属栏目:大数据 来源:网络整理
导读:我正在使用NativeCall接口. 该库将多次调用我的回调函数. 这很好.我可以用右边声明我的回调 签名,将其作为回调传递,并且库只调用sub 精细. 它还能够将有效负载void *指针设置为任何东西 我想,它将包括在我的回调函数调用中. 我可以隐藏一个Perl Str,例如,在
我正在使用NativeCall接口.
该库将多次调用我的回调函数. 这很好.我可以用右边声明我的回调 它还能够将有效负载void *指针设置为任何东西 我可以隐藏一个Perl Str,例如,在有效载荷中成功往返吗? sub set_userdata(Pointer) returns int32 is native { ... } sub set_callback(&callback(Pointer $userdata --> int32)) returns int32 is native { ... } sub callback(Pointer $userdata) returns int32 { my Str $mystring = ??? ... } my Str $my-userdata-string; set_userdata(???); set_callback(&callback); 看起来它可能适用于一些绑定,“是rw”,nativecast()和/或.deref. 解决方法
在这种情况下(例如CStruct,CArray和CPointer)或Blob,您只能使用本机表示.您还有责任确保从Perl 6的角度保持对作为userdata alive传递的内容的引用,因此GC不会回收传递给C函数的内存.
内存管理是你不能将任何旧的Perl 6对象传递给C函数的原因:GC无法知道对象是否仍然可以通过它无法反省的某些C数据结构到达.在像MoarVM这样的VM中,对象随着时间的推移在内存中移动,这也是垃圾收集过程的一部分,这意味着C代码可能最终会出现过时的指针. 另一种策略不是根本不传递指针,而是传递一个整数并使用它来索引到一个对象数组. (这就是MoarVM内部的libuv绑定如何跟踪VM级别的回调,fwiw.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- golang random string and int
- 如何通过REST API为Spring-social和spring-security设置登录
- 是否有Delphi IDE的git插件?
- perl写入文件时中文乱码终极解决方案
- java – 使用相同存储库和模型类的多个数据源的Spring Boo
- java – Hibernate Mapping无法在离线模式下工作
- Delphi2010组件/控件安装方法和注意事项
- Learning Perl: 2.3. Perl's Built-in Warnings
- object-oriented programming (OOP)
- lua使用cjson获取MySql结果中文乱码